PHP面試常考之會話控制

你好,是我琉憶,歡迎您來到PHP面試專欄。
本週(2019.2-25至3-1)的一三五更新的文章以下:php

週一:PHP面試常考之會話控制
週三:PHP面試常考之網絡協議
週五:PHP面試常考題之會話控制和網絡協議

如下正文的內容來自《PHP程序員面試筆試寶典》書籍,若是轉載請保留出處:html


最近是換工做潮本身刻意「 彙總整理了11篇帶解析的PHP面試題的文檔」,已上傳百度雲,關注公衆號:「 琉憶編程庫」,回覆:「 php」,下載連接我發給你。

1、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


最近是換工做潮本身刻意「 彙總整理了11篇帶解析的PHP面試題的文檔」,已上傳百度雲,關注公衆號:「 琉憶編程庫」,回覆:「 php」,下載連接我發給你。

2、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程序員面試筆試寶典》書籍,該書已在天貓京東噹噹等電商平臺銷售。
圖片描述
更多PHP相關的面試知識、考題能夠關注公衆號獲取:琉憶編程庫
圖片描述

對本文有什麼問題或建議均可以進行留言,我將不斷完善追求極致,感謝大家的支持。

相關文章
相關標籤/搜索