Cookies & Session
1.兩者區別:
Cookie是客戶端技術
HttpSession是伺服器端技術
2.Cookies是什麼?
一個小資訊,由伺服器寫給瀏覽器的;
由瀏覽器來儲存;
客戶端儲存的Cookie資訊,可以再次帶給伺服器
3.Cookies的屬性:
name:必須的
value:必須的
comment:可選的。註釋
path:可選的。
寫Cookie的程式的訪問路徑是:http://localhost:8080/day07/servlet/CookieDemo1
其中:localhost就是域名;/day07/servlet就是當前Cookie的path
如果一個Cookie的路徑設定成了/day07,意味著當前應用下的所有Cookies資源瀏覽器都會帶著它給伺服器。
所以獲取和新增Path的保持一致,如:c.setPath(request.getContextPath());
domain:可選的。該Cookie所屬的網站域名。(itcast.cn)預設值。
maximum age:可選的。
不設定就是會話過程(存在瀏覽器的記憶體中),單位是秒。
如果是0,說明要刪除。
如果是Integer.MAX_VALUE,說明永久儲存。
version:可選的。版本號
4.新增&獲取Cookies
例項化Cookies:Cookie c = new Cookie(名字,值);
向客戶端寫Cookie:c.addCookie();
得到客戶端傳來的Cookie:c.getCookies();
刪除cookie:c.setMaxAge(0);
記住cookie:c.setMaxAge(Integer.MAX_VALUE);
5.如何區分Cookies?
不能通過名稱,預設用domain+path+name來區分的。
最好固定用setPath(request.getContextPath());
6.URL地址寫法:
最好使用絕對路徑!"/"就代表著當前應用。
*地址給伺服器用的,不用加。
*給客戶端用的,要加,絕對路徑要加上應用名稱。
如:
<link href=path/> 要加/day07
<script src=path/> 要加/day07
<img src=path/> 要加/day07
<a href=path/> 要加/day07
RequestDispatcher.include(path) 不要加,"/"就代表著當前應用
RequestDispatcher.forward(path) 不要加,"/"就代表著當前應用
HttpServletResponse.sendRedirect(path) 要加/day07
ServletContext.getRealPath(path) 不要加,"/"就代表著當前應用
7.得到Session
Request.getSession():
*根據特殊Cookie(JSESSIONID=HttpSession物件的id,由伺服器生成,唯一的)的取值,在伺服器的記憶體中根據id查詢這個HttpSession物件,找到了,取出來繼續服務;
*沒有找到,建立一個新的HttpSession物件。
Request.getSession(boolean b):
如果b為true,與上面方法功能完全一致;
如果為false,只查詢。
8.Session的作用:
1.貫穿使用者登入到登出/關閉瀏覽器的整個過程;
2.識別使用者並保持使用者資訊,或者說監控使用者是否登入或者已經登出;
3.防止表單重複提交;(利用session儲存一個隨機的令牌,用一次就銷燬,看你怎麼重複提交表單)
4.實現一次性驗證碼。(把驗證碼code放進session中,防止抓包對其破解)
9.禁用Cookie後的會話資料儲存問題
1.客戶端禁用Cookie對http://localhost訪問的無效。
2.把URL重寫,必須對網站中的所有URL地址都重寫。
效果:url—->url;JSESSIONID=123459789
HttpServletResponse.encodeURL(url):是一個智慧方法。判斷使用者是否禁用了Cookie,沒有禁用,則不重寫;禁用了就重寫。
實際上就是把JSESIONID加在url後面,在瀏覽器位址列可以看到。
3.網站主頁:為了更好訪問本網站,請不要禁用您的Cookie。
10.HttpSession物件的狀態及轉換(序列化)
1.更改記憶體中HttpSession物件的超時時間。
修改web.xml
<session-config>
<session-timeout>1</session-timeout><!--自然整數,單位是分鐘-->
</session-config>
2.實現session持久化。(必須在實現session的servlet 中實現介面implements serializable,不然報錯啊)
相關文章
- 詳細總結介紹Get和Post,Session和Cookies,Token和Cookies自登陸的思路SessionCookie
- CookiesCookie
- Response.cookies和Request.cookiesCookie
- 多域名共享 cookiesCookie
- Sanic Cookies 讀寫Cookie
- Another Intro for CookiesCookie
- Cookies與會話物件Cookie會話物件
- cookies sessionStorage和localstorage區別CookieSession
- ASP.NET 2.0 加密 CookiesASP.NET加密Cookie
- 使用程式碼如何清除CookiesCookie
- vue3-cookies元件使用VueCookie元件
- 為爬蟲獲取登入cookies: 使用browsercookie從瀏覽器獲取cookies爬蟲Cookie瀏覽器
- Cypress系列(90)- Cypress.Cookies 命令詳解以及如何跨測試用例共享 CookiesCookie
- jmeter學習指南之管理CookiesJMeterCookie
- Request.Cookies使用方法分析Cookie
- Python Selenium如何操作CookiesPythonCookie
- requests返回值cookies轉字典Cookie
- jmeter通過cookies來登入JMeterCookie
- Android: HttpClient與Webview共享cookiesAndroidHTTPclientWebViewCookie
- Swift 之刪除清空 webView 的 CookiesSwiftWebViewCookie
- 請教一個cookies的問題Cookie
- 為什麼編譯的時候把mod_cookies編譯進去了,但是cookies還是不能(轉)編譯Cookie
- AFNetworking 支援cookies的解決方案Cookie
- 為什麼編譯的時候把mod_cookies編譯進去了,但是cookies還是不能用(轉)編譯Cookie
- vue 本地除錯跨域---帶cookies(axios)Vue除錯跨域CookieiOS
- C# 爬蟲—-Cookies處理(Set-Cookie)C#爬蟲Cookie
- python request 獲取cookies value值的方法PythonCookie
- XP系統怎樣匯出cookies資料Cookie
- 解決cookies儲存中文報錯問題Cookie
- OkHttp3實現Cookies管理及持久化HTTPCookie持久化
- laravel session 與 php session配置LaravelSessionPHP
- session和v$session說明Session
- memcached-session-manager session共享Session
- SessionSession
- Python爬蟲進階之會話和CookiesPython爬蟲會話Cookie
- 【Lintcode】1230. Assign CookiesCookie
- c#向某網址Post資訊,並得到CookiesC#Cookie
- Session分散式共享 = Session + Redis + NginxSession分散式RedisNginx