天天看點

[Cookie,Session,浏覽器,UNIX,PHP]PHP面試中會話控制的内容介紹

  一、session

  PHP的會話也稱為Session。PHP在操作Session時,當使用者登入或通路一些初始頁面時伺服器會為用戶端配置設定一個SessionID。SessionID是一個加密的随機數字,在Session的生命周期中儲存在用戶端。它可以儲存在使用者機器的Cookie中,也可以通過URL在網絡中進行傳輸。

  使用者通過SessionID可以注冊一些特殊的變量,稱為會話變量,這些變量的資料儲存在伺服器端。在一次特定的網站連接配接中,如果用戶端可以通過Cookie或URL找到SessionID,那麼伺服器就可以根據用戶端傳來的SessionID通路會話儲存在伺服器端的會話變量。

  Session的生命周期隻在一次特定的網站連接配接中有效,當關閉浏覽器後,Session會自動失效,之前注冊的會話變量也不能再使用。具體的使用步驟如下:

  1)初始化會話。在實作會話功能之前必須要初始化會話,初始化會話使用session_start()函數。

  bool session_start(void)

  該函數将檢查SessionID是否存在,如果不存在,則建立一個,并且能夠使用預定義數組$_SESSION進行通路。如果啟動會話成功,則函數傳回TRUE,否則傳回FALSE。會話啟動後就可以載入該會話已經注冊的會話變量以便使用。

  2)注冊會話變量。自PHP 4.1以後,會話變量儲存在預定義數組$_SESSION中,是以可以以直接定義數組單元的方式來定義一個會話變量,格式如下:

  $_SESSION["鍵名"]="值";

  會話變量定義後被記錄在伺服器中,并對該變量的值進行跟蹤,直到會話結束或手動登出該變量。

  3)通路會話變量。要在一個腳本中通路會話變量,首先要使用session_start()函數啟動一個會話。之後就可以使用$_SESSION數組通路該變量了。

  4)銷毀會話變量。會話變量使用完後,删除已經注冊的會話變量以減少對伺服器資源的占用。删除會話變量使用unset()函數,文法格式如下:

  void unset(mixed $var [, mixed $var [, $... ]])

  說明:$var是要銷毀的變量,可以銷毀一個或多個變量。要一次銷毀所有的會話變量,使用session_unset();。

  5)銷毀會話。使用完一個會話後,要登出對應的會話變量,然後再調用session_destroy()函數銷毀會話,文法格式如下:

  bool session_destroy ( void )

  該函數将删除會話的所有資料并清除SessionID,關閉該會話。

  二、cookie

  Cookie可以用來存儲使用者名、密碼、通路該站點的次數等資訊。在通路某個網站時,Cookie将html網頁發送到浏覽器中的小段資訊以腳本的形式儲存在用戶端的計算機上。

  一般來說,Cookie通過HTTP Headers從伺服器端傳回浏覽器。首先,

二手域名轉讓

伺服器端在響應中利用Set Cookie Header來建立一個Cookie。然後浏覽器在請求中通過Cookie Header包含這個已經建立的Cookie,并且将它傳回至伺服器,進而完成浏覽器的驗證。

  Cookie技術有很多局限性,例如:

  1)多人共用一台計算機,Cookie資料容易洩露。

  2)一個站點存儲的Cookie資訊有限。

  3)有些浏覽器不支援Cookie。

  4)使用者可以通過設定浏覽器選項來禁用Cookie。

  正是由于以上Cookie的一些局限性,是以,在進行會話管理時,SessionID通常會選擇Cookie和URL兩種方式來儲存,而不是隻儲存在Cookie中。

  具體而言,Cookie的使用步驟如下:

  1)建立Cookie。在PHP中建立Cookie使用setcookie()函數,文法格式如下:

  bool setcookie(string $name [, string $value [, int $expire [, string $path [, string $domain [, bool $secure [, bool $httponly ]]]]]])

  ① $name:表示Cookie的名字。

  ② $value:表示Cookie的值,該值儲存在用戶端,是以不要儲存比較敏感的資料。

  ③ $expire:表示Cookie過期的時間,這是一個UNIX時間戳,即從UNIX紀元開始的秒數。對于$expire的設定一般通過目前時間戳加上相應的秒數來決定。例如,time()+1200表示Cookie将在20min後失效。如果不設定則Cookie将在浏覽器關閉之後失效。

  ④ $path:表示Cookie在伺服器上的有效路徑。預設值為設定Cookie的目前目錄。

  ⑤ $domain:表示Cookie在伺服器上的有效域名。例如,要使Cookie能在example域名下的所有子域都有效,該參數應設為".example"。

  2)通路Cookie。通過setcookie()函數建立的Cookie是作為數組的單元,存放在預定義變量$_COOKIE中。也就是說,直接對$_COOKIE數組單元進行指派也可以建立Cookie。但$_COOKIE數組建立的Cookie在會話結束後就會失效。

  3)删除Cookie。Cookie在建立時指定了一個過期時間,如果到了過期時間,那麼Cookie将自動被删除。在PHP中沒有專門删除Cookie的函數。如果為了安全方面的考慮,在Cookie過期之前就想删除Cookie,那麼可以使用setcookie()函數或$_COOKIE數組将已知Cookie的值設為空。

  示例代碼如下:

  

  $_COOKIE["user"]="administrator";

  setcookie("password","123456",time()+3600);

  $_COOKIE["user"]=""; //使用$_COOKIE清除Cookie

  setcookie("password",""); //使用setcookie()函數清除Cookie

  print_r($_COOKIE); //輸出:Array ( [user]=> )

  ?>

  Cookie和Session都是用來實作會話機制的,由于HTTP協定是無狀态的,是以要想跟蹤一個使用者在同一個網站之間不同頁面的狀态,需要有一個機制,稱為會話機制。