Session id實現通過Cookie來傳輸方法及代碼參考


1、 Web中的Session指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏覽這個網站所花費的時間。因此從上述的定義中我們可以看到,Session實際上是一個特定的時間概念。

需要注意的是,一個Session的概念需要包括特定的客戶端,特定的服務器端以及不中斷的操作時間。A用戶和C服務器建立連接時所處的Session同B用戶和C服務器建立連接時所處的Session是兩個不同的Session。

session的工作原理

(1)當一個session第一次被啟用時,一個唯一的標識被存儲於本地的cookie中。

(2)首先使用session_start()函數,PHP從session倉庫中加載已經存儲的session變量。

(3)當執行PHP腳本時,通過使用session_register()函數注冊session變量。

(4)當PHP腳本執行結束時,未被銷毀的session變量會被自動保存在本地一定路徑下的session庫中,這個路徑可以通過php.ini文件中的session.save_path指定,下次瀏覽網頁時可以加載使用。

2、HttpSession session = request.getSession();

根據情況當這句代碼需要創建session的時候,服務器每創建一個session都會有一個想對應的session_id,並且服務器會把這個session_id號,會以Cookie的形式回寫給客戶端(瀏覽器),下次同一個用戶訪問的時候會帶這個session_id號過來的。

這樣有時候就會出現一個問題,當你把客戶端(瀏覽器)關閉的時候,如果不小心關閉了瀏覽器,那么Cookie就不存在了。

例如常見的購物車功能,在購物的時候,不小心關閉了瀏覽器,該用戶下次再來訪問的時候,上次的記錄就不存在了,

所以當session創建的時候,可以把對應創建的session_id存到一個設置有效期的的Cookie當中,那么在你關閉瀏覽器的時候,在較短時間內,再次打開瀏覽器,上次的瀏覽記錄依然還是在的:

通過以下代碼可以去實現:  

1
2
3
4
5
6
7
HttpSession session = request.getSession();
   session.setAttribute( "String1" "Object1" );
   String session_id = session.getId();
   Cookie cookie =  new  Cookie( "JSESSIONID" , session_id); //session_id默認是存放在一個name為JSESSIOINID里面的
   cookie.setPath( "上次路徑" );
   cookie.setMaxAge( 30  60 ); // 30 分鍾
   response.addCookie(cookie);
   www.169it.com

3、這里又有了另外一個問題,為什么我上面這段代碼設置了Cookie的生命周期,再次打開瀏覽器的時候,這個Cookie還在呢;而當你創建session並且默認以Cookie的形式回寫給客戶端的時候,不小心關閉了瀏覽器,再次打開的時候Cookie卻不存在了?

關於Cookie的一個生命周期的問題:

  Cookie如果不設置過期時間,則表示這個cookie生命周期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期為瀏覽會話期的cookie被稱為會話cookie。會話cookie一般不保存在硬盤上而是保存在內存里。

如果設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉后再次打開瀏覽器,這些cookie依然有效直到超過設定的過期時間。存儲在硬盤上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存的cookie,不同的瀏覽器還有不同的處理方式。

4、有些網站使用Session ID(會話ID)跟蹤用戶訪問,每個用戶訪問網站時都會生成獨特唯一的Session ID,加在URL中。搜索引擎蜘蛛的每一次訪問也會被當成一個新的用戶,URL中會加上一個不同的Session ID,這樣搜索引擎蜘蛛每次來訪問時所得到的同一個頁面的URL將不一樣,后面帶着一個不一樣的Session ID。這也是最常見的蜘蛛陷阱之一。 搜索引擎遇到這種常常的Session ID,會嘗試判斷字符串是Session ID還是正常參數,成功判斷出Session ID就可以去掉Session ID,收錄正常URL。但也經常判斷不出來,要么不願意收錄,要么收錄多個帶有不同Session ID的URL,內容卻完全一樣,形成大量復制內容,這兩種情況對網站優化都不利。

 


本文來源:Session id實現通過Cookie來傳輸方法及代碼參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM