Cookie和Seesion
参考
cookie和session的详解与区别 - 测试开发喵 - 博客园 (cnblogs.com)
Java之Cookie与Session - CoLoo - 博客园 (cnblogs.com)
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
为什么要使用会话跟踪呢?因为HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。为了让服务器能够区分不同的用户,从而针对不同的用户需求做出应答,Cookie/Session所扮演的角色就弥补了HTTP协议的不足。
Cookie
Cookie是跟踪用户会话方式,由服务器生成并保存在客户端浏览器上,实际上是一小段的文本信息。
Cookie 机制
常用方法
//新建一个cookie
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
response.addCookie(cookie); //响应给客户端cookie
Cookie[] cookies = req.getCookies(); //获得cookie数组
cookie.setMaxAge(24*60*60); //设置cookie有效期
cookie.getName() //获得cookie名字
cookie.getValue() //获得cookie的值
//删除Cookie
cookie.setMax(0);
response.addCookie(cookie);
Session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器的内存上。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。
Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
HttpSession session = request.getSession(); // 获取Session对象
session.setAttribute("loginTime", new Date()); // 设置Session中的属性
System.out.println("登录时间为:" +(Date)session.getAttribute("loginTime")); // 获取Session属性
常用方法
方法 | 作用 |
---|---|
req.getSession() | 获得一个session |
session.setAttribute(“name”, “Zh1z3ven”) | 设置属性,value部分可以是一个对象 |
session.getAttribute(“name”) | 获取属性 |
session.removeAttribute(“name”); | 删除属性 |
session.invalidate(); | 注销session |
session.getId() | 获取sessionid |
session.isNew() | 判断是否为新创建的session |
统一编码
解决请求/响应时的编码问题
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
注销方式
移除方法
HttpSession session = req.getSession();
session.removeAttribute("name");
session.invalidate();
在Web.xml
设置过期时间
<!--设置session配置-->
<session-config>
<!--设置session过期时间,以分钟为单位-->
<session-timeout>2</session-timeout>
</session-config>
两者区别
(1)数据存储位置不同,cookie数据存储的客户端、session存储在服务器
(2)数据存储类型不同:cookie为String,session为Object
(3)数据有效性时长不同:cookie可长期保存在客户端,session会话结束结束销毁
(4)数据存储用途不同:cookie存储公共数据,session存储私密数据。