1. 程式人生 > >會話技術

會話技術

coo 從服務器 可能 life 當前 在服務器 我們 識別 amp

Cookie的應用

① Cookie的概述

在現實生活中,如果在商場裏面購買東西,一般都會有會員,這張會員卡,就記錄了用戶的相關信息(姓名,電話號碼,積分信息)。下一次再去商店的時候,只要帶上這一張會員卡,商場方就就可以通過這張會員卡將你信息識別出來。

Cookie相當於就是這張會員卡。當用戶第一次訪問網站的是,服務器端(商場)會將cookie(會員卡)發送到客戶端(用戶),下一次客戶端再次訪問服務器端的時候,就會在HTTP請求裏面自動的將之前的cookie給帶過去,服務器端根據這個cookie就可以識別出該用戶了

向客戶端發送cookie

PHP裏面,發送cookie非常簡單,有一個函數

setcookie()可以向客戶端發送信息

函數的原型如下:

Setcookie(cookie的名字,cookie的值,cookie的生存時間,cookie的有效目錄,cookie的有效域名,是否通過安全協議HTTPS來傳輸cookie)

關於cookie生存的時間是以當前的時間戳來進行計算的。

如果cookie設置成功,返回true

查看響應頭,可以看到確實是向客戶端發送了cookie信息

當我們訪問其他頁面的時候,HTTP請求裏面就會自動的帶上之前發送過來的cookie

PHP裏面讀取cookie信息

方法非常簡單,在PHP裏面有一個$_COOKIE[ ]的超全局數組,該超全局數組是用來存放從客戶端發送過來的

cookie的信息。

如果沒有書寫過期時間,cookie的有效期是多久?

如果沒有書寫cookie,那麽cookie會在瀏覽器關閉的時候過期

刪除cookie

如何刪除cookie,方法非常簡單,還是用setcookie函數,只需要value為空,然後時間小於當前系統的時間即可,如下:

Setcookie(cookie名稱,””,time()-100)

還有一種方法更簡單,只要書寫cookie名稱就可以了,但是和上面的方法相比有區別

區別在於這種方法是置空cookie,但是鍵還在。

基於Cookie的登錄模塊

詳細參見【基於cookie的登錄模塊】

Session的應用

為什麽需要session

session翻譯成中文:會話的意思

Cookie雖然好用,但是有一個很嚴重的問題,那就是不安全,因為所有的信息都是存儲在客戶端裏面,用戶可以隨意修改。還有一個問題,就是用戶可以手動的停止cookie的使用。

所謂session,就是將會員的信息保存在商場(服務器)這一方,而不是用戶(客戶端)那一方。之後用戶(客戶端)在去商場(訪問服務器端)的時候,只需要報出電話號碼(sessionID)即可。所以這個時候,就相當於由服務器端(商場)來保存sessionID(會員卡),但是用戶手上也必須會員卡號(sessionID)。

設置session

Session是一種服務器端技術,默認session的有效期從開始訪問網站到關閉瀏覽器。使用session的時候,會生成一個sessionID,用於識別保存在服務器端的sessionID

② Session的配置

通過PHP的配置文件可以修改session的相關配置

Session.auto_start:是否自動啟動session,如果設置為1,則為自動啟動,但是這個選項我們一般不會去改它。

Session.namesession的名字,默認為PHPSESSID

Session.cookie_lifetime:代表cookie有效的時間,單位為秒,如果值為0,代表關閉瀏覽器的時候失效

Session.save_pathsession保存的路徑,默認是保存在wamp下面的tmp目錄下

使用session

如果要使用session,那麽首先需要開啟session,在PHP裏面提供了一個函數

Session_start()

該函數有兩個作用:1. 開啟會話環境 2. 檢查客戶端有沒有發送過來sessionID,如果沒有,則自動生成一個sessionID,發送到客戶端。

第一次訪問denglu.php 效果:http響應頭裏面自動生成了一個sessionID並且發送給客戶端

第二次訪問denglu.php的時候,客戶端由於已經有了sessionID,所以會在http請求裏面自動將這個sessionID帶給服務器端,服務器端就會進行相應的查找

session裏面存入信息

session裏面存入方法非常簡單,就和我們平時使用數組

我們先用瀏覽器訪問test.php這個時候會發生兩件事情:1. 服務器檢查有沒有從客戶端發送sessionID過來,因為我們是第一次訪問,沒有sessionID從客戶端發送過來,所以服務器自動生成一個sessionID,發送給客戶端。

2. 在服務器下面存儲了2個變量

接下來我們再來訪問test2.php 1.服務器檢查有沒有從客戶端發送sessionID過來,這一次就有sessionID從客戶端發送過來了。2. 接下來服務器將從客戶端發送過來的session和服務器下面的sessionID進行匹配,匹配上之後,就從服務器下面取出相應的值。

註銷變量和銷毀session

PHP裏面有3種方式刪除session中的數據。

(1) 刪除單個數據

語法:unset($_SESSION[‘key’])

效果:註意第一次訪問該頁面還是能夠正常的顯示出兩個值,但是第二次再訪問的時候,

(2) 刪除所有的數據

如果要刪除所有的session數據,unset雖然可以,但是太麻煩了,所以我們可以將一個空數組賦值給session

這種刪除方法雖然刪除了服務器下面對應session的所有數據,但是sessionID還是存在的

(3) 銷毀session

PHP裏面為我們提供了一個函數 session_destory(),調用該函數,會銷毀服務器下面的sessionID

通面的步驟,我們可以將服務器端的session徹底清除,但是客戶端的存放sessionIDcookie還存在。所以我們還需要一個收尾的工作,就是將存放於客戶端的sessionIDcookie也一並刪除掉

傳遞sessionID

傳遞sessionID默認是采用的cookie的形式來傳遞,但是客戶端有可能將cookie給禁用掉(當然這種情況很少),如果用戶禁用了cookie,這個時候我們還可以通過get的方式將sessionID附加到URL後面

⑦ Cookiesession的比較

Cookie是存放客戶端,session是存放於服務器端

相比Cookiesession的安全性更高

雖然session相比cookie更安全,但是也有自身的缺點,那就是占用服務器的資源。不過好在一關閉瀏覽器,session就過期了,然後PHP裏面有一個叫做垃圾回收的功能,會定期的刪除掉過期的sessionID

綜上所述:如果我們要存儲用戶的相關狀態信息,例如等級,金幣,銀幣,使用session,如果是存儲不怎麽重要的,那麽就使用cookie將其存儲到客戶端,以分散服務器的壓力

會話技術