PHP中使用會話控制

導語:會話控制的思想是指能夠在網站中根據一個會話跟蹤用戶,下面就由小編爲大家介紹一下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目錄中。在服務器端我們可以通過_cookies來控制客戶端使用哪一種保存方式。如果定義爲cookie保存方式,我們可以通過ie_lifetime(默認值0,閉瀏覽器就清除)來控制被保存在client上的cookie的有效期。而如果客戶端用cookie方式保存的sessionID,則使用“臨時”的cookie保存(cookie的名稱爲PHPSESSID,通過Firebug你可以瞭解到詳細的信息,該名稱你可以通過 進行更改),用戶提交頁面時,會將這一SessionID提交到服務器端,來存取session數據。這一過程,是不用開發人員干預的。

  5、SESSION和COOKIE的區別與聯繫

相同點:都可以在解決HTTP無狀態的問題,使同一個客戶端在訪問網站的多次請求中,可以保存,設置信息,並且在請求事物之間建立聯繫。

不同點:簡單的說cookie的信息保存在客戶端,session的信息保存在服務器端。

Session採用鍵值對,也就是說ID存放客戶端,而值放在服務器端,是通過用戶的ID去找服務器上對應的值,這種方式值放置在服務器端,有個時間限制,時間到則服務器自動回收/釋放。

Cookies則有兩種方法,一種方法是把值保存在瀏覽器的變量中,當瀏覽器關閉時結束,另一種方法是保存在硬盤中,只要時間不過期,下次還可使用。

聯繫:當客戶端使用基於Cookie方式保存的SessionID時,SessionID一般保存在cookie中。

備註:cookie在相同內核的瀏覽器之間是共享的,不同內核瀏覽器是不共享的例如火狐和IE(存放位置都不同,當然不共享)。不同內核瀏覽器不能共享cookie,也會產生不同sessionid。