2013-04-08 51 views
0

我正在使用cakephp 2並最近將會話處理程序更改爲數據庫。 似乎一切正常,除非用戶離開網站時未註銷會話保持活動狀態。當用戶離開網站時銷燬數據庫會話

在我core.php中的文件我已經配置數據庫會話處理程序如下:

Configure::write('Session', array(
    'defaults' => 'database' 
)); 

如何配置CakePHP的數據庫會話銷燬當用戶離開而不退出該網站的會議?

TIA!

回答

1

你不能。 PHP按需運行,不可能知道用戶什麼時候停止瀏覽網站。您基本上有2個選項:

  1. 編寫一個腳本來檢查您的會話存儲以查找在X秒內未被訪問的會話並將其清除。使用cron作業調用此腳本。
  2. 當用戶回來時檢查會話,並清除任何陳舊的數據。您仍然需要不時地進行一些清理,以擺脫從未回來的用戶的會話數據。
+0

好的,謝謝你的答案。這種吸引力因爲擁有數據庫會話有一些好處 – 2013-04-08 18:15:41

1

會話存儲在服務器上,因此如果瀏覽器關閉或用戶轉到其他頁面,則沒有義務告知服務器此操作。

會話在服務器中存儲一段時間,並在一段時間不活動後自動銷燬。在CakePHP cookbook

檢查會話信息瞭解更多詳情

+0

您可以使用HTML5的本地存儲數據庫功能。 – 2013-04-08 17:56:07

+0

@ColeJohnson你的意思是處理cakephp會話?儘管如此,這將取決於瀏覽器對該功能的支持,對吧? – pollirrata 2013-04-08 17:57:44

0

有一個可能的解決方案,在某些情況下工作,但可能不是一個很好的解決方案:

<body onUnload="ajaxFunctionToDeleteSession();"> 
some random stuff goes here 
</body> 

所以ajaxFunctionToDeleteSession將通過Ajax調用一會刪除會話的網址。

本,我看到幾個問題:

  1. 隨時調用關閉有人您的網站的打開網頁。這意味着如果有人打開您的網站的多個窗口關閉一個,他們的整個會話,包括其他打開的標籤頁關閉
  2. 有可能是某人前往您的網站,有意外關閉打開的窗口,重新打開該網站和事情會看起來不同,因爲會議不見了。

但是,如果您絕對必須在有人離開網站時刪除會話,這可能會提供一種方法開始接近問題。

+0

即使您仍然登錄到應用程序中,也會在您導航到其他頁面時調用onUnload,因此,當您不希望它發生時,它會終止會話... – pollirrata 2013-04-09 18:10:09