2010-08-05 1 views
1

Если я делаю print_r ($ _ SESSION) в моем page.ctp я получаю:CakePHP (1,3) - доступ к сессии вары в представлениях

Array 
(
    [Config] => Array 
     (
      [userAgent] => b3346028c15f82ac5d4b25c4f50d8718 
      [time] => 1281034201 
      [timeout] => 100 
     ) 

    [manualLogout] => 1 
    [Message] => Array 
     (
     ) 

    [Auth] => Array 
     (
      [redirect] => /events/add/controller:events 
     ) 

    [facebookSynced] => 1 
) 

Значение переменной facebookSynced Я поставил в мой контроллер с $ this-> Session-write() - и там он находится в сеансе, как ожидалось. Но когда я делаю пр ($ this-> Session) или пр ($ сеанса) от page.ctp я получаю:

SessionHelper Object 
(
    [helpers] => Array 
     (
     ) 

    [__active] => 1 
    [valid] => 
    [error] => 
    [_userAgent] => b3346028c15f82ac5d4b25c4f50d8718 
    [path] =>/
    [lastError] => 
    [security] => medium 
    [time] => 1281016202 
    [sessionTime] => 1281034202 
    [watchKeys] => Array 
     (
     ) 

    [id] => 
    [host] => 
    [timeout] => 
    [base] => /Eclipse/Calc_1.3.2/trunk 
    [webroot] => /Eclipse/Calc_1.3.2/trunk/ 
    [here] => /Eclipse/Calc_1.3.2/trunk/users/login 
    [params] => Array 
     (
      [controller] => users 
      [action] => login 
      [named] => Array 
       (
       ) 

      [pass] => Array 
       (
       ) 

      [plugin] => 
      [form] => Array 
       (
       ) 

      [url] => Array 
       (
        [url] => users/login 
       ) 

      [models] => Array 
       (
        [0] => User 
       ) 

     ) 

    [action] => login 
    [data] => 
    [theme] => 
    [plugin] => 
) 

Как мне получить доступ к сессии с вар facebookSynced в нем, и что разница между этими двумя «сеансами». Дополнительно: в core.php у меня есть:

Configure::write('Session.save', 'php'); 
Configure::write('Session.cookie', 'CAKEPHP'); 
Configure::write('Session.save', 'custom_sesh'); 
Configure::write('Session.timeout', '180'); 
Configure::write('Session.checkAgent', true); 
Configure::write('Session.start', true); 

Содержимое custom_sesh только одна строка:

ini_set('session.cookie_lifetime', 0); 
+1

Совет: используйте debug ($ this) вместо print_r по разу u не помню, где и разместил его .. и нахождение его занимает много времени .. с отладки .. на выходе он дает u номер строки и имя файла также .. ее там и хорошо использовать: D –

ответ

3

Первый результат от print_r ($ _ SESSION) представляет собой список значений фактическая переменная сеанса.

Второй результат из pr ($ this-> Session) показывает содержимое вспомогательного объекта Session CakePHP.

Оба совершенно разные вещи. Если вы хотите получить доступ к значению переменной сессии facebookSynced вы, вероятно, хотите сделать что-то вроде:

$foo = $_SESSION["facebookSynced"]; 
+0

Хотя это работает, если вы пытаетесь остаться в рамках, я бы рекомендовал решение DavidYell. Но имейте верх для того, чтобы быть абсолютно правильным. –

+0

Да, я пытаюсь остаться в рамках - как я похвалил Дэвида - я не могу получить переменную через $ session или $ this-> Session - я думаю, что она должна быть там ... есть ли у вас какие-то идеи? – Owen

2

По вашему мнению, вы должны использовать хелпер Session.

echo $session->read('Key.value'); 

Где вы написали в чем-то, как, в контроллере,

$this->Session->write('Key.value','example'); 
+0

var, я хочу, не в $ session (или в $ this-> Session), см. Справку pr() SessioHelper в моем вопросе, но она находится в $ _SESSION - вот почему я озадачен. – Owen

+0

Могу сказать, вы должны записать его в сеанс, используя помощник Cake, чтобы он был доступен для торта. Если вы хотите придерживаться рамки, это тот метод, который вам понадобится.Также проверьте в app/config, что ваши сессии хранятся, и ваши настройки безопасности –

+0

Я думал, что помощник сессии хранит и читает в php $ _SESSION (предположим, что это метод, настроенный в core.php). Я не прав? nukefusion (выше) говорит: «Оба совершенно разные вещи» ...? – Owen

0

если вы используете

$this->Session->write('facebookSynced',true); 

в контроллере,

просто использовать

$foo = $this->Session->read('facebookSynced'); 

на вид.

как простой как это! :)