java跟踪会话_JavaWeb会话跟踪
cookie和session是常用的會話跟蹤技術
cookie機制
1、web應用程序是使用HTTP協議傳輸數據的,HTTP協議是無狀態的協議,一旦數據交換完畢就會關閉鏈接。Cookie可以彌補HTTP協議無狀態的不足。
位于:javax.servlet.http.Cookie
2、Cookie具有不可跨域名性。Cookie的管理是瀏覽器,瀏覽器判斷一個網站是否能操作另一個網站的Cookie的依據是域名。例:p_w_picpaths.baidu.com與www.baidu.com不是同一個域名,cookie不能相互操作。但可以對此類cookie做特殊處理,讓其相互訪問。
3、Unicode編碼:保存中文
中文屬于Unicode字符,在內存中占4個字符,而英文屬于ASCII字符,內存中只占2個字節。Cookie中使用Unicode字符時需要URLEncode編碼,否則亂碼。一般采用UTF-8即可,GBK不推薦使用,因為瀏覽器不一定支持,而javascript也不支持GBK。
4、BASE64編碼:保存二進制圖片
Cookie可以使用二進制數據。例如在Cookie中使用數字證書,提供安全度。使用二進制數據時需要編碼BASE64。
BASE64:sun.misc.BASE64Encode;sun.misc.BASE64Decoder;
byte[] binary = new byte[1024];
String content = BASE64Encode.class.newInstance().encode(binary);
5、Cookie的屬性
6、Cookie的有效期
cookie.setMaxAge(秒)
負數:為臨時性Cookie,不會被持久化,不會寫到cookie文件中,cookie信息保存在瀏覽器內存中,關閉瀏覽器cookie就會消失,cookie的默認值為-1。
0:為零表示刪除該cookie,會從瀏覽器內存中刪除。
maxAge屬性只是被瀏覽器判斷是否過期的,不會提交到服務端。
修改:新建一個同名的cookie,覆蓋原來的cookie。
刪除:新建同名的cookie,并將maxAge為零,進行覆蓋。
7、永久登錄
方案:在登錄時查詢一次數據庫,以后訪問驗證登錄信息時不再查詢數據庫。實現方式是把賬號按照一定的規則加密后,連同賬號一塊保存到cookie中。下次訪問時只需要判斷賬號的加密規則是否正確即可。如:把賬號連同密匙用MD5算法加密后保存到cookie中,驗證時,驗證cookie中的賬號與密匙是否與cookie中的一樣。
session機制
session對應類javax.servlet.http.HttpSession類
session的使用比cookie方便,但過多的session存儲在服務器內存中,會對服務器造成壓力。
session的生命周期:
session在用戶第一次訪問服務器的時候自動創建,需要注意只有訪問JSP,Servlet等程序時才會創建session,訪問html等靜態資源并不會創建session。如果未生成session,可以使用request.getSession(true)強制生成。session生成后,只要用戶繼續訪問,服務器就會更新session的最后時間,并維護session。用戶每訪問服務器一次,無論是否讀寫session,服務器都認為該用戶的session活躍了一次。
session的有效期:
越來越多的用戶訪問,session也會越多,為防止內存溢出,服務器會把長時間內沒有活躍的session從內存中刪除。超時時間屬性為maxInactiveInterval,可設置超時時間。
tomcat的默認超時時間是20分鐘。
web.xml也可以設置超時時間
60?
session對瀏覽器的要求:
http協議是無狀態的,不能依據http連接來判斷是否同一客戶,因此服務器向客戶發送一個名為JSESSIONID的cookie,它的值為session的id,session依據該cookie來識別是否為同一用戶。該cookie為服務器自動生成,他的maxAge屬性為-1,表示僅當前瀏覽器內有效。
如果客戶端瀏覽器將cookie功能禁止,或者不支持cookie,例如大多數手機瀏覽器都不支持cookie,Javaweb提供另一種方案:URL地址重寫。
URL地址重寫:
原理是將該用戶session的id信息重新寫到URL地址中。
總結
以上是生活随笔為你收集整理的java跟踪会话_JavaWeb会话跟踪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: laravel5.5中间件
- 下一篇: java实现将一个正整数分解质因数,Ja