會話簡介:HTTP(超文字傳輸通訊協定 (HTTP))定義了通過全球資訊網(WWW)傳輸文本、圖形、視頻和所有
其他資料所有的規則。HTTP 是一種無狀態的協議,說明每次請求的處理都與之前或之後的
請求無關。雖然這種簡化實現對於HTTP 的普及做出了卓越的貢獻,但對於希望建立複雜的
Web 應用程式的開發人員來說,這點有點困擾。為瞭解決這個問題,出現了一種在用戶端
機器上儲存少量資訊(cookie)。
由於cookie 大小限制、數量及其他原因,開發人員又提出了一種解決方案:session 會
話處理。
一.Cookie
的應用
設定cookie:setcookie()函數可以在用戶端產生一個cookie 檔案,這個檔案可以儲存到
期時間、名稱、值等。
建立cookie
| 代碼如下 |
複製代碼 |
<?php
setcookie(‘name’,'Lee’,time()+(7*24*60*60));//設定一個到期時間為7天的cookie
?>
|
參數1:cookie 名稱
參數2:cookie 值
參數3:cookie 到期時間
查看cookie
開啟Firefox瀏覽器:工具–頁面資訊-安全-查看cookie,可以查看到當前的cookie資訊
讀取cookie
| 代碼如下 |
複製代碼 |
<?php
echo $_COOKIE['name'];
?>
|
刪除cookie
| 代碼如下 |
複製代碼 |
<?php
setcookie(‘name’,”);
setcookie(‘name’,'Lee’,time()-1);
?>
|
使用Cookie 的限制
1、必須在HTML 檔案的內容輸出之前設定;
2、不同的瀏覽器對Cookie 的處理不一致,且有時會出現錯誤的結果。
3、限制是在用戶端的。一個瀏覽器能建立的Cookie 數量最多為30 個,並且每個不能
超過4KB,每個WEB 網站能設定的Cookie 總數不能超過20 個。
二.Session
會話處理
在使用session 會話處理,必須開始session,使用session_start()開始會話。
建立session 並讀取session
| 代碼如下 |
複製代碼 |
<?php
session_start();
$_SESSION['name'] = ‘Lee’;
echo $_SESSION['name'];
?>
|
判斷session 是否存在
| 代碼如下 |
複製代碼 |
<?php
session_start();
$_SESSION['name'] = ‘Lee’;
if (isset($_SESSION['name'])) {
echo $_SESSION['name'];
}
?>
|
刪除session
| 代碼如下 |
複製代碼 |
<?php
session_start();
$_SESSION['name'] = ‘Lee’;
unset($_SESSION['name']);
echo $_SESSION['name'];
?>
|
銷毀所有session
| 代碼如下 |
複製代碼 |
<?php
session_start();
$_SESSION['name'] = ‘Lee’;
$_SESSION['name2'] = ‘Lee’;
session_destroy();
echo $_SESSION['name'];
echo $_SESSION['name2'];
?> |
cookie與session的區別和關係
•儲存位置:
1.session儲存在伺服器位置上,可以通過php.ini裡面配置session相關配置
2.cookie儲存在用戶端上的上(其實可以分兩種:
1,持久性cookie,設定了cookie的時間,以檔案方式存在硬碟上,
2,會話cookie,沒有設定cookie時間,cookie的生命週期也就是關閉瀏覽器前就消失,一般不會儲存在硬碟,而是儲存在記憶體上)
cookie和session的關係
cookie通過http前序發送:
Cookie name=PHP%BB%B4%B1%B1; PHPSESSID=cpt2ah3pi4cu7lo69nfbfllbo7
其中PHPSESSID就是關聯伺服器session的重要參數
再看session檔案:sess_cpt2ah3pi4cu7lo69nfbfllbo7
session_id的產生格式就是:sess_加上一串PHPSESSID的值
我們可以這樣理解:
當程式需要為某個用戶端的請求建立一個session時,伺服器首先檢查這個用戶端的請求裡是否已包含了一個session標識 (稱為session id),如果已包含則說明以前已經為此用戶端建立過session,伺服器就按照session id把這個session檢索出來 使用(檢索不到,會建立一個),如果用戶端請求不包含session id,則為此用戶端建立一個session並且產生一個與此session相 關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字串,這個session id將被在本次響應 中返回給用戶端儲存。儲存這個session id的方式可以採用cookie,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識發送給 伺服器。一般這個cookie的名字都是類似於SEEESIONID
php.ini裡面關於session和cookie有關的配置
1,session.use_cookie = 1
是否採用Cookie方法傳遞session id值。預設是1,表示啟用。
2,session.name = PHPSESSID
不管是Cookie傳遞sessioin_id,還是GET方法傳遞session_id,都需要使用索引值。他們的格式分別是Cookie: sess_name=session_id;和/path.php?sess_name=session_id,其中sess_name就是由這裡指定的。
3,session.use_only_cookies = 0
表示只使用Cookie 的方法傳遞session id。我們說過,傳遞cookie的方法,除了cookie,還有GET方法,GET方法是不安全的方法。在使用者端禁用了cookie的時候,會採用GET方法傳遞session_id,可以通過這個設定盡用GET方法傳遞session_id。
4,session.cookie_lifetime = 0, session.cookie_path = / 以及session.cookie_domain =
如果使用Cookie方法傳遞session_id的話,這裡分別指定了cookie有效域、目錄和時間。分別對應setcookie()函數的形參$expire、$path和$domain。其中cookie_lifetime=0表示直到關閉瀏覽器才刪除Cookie。還可以使用session_set_cookie_params()函數修改這些值。
5,session_name([string $name])
擷取或更新session_name。如果傳了name,則表示不使用預設的名稱PHPSESSID(由session.name)指定,否則擷取當前session_name。注意:如果設定session_name,則必須在session_start()之前調用才生效。
6,session_id([string $id])
與session_name()類似,但它是讀取或者設定session_id的方法。同樣,設定session_id的話,必須在session_start()之前調用才有效。
7,session_set_cookie_params()和session_get_cookie_params()
通過session_set_cookie_params()可以重新設定session.cookie_lifetime, session.cookie_path以及session.cookie_domain這三個php.ini設定。而session_get_cookie_params()則是擷取這些設定的值。
這裡我自己特別去做了一張表,把他們的不同點和相同點總結了一下: