2010-08-05 38 views
1

如果我在page.ctp做的print_r($ _ SESSION)我得到: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 
) 

的VAR facebookSynced我在控制器中設置與$這個 - >會話寫入() - 並且它在會話中按預期方式。但是,當我從page.ctp做PR($這個 - >會議)或PR($ session中)我得到:

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 VAR在它我的會議,什麼是這兩個'會議'之間的區別。額外的信息:在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

提示:使用調試($ this),而不是print_r 有時你不記得你把它放在哪裏..並發現它需要很多時間..與調試..在輸出它給你的行號和文件名也..其中有很好的使用它:D – 2010-08-05 18:38:13

回答

3

從print_r的第一個結果($ _ SESSION)是的值的列表實際會話變量。

pr($ this-> Session)的第二個結果顯示CakePHP的Session助手對象的內容。

兩者是完全不同的東西。如果你想訪問你的會話變量的價值facebookSynced你可能會想要做的事,如:

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

雖然這個工作,如果你想保持在框架內,我建議DavidYell的解決方案。但對絕對正確的觀點有一個滿意的答覆。 – 2010-08-05 16:26:58

+0

是的我想留在框架中 - 就像我向David推薦的 - 我無法通過$ session或$ this-> Session獲得變量 - 我認爲它應該在那裏...你有什麼想法嗎? – Owen 2010-08-05 18:45:48

2

在你看來,你應該使用會話幫手。

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

如果你寫的東西一樣,在你的控制器,

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

我想要的變量不在$ session中(或者在$ this-> Session中),請參閱我的問題中的SessioHelper的pr()轉儲,但它在$ _SESSION中 - 這就是爲什麼我感到困惑。 – Owen 2010-08-05 18:07:21

+0

我的觀點是,您必須使用Cake助手將它寫入會話中,以便它可用於蛋糕。如果你想堅持框架,這是你需要的方法。還請檢查應用程序/配置您的會話正在存儲,並且您的安全設置 – 2010-08-06 08:10:04

+0

我認爲會話助手存儲並讀入到php $ _SESSION(假設這是在core.php中設置的方法)我錯了嗎? nukefusion(上圖)說「兩者完全不同」...? – Owen 2010-09-30 22:31:37

0

如果您正在使用

$this->Session->write('facebookSynced',true); 
在你的控制器

只使用

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

在視圖中。

就這麼簡單! :)