2009-08-03 50 views
1

目前,在我的PHP腳本中,用戶登錄後,我存儲session_login = 1。但我有一個問題。我有一個習慣在使用Firefox,多選項卡(我相信大多數人和所有今天的Web瀏覽器應用程序都具有多選項卡功能)。我關閉了會話的標籤,但是我沒有關閉瀏覽器。幾個小時後,我回到了需要我登錄的同一頁面上,但事實並非如此。它不需要我再次登錄(我認爲這就是所謂的「會話」)。反正他有退出用戶,如果他關閉標籤,而不是關閉瀏覽器?如何在php中註銷用戶?

我現在有1個解決方案,時間閒置踢出。但是,我對PHP中日期/時間事物的知識非常有限,所以這將是最後一個選項。我想知道,除了閒暇之外,還有什麼我可以做的嗎?

+0

當使用琥珀的答案,當你有*不*活動一小時,你會被記錄。該選項卡可以在瀏覽器中仍然打開*,但無任何操作會在沒有任何提示的情況下自動將您註銷*。想象一種情況:你有一個表格在網頁上打開一個小時,提交數據後你會發現你已經註銷了。或者在喝咖啡休息後,你正在按下一個鏈接並被踢出去。我認爲這將是一個可用性問題 – Dan 2011-09-13 07:17:44

+0

請再次測試您的項目以查看我是否正確 – Dan 2011-09-13 07:20:01

+0

也許您在使用PHPMyAdmin時意外退出時可能會看到相同的可用性問題 – Dan 2011-09-13 07:45:16

回答

2

PHP有一個簡單的方法來設置會話將持續多長時間才超時:

session_set_cookie_params(3600); // make it expire after 1 hour 

只是通過它,你希望會話持續(在本例中的秒數,1小時= 60分鐘= 3600秒)。

http://us2.php.net/manual/en/function.session-set-cookie-params.php

+0

此方法適用於當前項目(解決我的問題暫時)。但是下一個項目我可能需要使用Richy C的答案,因爲用戶可能會在我的網站上停留超過1小時。很難選擇最佳答案。那麼,我將根據「投票」選擇最佳答案。 – bbtang 2009-08-03 09:30:32

+0

如果一小時內沒有活動(即使打開標籤),您的方法也會將用戶註銷。但問題是當用戶關閉標籤時將用戶註銷。 PS – Dan 2011-09-13 07:21:58

+0

IMO,只有每隔N分鐘重複AJAX請求才能解決任務 – Dan 2011-09-13 07:23:22

2

會話cookie時,瀏覽器會話關閉只從瀏覽器清零(即,當在瀏覽器關閉):因此而得名。如果您希望會話在標籤關閉後立即被清除,您可以在Cookie上設置非常短的到期時間(大約5分鐘)並將其存儲在數據庫中。然後在網頁上每分鐘調用一次來自服務器的文件的JavaScript函數:該文件然後在接下來的五分鐘內「刷新」cookie /數據庫條目。如果他們離開您的網站超過五分鐘,則會話失效。

您還可以添加一個Javascript「onunload」函數,它檢測他們是否關閉了網頁或轉到另一個頁面:您可以在此處添加一個鉤子來調用「destroycookie」函數 - 但是,您必須請檢查他們是否已經轉到您網站上的另一個頁面,並且實際上沒有兩個網頁在您的網站中打開。

0

也許你可以使用session_write_close()?