1. 程式人生 > >php session機制與cookie機制以及聯系與區別

php session機制與cookie機制以及聯系與區別

標識 級別 聯系 是什麽 生命周期 技術 路徑 多次 瀏覽器中

session與cookie是在做項目中很常用的會話技術,session與cookie也是面試中被問到頻率最高的問題,有一次我去面試,面試官就懟著我session與cookie一直問(頭都大了),下面總結了一些關於session與cookie的區別與聯系。

說到session與cookie,先說一下什麽是會話技術:

由於http協議是無狀態的協議,也就是說當一個用戶在請求一個頁面後再請求另一個頁面時,http將無法告訴我們這兩個請求是否來自於同一個用戶,這就意味著我們需要有一種機制來跟蹤和記錄用戶在該網站所進行的活動,這就是會話技術.簡單來說,會話技術就是跟蹤用戶信息的技術.。會話技術也是一種維持同一個瀏覽器與服務器之間多次請求的數據狀態的技術,它可以很容易的實現對用戶登錄的支持,記錄該用戶的行為,並根據授權級別和個人喜好顯示相應的內容.。

好了,既然知道會話技術是什麽了那再說一下session機制與cookie機制:

Session與cookie是目前最常用的兩種會話技術.cookie是一種在瀏覽器端存儲數據並以此來跟蹤和識別用戶的機制,而session是將信息存放在服務器端的會話機制。

COOKIE機制:

在程序中,會話跟蹤是很重要的事情。理論上一個用戶的所有請求操作都應該屬於同一個會話,而另一個用戶的所有請求操作則應該屬於另一個會話。cookie就是來記錄不同用戶狀態的一種機制,正統的cookie分發是通過擴展HTTP協議來實現的,服務器通過在HTTP的響應頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應的cookie。然而純粹的客戶端腳本如JavaScript或者VBScript也可以生成cookie.cookie實際上是一小段的文本信息,客戶端請求服務器,如果服務器需要記錄該用戶狀態,就使用response向客戶端瀏覽器頒發一個cookie。客戶端瀏覽器就會把cookie保存起來。當瀏覽器再次請求該網站時,瀏覽器把請求的網址連同該cookie一同提交給服務器。服務器檢查該cookie,以此來辨別用戶狀態。服務器還可以根據需要修改cookie的內容。查看某個網站頒發的cookie很簡單。在瀏覽器地址欄輸入:JavaScript:alert(document.cookie)就可以了(需要有網才能查看)。JavaScript腳本會彈出一個對話框顯示該網站頒發的所有cookie的內容。

cookie的內容主要包括:名字,值, 時間,路徑和域。

路徑就是跟在域名後面的URL路徑,比如/或者/foo等等。

路徑與域名合在一起就構成了cookie的作用範圍。

如果不設置過期時間,則表示這個cookie的生命周期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。

瀏覽器會話期間的cookie被稱為會話cookie。會話cookie一般不儲存在硬盤上而是保存在內存裏,當然這種行為並不是規範規定的。

如果設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉後再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間

註意:cookie功能需要瀏覽器的支持,如果瀏覽器不支持cookie,或者把cookie禁用了,cookie功能就會失效。

SESSION機制:

session,是另一種記錄客戶狀態的機制,不同的是cookie保存在客戶端瀏覽器中,而session保存在服務器上。客戶端瀏覽器訪問服務器的時候,服務器把客戶端信息以某種形式記錄在服務器上。這就是session。客戶端瀏覽器再次訪問的時候只需要從該session中查找該客戶的狀態就可以了。

當程序需要為某個客戶端的請求創建一個session的時候,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識 - 稱為session id,如果已包含一個session id則說明以前已經為此客戶端創建過session,服務器就按照session id把這個 session檢索出來使用(如果檢索不到,可能會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字符串,這個 session id將被在本次響應中返回給客戶端保存。

保存這個session id的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發給服務器。

由於cookie可以被人為的禁止,必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞回服務器。經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的後面,附加方式也有兩種,一種是作為URL路徑的附加信息,另一種是作為查詢字符串附加在URL後面,這兩種方式對於用戶來說是沒有區別的,只是服務器在解析的時候處理的方式不同,采用第一種方式也有利於把session id的信息和正常程序

php session機制與cookie機制以及聯系與區別