Session會在瀏覽器關閉後消失嗎???

企業獵人發表於2016-06-28


cookie儲存在客戶端,當請求同一個網站的時候就自動傳送該cookie給伺服器(前提瀏覽器沒有禁用cookie)。

通常情況下,當我們關閉瀏覽器再重新開啟後,我們就需要再次進行登陸(如果沒有進行下次自動登入之類的設定)。在Jav中(Session是通用的,這裡以Java為例)有一種叫做Session機制(會話機制)來記錄使用者的登入資訊。瀏覽器關閉之後,Session會被清除嗎?

       Session是一種伺服器端的物件,儲存在伺服器中。 每個Session 有一個唯一的Session id。 Session的超時也是由伺服器來控制。我們一般都會把Session和Cookie放在一起來說,它們具體的區別和聯絡這裡我就不多說了,可以去查閱相關資料。Cookie分為記憶體中Cookie(也可以說是程式中Cookie)和硬碟中Cookie。大部分的Session機制都使用程式中Cookie來儲存Session id的,關閉瀏覽器後這個程式也就自動消失了,程式中的Cookie自然就消失了,那麼Session id也跟著消失了,再次連線到伺服器時也就無法找到原來的Session了。

       其實伺服器是不會知道瀏覽器關閉了沒有(當然,你可以在關閉的時候去通知伺服器,但一般都不會這樣做),所以關閉瀏覽器時伺服器是不會刪除Session的,也正是這個原因伺服器才會設定一個Session失效時間的,不然伺服器早晚會被撐爆的。等距離上一次使用該Session的時間達到設定的失效時間時,伺服器就會認為客戶端已停止活動,便會將相應的Session刪除。

       當然,我們可以在登陸時點選下次自動登入,比如說CSDN的“記住我一週”,或者我們的購物車資訊可以在切換不同瀏覽器時依然可用。這就要用到我們上文提到的另一種Cookie了——硬碟中Cookie,這時Session id將長期儲存在硬碟上的Cookie中,直到失效為止。


session_unset()
釋放當前在記憶體中已經建立的所有$_SESSION變數,但不刪除session檔案以及不釋放對應的session
id

session_destroy()
刪除當前使用者對應的session檔案以及釋放session
id,記憶體中的$_SESSION變數內容依然保留

因此,釋放使用者的session所有資源,需要順序執行如下程式碼:

複製程式碼 程式碼如下:
刪除sesion方法1(好)
<?php
$_SESSION['user'] = 'lowell';
session_unset();
session_destroy();

?> 
刪除sesion方法2
<?php
  $_SESSION["user"] = "user";
  $user = $_SESSION["user"];
  echo $user;

//  刪除session
  unset($_SESSION["user"]);
  session_destroy();
// 刪除變數
  unset($user);

?>

關於session_unset()和session_destroy()的函式使用進行介紹。

session_unset()
釋放當前在記憶體中已經建立的所有$_SESSION變數,但不刪除session檔案以及不釋放對應的session
id

session_destroy()
刪除當前使用者對應的session檔案以及釋放session
id,記憶體中的$_SESSION變數內容依然保留

if (session_destroy())
        {
            ShowMsg(“登出成功!”,’/member/login’);
            exit();
        }
        else
        {
            unset($_SESSION);
            ShowMsg(“登出成功!”,’/member/login’);
            exit();
        }

因此,釋放使用者的session所有資源,需要順序執行如下程式碼:
程式程式碼

php教程

$_SESSION['user'] =

‘lowell';

session_unset();

session_destroy();

?>

另一個網友分析

session_unregister是登出一個session變數;
session_destroy是登出所有的session變數,並且結束session會話;
session_unset()並不登出session變數,但把所有的session變數的值清空.

那麼一般在做退出的操作時可以這樣做:

session_start();
session_unset();
session_destroy();
header(“location:XXX.php”);

在php中銷燬變數有很多不同的方法。如:unset();session_unset();session_destroy();但session變數作為特殊的變數,不同的銷燬方式更會產生不同的結果。

unset()在php3時其使用後會返回一個boolean值,但在php4及以後的版本,其只是一個沒有返回值的語句。如果在函式中unset()的一個全域性變數或者一個通過引用傳遞的值,則其只能在區域性銷燬變數,在呼叫環境中的變數卻會保持呼叫unset()前一樣的值。如果unset一個靜態變數,則靜態變數及其所有引用都會被銷燬。如果想unset一個globals變數則可以借用GLOBALS陣列來銷燬:unset($GLOBALS['str']);

unset($_SESSION['str'])則可以刪除單個的$_SESSION['str']變數。若使用unset($_SESSION);則刪除伺服器上的所有SESSION檔案

session_unset()刪除當前所有的session值,其結果同session_destroy();


相關文章