您的位置:首页 > 其它

Session && Cookie

2016-01-25 10:34 267 查看
会话:为了一次会话中的多次请求之间,共享数据。客户端访问服务器时,会话建立,一次会话中,包含了多次请求,和多次响应,直到有任意一方断开连接,会话终止。

客户端会话: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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: