2012-03-18 68 views
1

我已經將我的開發者Kohana服務器設置爲使用加密數據庫作爲默認會話類型。我還將其與Auth結合使用來實現用戶身份驗證。Kohana 3.2 - 數據庫會話在新頁面請求中丟失數據

現在我的用戶能夠正確地進行身份驗證,並且會話中存儲了身份驗證密鑰。我還在登錄過程中存儲了諸如用戶的名字和商業名稱之類的附加數據。

當我登錄功能是準備將用戶重定向到用戶的儀表板,我能正確地看到所有的數據,當我做$session::instance()->as_array();Array ([auth_user] => NRyk6lA8 [businessname] => Dudetown [firstname] => Matt)

只要我將用戶重定向到另一個頁面,$session::instance()->as_array();爲空。

通過拋出Session :: instance()對象,我可以看到Session ID仍然相同。

雖然我看着我的數據庫表,但我沒有看到任何會話記錄被保存,我的會話表是空的。

我bootstrap.php中包含:

Session::$default = 'database'; 
Cookie::$salt = 'asdfasdf'; 
Cookie::$expiration = 1209600; 
Cookie::$domain = FALSE; 

和我session.php文件的配置文件看起來像:

return array(
    'database' => array(
     'name' => 'auth_user', 
     'encrypted' => TRUE, 
     'lifetime' => 24 * 3600, 
     'group' => 'default', 
     'table' => 'sessions', 
     'columns' => array(
      'session_id' => 'session_id', 
      'last_active' => 'last_active', 
      'contents' => 'contents' 
     ), 
     'gc' => 500,   
    ), 
); 

我看着高和低的答案..如果任何人有任何建議,我所有的耳朵!

謝謝!

回答

0

我曾經有同樣的問題。它允許我使用某些瀏覽器(safari和firefox)登錄,並且無法使用Chrome和Internet Explorer登錄。它的工作這麼多,調試後,我看到了這個問題,是因爲設置

Cookie::$domain = 'domain.tld'; 

的我做它糾正它的工作:圍繞

Cookie::$domain = '.domain.tld'; 

檢查。

+0

謝謝思南, 是的,我真的在Kohana論壇看到你的帖子,並實施Cookie :: $ domain = FALSE,但不幸的是它沒有工作。 我最初嘗試與我的'.domain.tld',但我不知道它是否工作正常,因爲我有我的服務器實例安裝在子目錄中,它仍然給我麻煩。 我將很快部署到轉換服務器,以便我可以儘快嘗試您的建議。 感謝您的意見,我會回覆此主題與我的調查結果 謝謝! – reado 2012-03-23 23:31:21

+0

太棒了!現在我已經將我的加密設置整理出來了,通過正確設置域,我可以使用單個session_id正確地工作。 一切工作正常......謝謝大家!這個技巧幫助我了! – reado 2012-03-24 01:27:51

0

您需要使用config組參數調用Session::instance()。默認參數是'default',在這種情況下,您需要像這樣調用 - >Session::instance('database')。 或者你可以重命名

return array(
    'database' => array(
    'name' => 'auth_user', 
     ..... 

return array(
    'default' => array(
    'name' => 'auth_user', 
     ..... 

EDIT1:對不起,我沒有注意你的bootstrap.php設置...但仍然確保重定向後調用正確會話實例。

編輯2:檢查會話的write()method。我認爲這是你需要:)

+0

感謝EGIS .. 不幸的是這仍然是演戲了問題。我甚至在基本控制器的before()方法中放了一個'print_r(Session :: instance('database') - > as_array());當我的用戶進行身份驗證時,它會被填充,但只要我去新頁面數組爲空。 – reado 2012-03-19 20:05:14

+0

檢查我的答案,「編輯2」的一部分:) – egis 2012-03-20 23:26:01

0

檢查你的錯誤日誌。

如果您使用的是數據庫會話加密,請確保已將「密鑰」添加到加密配置文件中。

+0

好吧,所以你的提示絕對有幫助!在我的工作流程中,我編寫了自己的Auth驅動程序,連接到我自己的身份驗證服務器,通過JSON消息與自定義API進行通信。 在我的過程中,我忘記創建了我的encrypt.php配置文件,現在我可以成功將值寫入我的數據庫非常棒。問題在於,每次我瀏覽頁面時,它都會繼續生成新的ID。 我打算用Cookie :: $ domain參數多玩一些,但我肯定有問題,因爲我的encrypt.php文件不存在 謝謝! – reado 2012-03-23 23:52:05

0

隨着Session::instance('type')->get()你會得到整個會話數據。
'type'必須或你得到默認的文件類型。如果你將兩者混合在一起,你會得到一個Session解密錯誤。

我認爲創建一個包含你所有設置項目的siteConfig文件總是一個好主意。

在會議的情況下,我做了這樣的:

Created a config File config/siteConfig.php 

有:

return array('sessionType' => 'database'); 

然後加載的東西有:

$sessType = Kohana::$config->load('siteConfig')->get('sessionType'); 

現在你必須始終您的會議與:

Session::instance($sessType) 

所以做你永遠不應該有會話