会话:为了一次会话中的多次请求之间,共享数据。客户端访问服务器时,会话建立,一次会话中,包含了多次请求,和多次响应,直到有任意一方断开连接,会话终止。
客户端会话:Cookie 用户名记住
方便,但是数据不安全
服务器发送响应头:set-cookie: a=3,客户端收到后,保存a=3
当客户端再次请求服务器时,通过cookie :a=3 ,服务器就可以得到共享的数据。
1,Java创建Cookie(服务器):Serlet创建Cookie
Cookie c = new Cookie("msg","Hello,cookie");
c.setMaxAge(单位 是秒);//设置存活时间
2,发送Cookie(服务器)
response.addCookie(c);
3,获取Cookie(服务器)
获取所有Cookie
Cookie[] cs = request.getCookies();
if(cs != null){
for(Cookie c : cs){
string name = c.getname();
if("msg".equals(name)){
c.getValue();
}
}
}
//浏览器不关,Cookie不消失
Cookie默认存在浏览器的内存中,实现持久化:所以一般将Cookie存储到客户端硬盘上,设置存活时间:setMaxAge(int second)
Cookie中存放中文问题: URLEncode编码(先根据UTF-8转成二进制,然后每4位转成16进制,每两个16进制数中间用%隔开)URLEncoder.encode(str,"utf-8")
解码:URLDecoder.decode(encode,"utf-8");
服务端会话:Session 验证码 购物车
不方便,数据安全
服务器有很多的session
服务器响应通过set-cookie:jsessionid=XXX,将session对象发送给客户端,客户端存 jsessionid=XXX,下次请求时,通过cookie:jsessionid=xxx给服务器
Session依赖于Cookie存在:服务器接受到客户端请求,客户端想在服务器共享数据
服务器创建Session对象,将数据存储到session对象中,后将session对象的id通过set-cookie将jsessionid发送给客户端
客户端存储jsessionid,下次请求时,通过cookie携带jsessionid,服务器通过jsession获取存储的信息
实现技术:
1,获取session:通过request.getSession();
Session细节:
1,服务器不关闭,客户端关闭了,两次session不一样。
2,服务器关闭,客户端不关闭,两次session不一样,因为内存释放了。为了解决这个问题:session的钝化:当服务器下常关闭时,会将session写入服务器硬盘上
session的活化:当服务器启动时,会将session文件还原
3,session的创建和销毁:
创建:第一次获取session时,创建。。
销毁:1,服务器关闭;2,session超时,,web.xml下配置了session-timeout..自己项目 下的web.xml文件配置;3,安全退出:手动销毁Session..调用
invalidate()方法。
4,如果客户端禁用Cookie,Sesssion如何工作?解决方案:URL重写:http://www.xxx.com./sfsf;jsessionid=xxx 方法:response.encodeURL(href);