標籤:情況 使用 頁面 傳遞 調用 系統 姓名 為什麼 lib
為什麼要使用會話技術
我們在瀏覽網站的時候,訪問每一個Web頁面都是使用HTTP協議來實現的。由於HTTP協議是一個無狀態的協議。這就會導致當一個使用者請求一個頁面以後,再請求該網站的其他頁面,HTTP協議並不能告訴伺服器這是同一個使用者。
因為HTTP協議是無狀態的,所以我們無法跟蹤使用者。所以一定程度上會影響我們的開發,例如:登入模組,如果不能跟蹤使用者,將會導致訪問該網站的每一個都要求我們重新登入。還有就是購物車也是需要使用到使用者跟蹤
使用者跟蹤的方式
所謂使用者跟蹤,其實就是向另外一個網頁傳遞資料。
在PHP裡面提供了3種方式來實現網頁之間傳遞資料
① 可以通過超連結或者header()函數在URL後面附加參數的形式來傳遞資料。
② 使用cookie將使用者的狀態資訊儲存在用戶端的電腦裡面。
③ 使用session將使用者的狀態資訊儲存在伺服器端的電腦裡面。
如果使用者的狀態資訊全部都是通過附加在URL後面來進行傳遞,那麼,開發工作量是非常大。所以我們一般選用Cookie或者Session技術。
Cookie的應用
Cookie的概述
在現實生活中,如果在商場裡面購買東西,一般會有一張會員卡。這張會員卡就記錄使用者的相關資訊(姓名,聯絡電話,積分資訊)。下一次你再去商場的時候,只要拿出會員卡,商場這一邊就知道你是之前來過的使用者,通過這張積分卡,就可以讀出你所有的資訊。
Cookie就類似於這張會員卡,當使用者第一次訪問網站的時候,伺服器在返回HTTP響應的時候順帶將Cookie(小餅乾)發送到用戶端儲存起來(相當於商場將會員卡發給了你)。下一次當使用者再次訪問該網站的其他頁面的時候,在HTTP的請求裡面就會自動的將用戶端的Cookie資訊給帶過去。通過這種方式,伺服器端就可以識別是否是同一個使用者。
向用戶端的計算中設定Cookie
在PHP裡面,提供了一個叫做setCookie的函數,可以用用戶端發送cookie資訊
Bool SetCookie(Cookie的名稱,Cookie的值,Cookie的存留時間,Cookie有效目錄,Cookie有效網域名稱,是否通過安全性通訊協定HTTPS來傳輸Cookie)
Cookie的存留時間是以當前的時間戳記來計算的
如果Cookie設定成功,則返回true
在PHP裡面讀取Cookie資訊
在PHP裡面提供了一個$_COOKIE[ ]這是一個超全域數組。該超全域資料用來存放從用戶端發送過來的cookie資訊。
如果沒有寫到期時間,cookie的有效期間是多久?
如果沒有書寫cookie的到期時間,那麼預設cookie將會在瀏覽器關閉時到期。
刪除cookie
如何手動的刪除cookie,方法很簡單,還是調用setCookie函數,只需要value為空白,然後時間小於當前的系統時間即可
還有一種方法刪除cookie,只設定第一個參數,其他參數全部省略
這一種方式cookie並沒有被刪除,只是被置空了。
Session的應用
Session翻譯成中文是會話的意思。雖然cookie可以解決前面我們所說的問題。但是cookie有一個嚴重的問題,那就是儲存於用戶端,所以安全性不高。而且使用者有權利阻止cookie使用如果使用者一旦關閉cookie,那麼Web伺服器無法再使用cookie來跟蹤使用者。所以,session技術出現了。Session就是將使用者的狀態資訊儲存在伺服器端。
如果說cookie是一張會員卡,這張會員卡由使用者自己儲存。如果使用者的會員卡丟失,使用者就不能再證明自己的身份。但是session就是將這張會員卡由商場方來儲存,無需使用者儲存,使用者只需要提供卡號就可以了。
1.設定session
Session是一種伺服器端技術。預設session的有效期間從開始訪問網站開始,到斷開和網頁的連結。
使用session的時候,會產生一個sessionID,用來識別儲存在伺服器端的sessionID。
2.配置資訊
在PHP裡面配置session可以通過PHP設定檔來進行相關的配置
Session.Auto_start:是否自動啟動session,如果設定為1,則為自動啟動,這個選項一般不改他它。
Session.cookie_lifetime:代表cookie的有效時間,單位為秒,如果值為0,代表瀏覽器一關閉就失效
Session.save_path:session在用戶端所儲存的位置
Session.name:session的名字,預設值為PHPSESSID
3.Session的使用
如果要使用session,那麼首先第一步需要開啟session,開啟方法很簡單,在PHP裡面提供了一個session_start()
該函數有兩個作用,第一個是開啟會話環境,第二個是檢查用戶端有沒有發送過來sessionID,如果沒有,自動產生一個sessionID,然後通過cookie的方式發送給用戶端。
接下來第二次訪問頁面的時候,就會將之前儲存在用戶端的sessionID發送給伺服器
4.往session裡面添加資料
方法非常簡單,直接像使用數組一樣使用即可
5.登出變數和銷毀session
在PHP裡面有3種刪除session的方式
(1) 刪除單個的資料
Unset($_SESSION[‘key’])
(2) 刪除所有資料
當然是可以使用unset()來一個一個刪除,但是這樣太麻煩了,如果有100個資料,工作量相當之大。所以,如果要刪除所有資料,可以直接將一個空數組賦值給$_SESSION
(3) 結束當前會話
在PHP裡面為我們提供了一個函數,叫做session_destroy(),一旦調用該函數,就會刪除當前會話中的所有資料,並且登出會話,也就是說,會將sessionID也一併刪除掉
a) 傳遞sessionID
(1) 使用cookie進行sessionID的傳遞。但是這種方法並不是總是可用。因為使用者可以將cookie禁止掉(這種情況很少)。所以還有一種方式:通過URL附加資訊的方式
(2) 通過URL附加資訊的方式
6.Cookie和session的區別
(1) cookie是存放於用戶端,session是存放於伺服器端
(2) 由於session是存放於伺服器端,所以安全性比cookie要高
(3) Cookie相比session更能分散伺服器的壓力,因為資料都分散到了各個用戶端。但是這不足以讓我們完全使用cookie,因為安全性更重要。
綜上所述:將很重要的使用者資訊存放至session,不怎麼重要的資訊可以存放到cookie裡面。
PHP會話技術