1. 程式人生 > >Cookie & Session【會話管理與控制】

Cookie & Session【會話管理與控制】

有效期 unset font 重置 也有 姓名 本地 tro 讀取

用現實生活 類比Cookie 和 Session :

兩個關於開會的故事:

  1. 在幾十年前人們開會的時候,都需要帶上一個參會證。這個參會證上有這個人的職務、姓名、單位、照片等信息。在開會的時候,會議安保人員、組織者只需要檢查相關信息就行了。(個人信息,由自己攜帶)

  2. 幾十年後,越來越先進了。你參會前,會給你發一個卡片或者工牌。這個卡片上有一個唯一的號碼。拿到號碼,再用攝像頭掃一掃即可完成你的個人信息核對。(個人信息,由會議主辦方的數據庫保存)

在電腦裏面也有這兩種驗證方式:

  1. 人們在參會證上寫著所有的相關信息,這種會話方式我們叫做cookie。這種模式,信息是保存在用戶電腦上(客戶端)的。

  2. 人們只需要帶一個卡片或者磁卡,通過這個卡片去驗證你的照片、姓名等信息的方式,我們叫做session。它只在用戶本地存一組小小的值,其他信息全是存在服務器上的。

總結:數據存儲在自己身上,這是Cookie; 數據存儲在別人那裏,我只有一個門卡,這是Session。

什麽是會話?

  即客戶端和服務器之間的對話過程。

  HTTP協議是無狀態的。何謂無狀態?你輸入我的網址,我就給你傳送數據,我可不管你是誰。

  而我們在現實情況中,服務器往往需要知道你是誰?這就需要用到cookie和session會話技術了。

它們都分別存儲在哪裏?

  Cookie是通過將數據保存在客戶端來實現與服務端保持連接的,而Session是通過將數據保存在服務器端來實現保持連接的。

Cookie存在哪兒?

  Cookie的本質是一小段數據,一小段存儲在你電腦硬盤中的數據。

  Domain代表的是cookies所屬的網站,Name代表的是這個Cookie的名字,Value代表的是Cookie的值,Expires代表的是這個Cookie的有效期。

Session存儲在哪裏?

  在php.ini配置文件中有這麽一行 session.save_handler = files, files,說明了php默認的是用文件讀寫的方式來保存session的。

使用Cookie

1、如何向Cookie中添加數據? 使用 setcookie()函數。

  bool setcookie (string $名字[, string $值][, int $過期時間 = 0][, string $路徑][, string $域名][, bool $安全 = false][, bool $http只讀 = false]);

  參數說明:
    $名字 必需。規定 cookie 的名稱。
    $值 可選。規定 cookie 的值。
    $有效期 可選。規定 cookie 的有效期。
    $路徑 可選。規定 cookie 的服務器路徑。
    $域名 可選。規定 cookie 的域名。
    $安全 可選。規定是否通過安全的 HTTPS 連接來傳輸 cookie。
    $http安讀 可選。如果true,那麽js就無法讀取改cookie,增加安全性。

  常用三個參數setcookie(cookie名,cookie值,cookie有效期);

2、如何從Cookie中讀取數據?

  在服務端,通過$_COOKIE[‘name‘] 來讀取cookie中的數據。

  特別註意:我們一般是不會把用戶名和密碼放到cookie中的,因為這並不安全,容易泄露自己的信息。務必註意:重要的信息不要放到cookie中。

使用Session

1、無論向session中添加數據,還是從session中銷毀數據,都需要先開啟Session:

  session_start(); 這個函數無須參數,它用於開啟Session。

2、如何向session中添加數據?

  $_SESSION[‘userName‘] = ‘wang‘;  這是添加數據的語法。

3、如何從session中讀取數據?

  $userName = $_SESSION[‘userName‘];  這是讀取數據的語法。

4、如何銷毀session中的數據?(有多種方式)

  銷毀數據之前,也需要先開啟Sesson。

  方式1) unset($_SESSION[‘XXX‘]);

    它用於銷毀session中的 XXX 變量。

    警告:請不要 unset($_SESSION); 這會導致後續無法使用$_SESSION這個變量了。

  方式2) 把空數組賦值給$_SESSION變量   $_SESSION = array();

    $_SESSOIN變量是個數組,那麽空數組賦值的話也是相當於將當前會話的$_SESSION變量中的值銷毀。

  方式3) session_destory();

    這個函數會銷毀當前會話中的全部數據,並結束當前會話。但是不會重置當前會話所關聯的全局變量, 也不會重置會話 cookie。

Cookie & Session【會話管理與控制】