1. 程式人生 > >apache webserver & brows 會話機制

apache webserver & brows 會話機制

測試環境:apache+php   

Php.inisession設定:

                               ; Whether to use cookies.

                               session.use_cookies = 1  此值設定為0後測試站點就永遠也登入不上

                               session.name = 9ai9

                               ; Lifetime in seconds of cookie or, if 0,until browser is restarted.

                               session.cookie_lifetime = 0  


        web服務端和瀏覽器之間需要保持session是由HTTP協議本身特性而定的。無狀態:對事務的處理沒有記憶能力;無連線:每次連結只處理一個請求,伺服器處理完客戶的請求,並收到客戶的應答後,就主動斷開連線。

        session的常見實現形式是會話cookie(session cookie),即未設定過期時間的cookie,這個cookie的預設生命週期為瀏覽器會話期間,只要關閉瀏覽器視窗,cookie就消失了。Web伺服器程式中有一個session物件,多用於儲存客戶登陸資訊、購物車等資訊。服務端通過驗證session中儲存的值從而驗證使用者資訊。在存入session變數後服務端就會為其建立一個名為cookie9ai9=************的值並將其以HashTable的形式寫到伺服器記憶體中,並將值返回給瀏覽器,瀏覽器後續的訪問會在報頭中帶上此cookie session值,以表明自己的身份。session理應是服務端建立的。

        分析時另我疑惑的是:在服務端用tcpdump抓包時,發現每次這個cookie session值是由客戶端發給服務端的,此後反覆試驗,用firebug清空瀏覽器cookie,此時在點選站內網頁,發現登入失效了,然後重新登入,用HTTP 的POST請求將登入表單提交給伺服器,登入成功,伺服器的回覆報文能看見有set cookie9ai9=*************的資訊,此為重新生成的sessionid。退出登入但不關閉瀏覽器,再次訪問網站登入頁面時客戶端的HTTP請求報頭會有退出登入前的sessionid值,再次登入,伺服器並不會生成新的sessionid,而是重用這個session值,後面每次訪問報頭都是此sessionid。關閉瀏覽器後就需要服務端重新分配session值。說明session值的確是由服務端生成的,只是在沒有關閉瀏覽器即使登出登入了對站點訪問的session值都不會重新生成。

        綜上apache是運用的臨時cookie機制保持站點會話的。