摘要:會話控制協議是服務器與瀏覽器相互通信的協議,它是一種無狀態協議,即每個請求之間是相互獨立的。因此,協議沒有一個內建的機制來維護兩個事務之間的狀態。這就是會話控制技術。每一個文件,里面保存了一個會話的數據。此時可以采用等緩存系統。
會話控制
HTTP 協議是 WEB 服務器與瀏覽器相互通信的協議,它是一種無狀態協議,即每個 HTTP 請求之間是相互獨立的。因此,HTTP 協議沒有一個內建的機制來維護兩個事務之間的狀態。比如,當一個用戶在請求一個頁面后再去請求另外一個頁面時,HTTP 將無法告訴我們這兩個請求是否來自同一個用戶。
在網站中,我們經常需要跟蹤一個變量:通過對變量的跟蹤,使多個請求事物之間建立聯系,再根據授權和用戶身份顯示不同的內容、不同頁面。這就是會話控制技術。
常用的會話控制技術有 Cookie 和 Session。簡單地說,Cookie 是通過在客戶端中記錄信息而確定用戶身份;Session 是通過在服務器端記錄信息而確定用戶身份。
CookieCookie 是一個很小的文本文件,包含在 HTTP 請求報文中在 Web 服務器和瀏覽器之間傳遞。Cookie 的工作原理如下:
服務器通過在 HTTP 響應報文中設置一個 Set-Cookie 字段,并把 Cookie 數據放在 Set-Cookie 字段中隨著 HTTP 報文傳給瀏覽器;
瀏覽器在接收到 HTTP 響應報文后,檢查到 Set-Cookie 字段有值,會在本地創建一個 Cookie 文件來保存數據;
當瀏覽器再次向該服務器發送請求時,瀏覽器會先搜索本地保存的 Cookie 文件,如果在 Cookie 文件中有任何與正在連接的 URL 相關的 Cookie,就在 HTTP 請求報文中設置一個 Cookie 字段,并把 Cookie 文件中的數據添加到該字段中,最后把攜帶 Cookie 字段的 HTTP 請求報文發送給服務器。
Cookie 可以用來保存用戶名、密碼、個性化設置等一些簡單的信息,以下是 Cookie 的使用說明:
必須在 HTML 文件的內容輸出之前調用 setcookie()接收
刪除
SessionSession 是在服務器端保持用戶會話數據的一種方法,其工作原理如下:
當瀏覽器第一次訪問 PHP 腳本時,seesion_start() 函數會創建一個唯一的 Session ID(每個客戶端都有一個唯一的標識),并自動通過 HTTP 的響應頭,將這個 Session ID 保存到客戶端 Cookie 中。同時,也在服務器端創建一個以 Session ID 命名的文件,用于保存這個用戶的會話信息;
當同一個用戶再次訪問這個網站時,會自動通過 HTTP 的請求頭將 Cookie 中保存的 Seesion ID 再攜帶過來;
服務器 PHP 腳本接受到客戶端請求,這時 session_start() 函數就不會再去分配一個新的 Session ID,而是在服務器的硬盤中去尋找和這個 Session ID 同名的 Session 文件,將這之前為這個用戶保存的會話信息讀出。
首先,創建 Session 唯一標識的方法有兩種:通過 Cookie 或者 GET 方式。PHP 在默認情況下使用 Session 會建立一個名叫 PHPSESSID 的 Cookie(可以通過 php.ini 修改 session.name 的值),如果客戶端禁用cookie,可以指定通過 GET 方式把 Session ID 傳到服務器(修改 php.ini 中 session.use_trans_sid 等參數)。其次,Session 是以文件的形式保存的。php.ini 中有個配置項 --session.save_path= "" ,這個里面填寫的路徑,將會保存所有 Session 文件。Session 文件的命名格式是:sess_[PHPSESSID的值]。每一個文件,里面保存了一個會話的數據。最后,保存在 Session 文件中的數據是經過序列化處理的,比如:
cityID|i:0;cityName|s:3:"all";fanwe_lang|s:5:"zh-cn";fanwe_currency|a:4:{s:2:"id";s:1:"1";s:6:"name_1";s:9:"人民幣";s:4:"unit";s:3:"¥";s:5:"radio";s:6:"1.0000";}_fanwe_hash__|s:32:"77c18770c6cb5d89444c407aaa3e8477";Session 同樣可以用來保存用戶名、密碼、個性化設置等一些簡單的信息,以下是 Session 的使用說明:
創建
//啟動 session session_start(); //注冊session變量,賦值為一個用戶的名稱 $_SESSION["username"] = "jochen"; //注冊session變量,賦值為一個用戶的ID $_SESSION["uid"] = 1;注意:必須在 HTML 文件的內容輸出之前調用 session_start()讀取
銷毀
需要注意的是,當 session 文件比較多的情況下,將會產生 I/Q 讀寫性能問題。此時可以采用 memcached、redis 等緩存系統。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28561.html
摘要:一的會話也稱為。如果啟動會話成功,則函數返回,否則返回。會話啟動后就可以載入該會話已經注冊的會話變量以便使用。但數組創建的在會話結束后就會失效。預告本周三更新面試常考之網絡協議,敬請期待。 你好,是我琉憶,歡迎您來到PHP面試專欄。本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面試常考之會話控制周三:PHP面試常考之網絡協議周五:PHP面試常考題之會話控制和...
摘要:因為子進程一定不會是組長進程,所以子進程可以調用。主進程退出子進程繼續執行啦啦啦,啦啦啦,啦啦啦,已經變成啦,開心一般服務器軟件都有寫配置項,比如以模式運行還是以模式運行。 [原文地址:https://blog.ti-node.com/blog...] 其實前面是談過一次daemon進程的,但是并涉及過多原理,但是并不影響使用。今天打算說說關于daemon進程更多的二三事,本質上說,如...
摘要:一下大多是網上的資料,自己只是整理了下,如果有錯誤希望能指出,感謝中的相關配置先看下中的相關配置的解釋。啟用此設定可以防止有關通過傳遞會話的攻擊。值為表示直到關閉瀏覽器。例如意味著在每個請求中有的概率啟動進程。 對于session的了解,之前一直沒有仔細研究過,最近遇到了一些問題,需要解決session配置問題,就順便查看了些資料。一下大多是網上的資料,自己只是整理了下,如果有錯誤希望...
閱讀 947·2021-09-26 09:55
閱讀 3192·2021-09-22 15:36
閱讀 2982·2021-09-04 16:48
閱讀 3142·2021-09-01 11:41
閱讀 2591·2019-08-30 13:49
閱讀 1492·2019-08-29 18:46
閱讀 3546·2019-08-29 17:28
閱讀 3425·2019-08-29 14:11