Cookie & Session

会话技术--Cookie & Session


写在前面

我们都知道HTTP协议是无状态的,也就是说其对事务的处理是没有记忆能力的,这种无状态的特性一方面缓解了服务器的压力,但另一方面每次请求都会传输大量的重复信息,所以在一定程度上这种无状态的特性阻碍了动态交互的Web应用的实现。而Session和Cookie这两种用于保持HTTP协议连接状态的技术就在这样的背景下应运而生了。


Session技术

所谓Session指的是会话控制,Session会话在用户访问时建立,在关闭浏览器的时候断开(并不是在关闭页面时断开)。Session技术为客户端与服务器端保持状态提供解绝方案。与Cookie不同的是,Session是保存在服务器中的,当客户端访问服务器时,服务器根据需要产生Session并将会话ID发送给客户端,并且在发送之前服务器会检查客户端的请求中是否已包含有会话ID,如果已经包含有一个会话ID,说明此前已经为客户端创建过一个Session,此时服务器会利用客户端发送的请求中的会话ID检索相应的Session。会话ID会被保存在浏览器的内存中,如果浏览器关闭,会话ID也将被清除掉。


创建Session

1
2
3
4
5
6
7
// 获取Session对象,服务器会先检测客户端的请求中是否包含JSESSIONID(即会话ID),如果有则不再创建新的Session对象,否则创建一个新的Session对象并返回
HttpSession session = request.getSession();
// 获取Session ID(JSESSIONID)
String id = session.getId();
// Session本质上也是一个域对象,因此可以使用setAttribute() || getAttribute() || remoteAttribute()这三个方法
session.setAttribute("name", "Tom");
response.getWriter().write("JSESSIONID: " + id);

Session的生命周期

创建:第一次执行request.getSession()时创建

销毁:1、服务器关闭,包括非正常关闭;2、session过期(默认30分钟),从不操作服务器资源开始计算;3、手动销毁,session.invalidate()


JSESSIONID持久化

为什么要设置JSESSIONID持久化?原因很简单:Session技术是借助Cookie来存储JSESSIONID的,所以当浏览器被关闭时,JSESSIONID将会被清除,此时客户端再去访问服务器时,由于没有JSESSIONID,所以服务器会为客户端创建一个新的session,那么上一次客户端访问时服务器开辟的内存空间中的数据就无法取出。典型的例子就是购物车

1
2
3
4
// JESSIOINID持久化
Cookie cookie = new Cookie("JSESSIONID", id) ;
cookie.setPath("/MyTomcat05");
cookie.setMaxAge(60*10);

Cookie技术

Cookie简介

首先,Cookie指的并不是”曲奇饼”,而是指网站为了辨别用户身份而存储在用户本地终端上的数据,而且通常都会被加密。由网景公司的前雇员Lou Montulli在1993年3月的发明。Cookie由服务器产生,发送给客户端(浏览器),客户端会将Cookie中的数据保存到某个目录下的文本文件中,如果浏览器设置了启用Cookie,那么在下一次请求访问服务器(同一网站)资源的时候会将Cookie发送给服务器。Cookie中的key和value由服务器自己定义,例如:

创建一个Cookie并发送给客户端
1
2
3
4
String key = "name"
String value = "Alice"
Cookie cookie = new Cookie(key,value) ;
response.addCookie(cookie) ;

cookie1
cookie2

注意: Cookie中不能存储中文。


Cookie的主要作用

1、判断注册用户是否已经登录网站

2、事物处理


Cookie的生命周期

Cookie在服务器创建时可以指定一个到期(Expire)的时间,如果服务器在创建Cookie对象时,没有设置到期时间,那么Cookie的默认到期时间与Session 会话的时间一致,也就是说会话关闭时,Cookie也就随之消失。

1
2
3
4
5
// 2.设置持久化时间,参数为秒,如果不设置,默认情况下Cookie的生命周期为Session会话的生命周期
// 如果希望删除Cookie信息,只需要将Cookie的到期时间设置为0即可,如:cookie.setMaxAge(0);
cookie.setMaxAge(60);
// 3.设置Cookie的携带路径,即访问哪些路径下的资源需要携带Cookie信息
cookie.setPath("/MyTomcat05/cookieServlet");

通常情况下,Cookie信息可以保持登录状态一段时间,这在某种程度上可以提升用户体验,用户不必频繁地输入账户密码,但是也存在一定的安全隐患,因此在会话结束时,应该及时清除Cookie信息。


Session与Cookie的区别

Session Cookie
区别 Session机制是客户端与服务器之间保持状态的解决方案 Cookie机制是客户端保持状态的解决方案
联系 Session机制需要借助Cookie机制来在客户端保存会话ID

如果您觉得我的文章对您有帮助,请随意赞赏,您的支持将鼓励我继续创作!
0%