2010-11-10 166 views
12

我創建了一個基於會話的簡單登錄頁面。關閉銷燬PHP會話

session_start(); 

,並加入當我關閉瀏覽器/頁,並重新打開它,該會話的值仍然存在包含此

session_destroy(); 

現在退出頁面。

我想知道如何徹底銷燬頁面/瀏覽器關閉的會話。

+0

你不需要用AJAX調用或其他方法重新發明輪子。您可以簡單地使用cookie的工作內置功能。您可以告訴瀏覽器在非常容易關閉的情況下移除Cookie。不需要Javascript。 – 2010-11-10 16:42:21

+0

@ Chacha102:任何教程? – sikas 2010-11-10 17:14:57

+1

否 - 刪除或覆蓋會話cookie是故事的一部分 - 但數據仍然可以在服務器上使用 - 實際上您應該覆蓋會話數據($ _SESSION = array();) - 這樣可以避免LOT的併發症 – symcbean 2010-11-10 17:28:40

回答

24

如果你使用:當瀏覽器關閉

session_set_cookie_params(0); 
session_start(); 

你的會話cookie會破壞...所以你的會議將是很好的,直到他們關閉瀏覽器。 IE瀏覽器。你登錄,你登錄,您關閉瀏覽器,重新打開它,去到現場再次,你不會在登錄

+4

它不工作...我的網頁仍然被打開不知道爲什麼我已經把相同的代碼放在我的登錄頁面和模板標題頁面,但它沒有被破壞 – Vivek 2014-03-06 17:59:23

+0

不在這裏工作 – Kreker 2014-07-02 09:49:59

+3

也沒有爲我工作,但找到了(我)的理由:關閉後,Firefox被阻止記住這些標籤,並且此功能可以防止會話被破壞。詳情在這裏:https://support.mozilla.org/de/questions/975670 – user2345998 2015-07-02 12:25:31

5

您將只能檢測瀏覽器窗口是否已使用JavaScript關閉,此時您可能會觸發Ajax請求以執行註銷操作。

+3

儘管投票表決此方法將工作,JS是唯一的方式,您可以檢測瀏覽器窗口是否關閉。 'session_set_cookie_params(0)'會將cookie存儲在用戶內存中而不是磁盤上,但是當瀏覽器窗口關閉時它不會反饋給服務器。 Cookie將隨用戶瀏覽器而死。 – Treffynnon 2010-11-10 16:46:55

+0

我沒有投票!但有沒有關於這個的任何教程? – sikas 2010-11-10 17:15:56

+0

這可能會工作,但我恕我直言,有可能在關閉標籤頁/瀏覽器期間ajax將被終止/中止的情況。因爲當你打開一個包含ajax的頁面,並且「真正的快速」(在文檔準備好之後),點擊某個鏈接,當新頁面打開時,ajax會顯示錯誤。謝謝 – dav 2014-07-12 17:07:34

-1

刪除會話變量 - session_unset()。

銷燬會話 - session_destroy();

session_unset(); 
session_destroy(); 
+0

請完整閱讀OP的要求。 PHP無法知道瀏覽器什麼時候關閉,特別是沒有這兩條線。 – 2016-03-25 18:36:03

0

服務器無法檢測到瀏覽器或選項卡已關閉,您可以使用Javascript或Ajax,但對不起,我對此不瞭解。

我的建議是使用會話超時,所以如果沒有來自用戶的操作,會話將被銷燬。這是一個例子:

// destroy every 2 minutes 

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 120)) { 
    // last request was more than 2 minutes ago 
    session_destroy(); // destroy session data in storage 
} 
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp 

// end of code 

希望這有助於你

0

如果存在會話,通過破壞會話,將用戶重定向到主頁登出。臨時cookie被用來存儲會話標識。這個cookie也被破壞了。

<?php 
    // This is the logout page for the site. 
    session_start();//access the current session. 
    //if no session variable then redirect the user 
    if (!isset($_SESSION['user_id'])) { 
    header("location:index.php"); 
    exit(); 
    }else{ //cancel the session 
     $_SESSION = array(); // Destroy the variables 
     session_destroy(); // Destroy the session 
     setcookie('PHPSESSID', ", time()-3600,'/', ", 0, 0);//Destroy the cookie 
     header("location:index.php"); 
     exit(); 
    } 
    ?>