PHP中使用會話控制
導語:會話控制的思想是指能夠在網站中根據一個會話跟蹤用戶,下面就由小編為大家介紹一下PHP中使用會話控制,歡迎大家閱讀!
1、什么是會話控制
HTTP是一種無狀態協議,它的內部沒有一個內建機制來維護兩個事務之間的狀態。當一個用戶在請求一個頁面后再請求另一個頁面,HTTP將無法告訴我們這兩個請求時來自同一個用戶。
會話控制的思想是指能夠在網站中根據一個會話跟蹤用戶,這樣可以很容易的做到對用戶登錄的支持,并根據其授權級別和個人喜好顯示相應的內容,我們可以根據會話控制記錄該用戶行為,還可以實現購物車。
2、理解基本的會話功能
PHP的會話是通過唯一的會話ID來驅動的,會話ID是一個加密的隨機數字。它由PHP生成,在會話的生命周期中會保存在客戶端,它可以保存在用戶機器里的cookie中,或者通過URL在網絡上傳遞。
會話ID就像一把鑰匙,它允許我們注冊一些特定的變量,也成為會話變量。這些變量的內容會保存在服務器端。會話ID是客戶端唯一可見信息。如果在一次特定的網站鏈接中,客戶端可以通過cookie或URL看到會話ID,那么我們就可以訪問該會話保存在服務器中的會話變量。在默認情況下,會話變量保存在服務器上的普通文件中。
把會話ID保存在URL中,如果在URL中有一串看起來像隨機數字的字符串,可能它就是某種形式的會話控制。
cookie是與會話不同的解決方案,它也解決了在多個事務之間保持狀態的問題,同時還可以保持一個整潔的URL。
會話控制過程:用戶登錄或者第一次瀏覽某個站點的頁面時,該站點會生成一個PHP的會話ID并通過cookie發送到客戶端(瀏覽器)。當用戶點擊該站點的另一個頁面時,瀏覽器開始連接這個URL。在連接之前,瀏覽器會先搜索本地保存的cookie,如果在cookie中有任何與正在連接的URL相關的cookie,就將它提交到服務器。而剛好在登陸或第一次連接時,已經產生了一個與該網站URL相關的cookie(保存的會話ID),所以當用戶再次連接這個站點時,站點就可以通過這個會話ID識別出用戶,從服務器的會話文件中取出與這個會話ID相關的會話變量,從而保持事務之間的連續。
3、什么是Cookie
cookie是在服務器端被創建并寫回到客戶端瀏覽器,瀏覽器接到響應頭中關于寫cookie的指令則在本地臨時文件夾中。創建了一個cookie文件,其中保存了你的cookie內容,cookie內容的存儲是鍵值對的方式,鍵和值都只能是字符串。
cookie其實就是一小段信息,它可以由腳本在客戶端機器保存。可以通過發送一個包含特定數據并且具有如下格式的HTTP標題頭,從而在用戶端機器設置一個cookie:
Set-Cookie:NAME = VALUE; [expires=DATE;] [path=PATH;] [domain=DOAMIN_NAME;] [secure]
這會創建一個名為NAME,值為VALUE的cookie。除了該參數,其它參數都是可選的。expires域設置該cookie的失效日期(如果不設置失效日期將永遠有效,除非手動刪除)。path和domain域結合起來制定URL或與cookie有關的URL。secure的關鍵字的意思是在普通的HTTP連接中不發動cookie。
當瀏覽器連接一個URL時,首先要搜索當地保存的cookie。如果有任何與正在連接的URL相關的cookie,瀏覽器將它提交到服務器。
4、什么是Session
Session是由應用服務器維持的一個服務器端的存儲空間,用戶在連接服務器時,會由服務器創建生成一個唯一的sessionID,用該sessionID為標識符來存取服務器端的Session存儲空間,在會話期間,分配給客戶端的唯一sessionID,用來標識當前用戶,與其他用戶進行區分。通過SessionID接受每一次訪問的請求,從而識別當前用戶,跟蹤和保持用戶的具體資料,以及session變量,可在session中存儲數字或文字資料.比如session_name.這些信息都保存在服務器端。當然,sessionID也可以作為會話信息保存到數據庫中,進行session持久化。這樣可以跟蹤用戶的登陸次數、在線與否、在線時間等從而維護HTTP無狀態事物之間的關系。session的內容存儲是鍵值對的列表,鍵是字符串類型,session的存儲更方便,值可以是對象。
在session會話期間,session會分別保存在客戶端和服務器端兩個文件,客戶端可以是cookie方式保存的sessionID(默認的保存方式)或通過url字符串形式傳遞。服務器端一般以文本的形式保存在指定的.session目錄中。在服務器端我們可以通過session.use_cookies來控制客戶端使用哪一種保存方式。如果定義為cookie保存方式,我們可以通過session.cookie_lifetime(默認值0,閉瀏覽器就清除)來控制被保存在client上的cookie的有效期。而如果客戶端用cookie方式保存的sessionID,則使用“臨時”的cookie保存(cookie的名稱為PHPSESSID,通過Firebug你可以了解到詳細的信息,該名稱你可以通過php.ini session.name進行更改),用戶提交頁面時,會將這一SessionID提交到服務器端,來存取session數據。這一過程,是不用開發人員干預的。
5、SESSION和COOKIE的區別與聯系
相同點:都可以在解決HTTP無狀態的問題,使同一個客戶端在訪問網站的多次請求中,可以保存,設置信息,并且在請求事物之間建立聯系。
不同點:簡單的說cookie的信息保存在客戶端,session的信息保存在服務器端。
Session采用鍵值對,也就是說ID存放客戶端,而值放在服務器端,是通過用戶的ID去找服務器上對應的值,這種方式值放置在服務器端,有個時間限制,時間到則服務器自動回收/釋放。
Cookies則有兩種方法,一種方法是把值保存在瀏覽器的變量中,當瀏覽器關閉時結束,另一種方法是保存在硬盤中,只要時間不過期,下次還可使用。
聯系:當客戶端使用基于Cookie方式保存的SessionID時,SessionID一般保存在cookie中。
備注:cookie在相同內核的瀏覽器之間是共享的,不同內核瀏覽器是不共享的例如火狐和IE(存放位置都不同,當然不共享)。不同內核瀏覽器不能共享cookie,也會產生不同sessionid。
【PHP中使用會話控制】相關文章:
PHP會話session 時間設定使用入門08-27
PHP如何通過會話控制實現身份驗證09-22
Session在PHP中的使用09-16
PHP中trait的使用方法08-25
php中的curl使用入門教程08-17
PHP中trait的使用方法介紹07-15
如何使用PHP框架09-15
PHP中isset()與empty()的使用區別詳解06-07
PHP語言的使用特性09-15
这里有更多你想看的
|
- 上一篇:php代碼運行流程圖 php代碼運行流程怎么寫
- 下一篇:返回列表