#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总结