噶,nation同志又給我佈置任務了~~是隔壁家老王提到屢次的,session和cookie的運行機制問題~~因而我真的意識到一個問題,程序猿都是一個德行!php
cookie 經常使用於識別用戶。cookie 是服務器留在用戶計算機中的小文件。每當相同的計算機經過瀏覽器請求頁面時,它同時會發送 cookie。經過 PHP,可以建立並取回 cookie 的值。數據庫
cookie主要包括 名字、值、過時時間、路徑和域。路徑和域一塊兒構成cookie的做用範圍。瀏覽器
若是不設置過時時間,cookie默認的生命期爲瀏覽器會話期間。關閉瀏覽器窗口,cookie就消失。這種生命期爲瀏覽器會話期的cookie,被稱爲會話cookie。會話cookie通常保存在內存裏面,而不是存儲在硬盤上。安全
若是設置了過時時間,瀏覽器就會把cookie保存在硬盤上。在有效的過時時間範圍內,關閉之後再次打開瀏覽器,cookie仍然有效。存儲在硬盤上的cookie能夠再不一樣的瀏覽器進程間共享。而對於保存在內存裏的cookie,不一樣的瀏覽器有不一樣的處理方式。服務器
cookie值只能保存字符串。並且瀏覽器對它有大小限制以及 它會隨着每次請求被髮送到服務器,因此應該保證它不要太大。 Cookie的內容也是明文保存的,有些瀏覽器提供界面修改,因此, 不適合保存重要的或者涉及隱私的內容。cookie
大多數瀏覽器支持最大爲 4096 字節的cookie,限制了cookie的大小,因此最好用cookie 來存儲少許數據,或者存儲用戶 ID 之類的標識符。用戶 ID 隨後即可用於標識用戶,以及從數據庫或其餘數據源中讀取用戶信息。 瀏覽器還限制站點能夠在用戶計算機上存儲的cookie的數量。大多數瀏覽器只容許每一個站點存儲 20 個cookie;若是試圖存儲更多cookie,則最舊的cookie 便會被丟棄。有些瀏覽器還會對它們將接受的來自全部站點的cookie總數做出絕對限制,一般爲 300 個。session
session機制是一種服務器端的機制,服務器使用一種相似於散列表的結構(也可能就是使用散列表)來保存信息。它的工做機制是:爲每一個訪問者建立一個惟一的id(UID)來存儲變量。UID通常存儲在cookie中,經過url進行傳導。性能
session機制採用的是在服務器端保持狀態的方案。 當程序須要爲某個客戶端的請求建立一個session時,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識(稱爲session id),若是已包含則說明之前已經爲此客戶端建立過session,服務器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),若是客戶端請求不包含session id,則爲此客戶端建立一個session而且生成一個與此session相關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。保存這個session id的方式能夠採用cookie,這樣在交互過程當中瀏覽器能夠自動的按照規則把這個標識發送給服務器。通常這個cookie的名字都是相似於SEEESIONID。當cookie被人爲的禁止時,則必須有其餘機制以便在cookie被禁止時仍然可以把session id傳遞迴服務器。url
session是以文件的形式保存的。php.ini中有個配置項--session.save_path= "";能夠定義session的保存路徑。session文件的命名格式是:"sess_[PHPSESSID的值]"。每個文件,裏面保存了一個會話的數據。其實只要使用代碼$_SESSION['user_id'] = $value;就會促發php的session機制,結果往對應的session文件中寫入一個值。spa
3.1 cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在服務器端保持狀態的方案。cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
3.2 cookie明文保存,能夠修改,不是很安全,別人能夠分析存放在本地的cookie並進行cookie欺騙。考慮到安全方面,應當使用session。
3.3 session會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能。考慮到減輕服務器性能方面,應當使用cookie。
因爲 Http 協議的請求過程,是基於 TCP/IP 的,當客戶端請求服務器,服務器處理後,進行響應,這個過程是無狀態的。在有些時候,是須要保存一些客戶端的請求信息,識別客戶端的某些狀態,智能的、有針對性的去分析某些客戶端的習慣。這些時候,就須要去記錄客戶端的鏈接狀態,識別請求的狀態等。爲了解決相似的事情,就須要使用到了Cookie 和 Session。