2010-03-21 34 views
0

我有一些保存的會話。如果用戶關閉瀏覽器窗口或單個選項卡或導航離開頁面,我想銷燬所有會話。有什麼辦法可以做到這一點?如何在用戶關閉瀏覽器窗口或在php中導航離開頁面時銷燬會話?

+4

如果用戶在同一會話中打開了多個窗口/選項卡,會發生什麼情況? – sth

+0

你有太多的變數可以解釋它們。簡單而簡單,不用擔心。 – animuson

+0

如果您不使用內置的會話系統,您也可以執行此操作。或者,如果您在每個頁面上通過POST或GET傳遞變量,您可以將其關聯到單個「活動標籤」。 –

回答

0

那麼,我使用CodeIgniter爲我的所有項目。 CodeIgniter具有使用cookie存儲數據的會話類。我可以在應用程序配置中設置cookie超時。將其設置爲0將使cookie僅在頁面打開時保留最後,並且在瀏覽器中關閉頁面的所有選項卡時,cookie將自動刪除。

如果您不想使用其他框架,那麼您可以使用cookie來保存僅在用戶關閉瀏覽器選項卡之前保留的會話數據。使用setcookie寫入cookie數據,並從$_COOKIE變量中讀取它。

+0

餅乾不會保存會話數據 –

+1

哇,這很混亂!你知道會話和cookie之間的區別嗎? – animuson

+0

Cookie保存PHPSESSID,這是將用戶鏈接到他的服務器存儲的會話數據的鏈接。 –

-1

類似唐尼的答案,但不是使用笨,你可以告訴內置的Session類改變PHPSESSID cookie來在瀏覽器關閉時屆滿:

session_set_cookie_params(0); 

這有session_start()之後被稱爲每個頁面都使用它(否則它會從ini參數session.cookie_lifetime重置爲默認值)。

+0

我很想知道爲什麼我得到了一個downvote。如果PHPSESSID cookie過期,則當前用戶失去他的會話。 –

1

現在所有現代標籤式瀏覽器都非常複雜。所以,你只能依靠會話超時。雖然沒有什麼大不了的。你確定你確實需要這個嗎?這會讓用戶感到痛苦。

-1

當瀏覽器關閉時,你不能銷燬會話!會話需要一個服務器端指令被銷燬。您可以將會話設置爲在閒置一段時間後被銷燬。

研究的http://www.php.net/manual/en

+0

學習手冊?什麼是一般性建議,-1。 –

+0

不,這不是一個普通的建議,答案是給出的,並且是一個參考。 –

0

第一套$config['sess_expiration'] to 0

然而,這具有這實際上持續2年來,由於代碼在system/libraries/Session.php文件中的cookie的作用

我們設置下一個$config['sess_expiration'] to -1

這只是沒有爲我工作的句號。當我登錄它時保存了會話變量,然後當我進入下一頁時,它已經消失。

相關問題