2011-07-10 10 views
1

我對Zend認證會話存儲系統有點困惑。我會盡力解釋我的問題。請儘量表達您對Zend會議或我的假設和問題的看法或任何您瞭解的內容。我們如何使Zend會話存儲在可用方法中持久化?

默認情況下,Zend_Auth_Adapter_DbTable返回身份驗證成功後返回給auth對象的身份。 如果我使用getStorage()或getIdentity(),那麼我可以檢索「會話值(id,name,..)」給一些變量。 ! 如果你認爲以上兩個假設都是正確的,我的問題是,

  1. 默認情況下會話值存儲在哪裏? (默認情況下,它用於存儲會話的地點?)
  2. 如果我指定會話保存路徑,如下所示。爲什麼我們需要將這些會話存儲在文件夾中,如果會話根據問題1存儲? save_path =/home/myaccount/zend_sessions/myapp
  3. 如果我使用Zend_Session_SaveHandler_DbTable。是什麼讓它比以上兩種選擇更好?
  4. 或者,你能否建議你認爲哪種方式,我們可以使會話在Zend中持久存在?目前我們有100萬用戶在我們這裏註冊,那麼我們如何纔能有效地使用戶會話存儲?

如果您認爲我的任何問題或假設都是錯誤的,請提前感謝所有參與討論的人,請儘量表達您的想法。因此,我可以能夠從錯誤中

+0

不知道這是你想要的,但你可以使用'Zend_Session :: rememberMe()'。這會記住登錄的用戶,所以當用戶返回給你時,不需要登錄。 – Marcin

回答

0
  1. Zend的會話內部使用PHP的全局變量$ _SESSION,其中會話得到保存由php.ini中設置控制的路徑,因此您可以使用session_save_path

  2. 對於session_save_path你可以給文件夾名稱,您需要保存會話。默認情況下,會話存儲在臨時文件夾中,每次有人清除臨時文件夾會話時,數據都將丟失。所以最好使用其他文件夾。

  3. Db會話用於會話共享。在像google這樣的大型網站中,一臺服務器不會滿足所有用戶的請求,所以如果你請求了某些東西,會話將會被創建並且你會得到響應,因爲你的下一個請求並不能保證你會碰到同一臺服務器,第二臺服務器嘗試從某些分佈式位置(如db或memcache)獲取會話數據。對於分佈式會話,Memcache是​​比db更好的選擇,因爲它更快。

  4. 你試圖在會話中保存什麼信息,如果你試圖保存更長時間的東西,那麼爲什麼你不能將該信息與用戶對象相關聯,而不是保存在會話中。

2

蔭不是100%肯定你的問題學習,但我會嘗試:-)

  1. 回答上默認的Linux機器應該是/ tmp或任何在配置php.ini中
  2. 想想共同主辦environements(安全問題)
  3. Zend_Session_SaveHandler_DbTable是好的,如果你有,例如,負載均衡的網絡服務器,所以用戶有他獨立的會話,他連接到
  4. Web服務器的如果您僅使用一臺服務器(不是t共享),並且不需要像「誰在線」這樣的功能,文件系統上的缺省會話處理是最好的解決方案(在我看來)。
+0

您的arnieRie是正確的,但是如果我留在文件系統上的默認會話處理,有時候我刷新它給了我應用程序錯誤,如果再次刷新它已經消失。但現在它是有道理的 – Guru

相關問題