首頁  >  文章  >  後端開發  >  PHP面試中會話控制的內容介紹

PHP面試中會話控制的內容介紹

不言
不言轉載
2019-02-25 09:34:083954瀏覽

這篇文章帶給大家的內容是關於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.com網域下的所有子網域都有效,該參數應設為".example.com"。

2)訪問Cookie。透過setcookie()函數建立的Cookie是作為陣列的單元,存放在預先定義變數$_COOKIE中。也就是說,直接對$_COOKIE陣列單元進行賦值也可以建立Cookie。但$_COOKIE數組所建立的Cookie在會話結束後就會失效。

3)删除Cookie。Cookie在创建时指定了一个过期时间,如果到了过期时间,那么Cookie将自动被删除。在PHP中没有专门删除Cookie的函数。如果为了安全方面的考虑,在Cookie过期之前就想删除Cookie,那么可以使用setcookie()函数或$_COOKIE数组将已知Cookie的值设为空。
示例代码如下:

<?php
    $_COOKIE["user"]="administrator";
    setcookie("password","123456",time()+3600);
    $_COOKIE["user"]="";                    //使用$_COOKIE清除Cookie
    setcookie("password","");                //使用setcookie()函数清除Cookie
    print_r($_COOKIE);                    //输出:Array ( [user] => )
?>

Cookie和Session都是用来实现会话机制的,由于HTTP协议是无状态的,所以要想跟踪一个用户在同一个网站之间不同页面的状态,需要有一个机制,称为会话机制。

以上是PHP面試中會話控制的內容介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除