標籤:重複 win 存在 str 檢索 視窗 bsp 常用 通過
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機制以及聯絡與區別