Cookie誕生的緣由
我們都知道Http都是無狀態的,但是通常我們需要識別訪問服務器的是哪個用戶.比方說:限制用戶權限,會員識別等等,我都需要區別對待。鑑於此,我們需要知道狀態的存在,於是Coolie誕生了。
什麼是 Cookie?
cookie 常用於識別用戶。cookie 是服務器留在用戶計算機中的小文件。每當相同的計算機通過瀏覽器請求頁面時,它同時會發送 cookie。通過 PHP能夠創建並取回 cookie 的值。
通常,我們Cookie是在瀏覽器的,就算同一個用戶在不同瀏覽器所生成的cookie值也是不同的。
但是由於特殊手段,我們可以做到僞造身份去訪問服務器,所以會產生跨域攻擊的可能性,這就是傳說中的跨站請求僞造(CSRF)的一種方式。
我們簡單點,怎麼存?
<?php
setcookie('name', 'value', time() + 3600,'/path','192.168.1.1');
怎麼取?
echo $_COOKIE['name'];
PHP其實已經把這些值當做頭,在請求的時候全部加上了,這一切都是自動的,你說爽不爽!
再來說下Session
PHP session 變量用於存儲有關用戶會話的信息,或更改用戶會話的設置。Session 變量保存的信息是單一用戶的,並且可供應用程序中的所有頁面使用。當您運行一個應用程序時,您會打開它,做些更改,然後關閉它。這很像一次會話。計算機清楚你是誰。它知道你何時啓動應用程序,並在何時終止。但是在因特網上,存在一個問題:服務器不知道你是誰以及你做什麼,這是由於 HTTP 地址不能維持狀態。通過在服務器上存儲用戶信息以便隨後使用,PHP session 解決了這個問題(比如用戶名稱、購買商品等)。不過,會話信息是臨時的,在用戶離開網站後將被刪除。如果您需要永久儲存信息,可以把數據存儲在數據庫中。Session 的工作機制是:爲每個訪問者創建一個唯一的 id (UID),並基於這個 UID 來存儲變量。UID 存儲在 cookie 中,亦或通過 URL 進行傳導。
上圖中的PHPSESSID就是用來獲取Cookie信息的key值。
session默認是關閉的,所以我們要先開始session 執行:session_start();然後通過$_SESSION獲取session的值。不想用了,可以調用 session_destroy();徹底終結,也可以unset你想去掉的某個字段。
我們可以通過phpinfo()函數來查找session的存儲方式和位置。
面試問:cookie失效了,session還有用嗎?session還是會再服務器存儲着,但是,你不知道存的是什麼,沒辦法區分相應的用戶,所以,也等於是失效了。