Cookie、Session
1.会话技术-Cookie
Cookie实现原理
一次会话:从浏览器打开第一访问服务器开始直到一方关闭(通常是浏览器关闭)结束。
Cookie客户端,但是Cookie是在服务器端创建的,通过响应头的形式发送给浏览器保存;当浏览器下一次访问服务器的时候会自动带着这个Cookie过来,这个时候在服务器端又可以获取这个Cookie存值、取值;
Cookie cookie=new Cookie(String name,String value)//创建Cookie
response.addCookie(cookie);//发送给浏览器保存
Cookie[] cookies=reqeust.getCookies();//获取浏览器发送过来的所有Cookie
String name=cookie.getName() ;//获取Cookie的名称
String value=cookie.getValue() ;//获取Cookie的名称
Cookie使用细节
1、设置有效时长:
cookie.setMaxAge(int second);//0表示删除Cookie,负数表示默认有效时长:一次会话
2、保存中文:
//保存之前对中文进行url编码
String value = URLEncoder.encode("你好", "utf-8"); // %4E%A8%6D...
Cookie cookie = new Cookie("msg",value);
//获取Cookie值之后使用URL解码
String value=cookie.getValue();
value=URLDecoder.decode(value,"utf-8");
3、Cookie使用的注意事项
a.Cookie存到客户端的
b.Cookie有存活时间
c.Cookie有存储数据限制大小
d.Cookie只能保存字符串类型不敏感的数据。使用场景例如:保存用户对网站的设置信息;记录上一次访问时间;用户的浏览记录;记住用户名。
4、Cookie共享问题
setPath("/")对整个服务器的项目都共享Cookie , 默认情况下是只对自己的项目共享Cookie
2.会话技术-session
HttpSession实现原理
session属于服务端技术,依赖于Cookie实现,在服务器端第一次调用request.getSession()方法创建session,同时会产生一个随机的唯一标识id,服务器会将这个id保存在Cookie中,通过Cookie将这个id发送给客户端保存。当浏览器再次访问服务器时,会自动将这个保存sessionid的Cookie发送过,我们通过request.getSession()就自动通过sessionid获取到之前的session,进行存值、取值等操作。
//1.获取session
HttpSession session=request.getSession();
//2.存值、取值、移除值
session.setAttribute(String name,Object value)
Object value=session.getAttribute(String name)
session.removeAttribute(String name)
//销毁session
session.invalidate();
HttpSession使用细节
1、浏览器关闭了,服务器没有关闭,这个时候有用Cookie消失了,就无法再获取之前的session;
解决:将保存sessionid的Cookie序列话(设置有效时长)
Cookie cookie=new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60 x 60 x 24)
response.addCookie(cookie)
2、浏览器没有关闭,服务器(正常)关闭了,这个时候服务器会将session序列号到硬盘中,当我们启动服务器后,服务器有自动将session反序列化到内存中;
Session默认的失效时间是30分钟.可以在web.xml中配置