#Cookie與Session ##會話使用web
使用場景瀏覽器
原理安全
##Cookie與Session服務器
#Cookie ##Cookie定義 某些網站爲了辨別用戶身份,存儲在用戶本地終端上的數據cookie
##Cookie工做流程 ###第一次訪問session
###再次訪問post
##Cookie生命週期網站
##Cookie的缺陷加密
##Cookie實例 請求頁面code
<form method="post" action="user/specify"> <p><input type="text" name="userName" value="" placeholder="username"></p> <p><input type="password" name="userPassword" value="" placeholder="password"></p> <p class="submit"><input type="submit" name="commit" value="submit"></p> </form>
UserServlet
注意:咱們在response對象中設置Cookie,示例中代碼問題,咱們應當先判斷request是否有Cookie,在給response添加cookie內容。
//Cookie初始化 Cookie userNameCookie = new Cookie("userName", userName); Cookie pwdCookie = new Cookie("pwd", userPassword); //過時時間 userNameCookie.setMaxAge(10 * 60); pwdCookie.setMaxAge(10 * 60); response.addCookie(userNameCookie); response.addCookie(pwdCookie); Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("userName")) { userName = cookie.getValue(); } if (cookie.getName().equals("pwd")) { userPassword = cookie.getValue(); } } }
咱們在第一次請求輸入用戶名密碼,關閉瀏覽器再次打開頁面,並無輸入用戶名密碼,也可以看到用戶名密碼信息內容。這是由於咱們在第一次請求時建立了Cookie對象,在第二次請求的時候,瀏覽器把Cookie發送給了服務器,服務器知道是這個用戶,實現自動登陸。
經過Chrome查看Cookie對象
#Session ##Session特色
保存在服務端
HttpSession
用來保存用戶的一些數據內容
狀態保存 ##Session工做原理
1 瀏覽器發送HTTP請求到服務器端
2 服務端會根據服務器請求,生成對應的Session對象,並給這個Session對象附上惟一的編號,服務器端把須要的數據記錄到Session對象
3 服務器端進行其餘邏輯處理,而後把Session的惟一編號放到Cookie中
4 服務器返回HTTP響應給瀏覽器
5 瀏覽器端會把帶有這個Session ID的Cookie記錄在瀏覽器本地
當下一次瀏覽器發送HTTP請求時,會把帶有Session ID的Cookie發送給服務器
服務器獲取帶有Session ID的Cookie,取出對應的Session ID,根據Session ID找到對應的Session對象
當服務器辨別用戶以後,進行HTTP響應
##Session生命週期
setMaxInactiveInterval
設置有效期invalidate
接口使用Session失效###Session生命週期設置優先級 經過setMaxInactiveInterval
接口設置有效期的優先級大於經過部署描述符配置的Session有效期
##Session實例 ###Session實例演示 在Servlet
HttpSession session = request.getSession(); session.setAttribute("username",userName); String name = (String) session.getAttribute("userName");
再次登陸能夠在輸出打印到
second login: 123
打開Chrome開發者界面,查看SessionID
###Session過時 ####設置Session過時時間
//設置當前會話的失效時間,不是web服務。單位秒 session.setMaxInactiveInterval(1000);
####主動Session失效
session.invalidate();
##經過部署描述符(web.xml)設置session過時時間 web.xml
<session-config> <session-timeout>5</session-timeout> </session-config>
這裏配置的是分鐘
#Cookie&Session總結