【Cookie属性和Session属性】

Cookie属性

cookie是服务器写给客户端响应文本中的一小段头属性,会存到浏览器的缓存或客户的一个小文本文件。默认情况下,客户端浏览器向给自己写cookie的域发请求时,cookie(小段文本)会跟着请求上传到服务器

Servlet中向客户端写Cookie的代码

//cookie是服务写到客户端的一小段文本,是服务存到客户端的数据
Cookie c1 = new Cookie("name","zhangsan");//创建Cookie对象
response.addCookie(c1);//写入Cookie
Cookie c2 = new Cookie("sex","M");//创建Cookie对象
Cookie c3 = new Cookie("password","1111");//创建Cookie对象
response.addCookie(c2);//写入Cookie
response.addCookie(c3);//写入Cookie

上面的addCookie方法生成的Http响应文本中的内容如下图

上图的set-cookie头属性的值,会被浏览器存在缓存或特定位置的文本文件中
在这里插入图片描述
当我们向同一域发送请求时,之前写的Cookiet会跟着请求上传
在这里插入图片描述
上图显示的是请求头中的内容,可以看到cookie头属性中有所有我们曾经写给客户端的cookie的内容,而服务器端Servlet中取出这些cookie的代码如下

Cookie[] cs = request.getCookies();//取出所有上传的cookie对象
for(Cookie c : cs){//迭代
    System.out.println(c.getName() + ":" + c.getValue());//输出cookie的名字和值
}

在这里插入图片描述
cookie直译是小甜饼,但我不懂这小段文本和小甜饼有什么关系。。

cookie,url重写,隐藏域都是服务把数据存储在客户端技术。但Cookie有什么不同呢?

1.7.2.1.Cookie的属性

cookie可以设置属性,最重要的属性有

1.maxAge Cookie的失效时间,以秒为单位,默认cookie是存在浏览器缓存里,关闭浏览器,cookie自然消失,设置maxAge属性后,浏览器会把cookie存储为一个文本文件,在设置的失效时间前,一直有效

Cookie c1 = new Cookie("name","zhangsan");
c1.setMaxAge(2 * 24 * 60 * 60);//这个代码设置了cookie的失效时间为两天

可以看到maxAge导致响应中cookie增加了很多失效时间的属性

2.path 和secure属性,这个两天属性path是设置cookie发送的路径的,cookie除了向默认域发送cookie,向path指定路径下的组件也会发送cookie,secure会在响应中添加一个secure属性

1.Session

session是服务器端的一个集合,可以存储任何东西。session最重要的特性,是可以识别客户。

1.1.Session的工作原理

当我们的Servlet需要使用Session时,执行下面的代码

HttpSession session = request.getSession();//取出session
session.setAttribute("goods1","Scoat");//session存数据
session.getAttribute("goods1");//session取数据

如果是第一次取session,服务器会创建一个session对象(session本身是一个map集合),并且存入服务器的session集合中以sessionId为标识键,也就是根据sessionId即可取到对应session的引用。同时使用sessionr Servlet还获得了一个sessionId,在响应时把这个sessionId以cookie的形式发给了客户端。如果客户访问其它同一域的Servlet,这个sessionId会跟着请求上传到服务器。那么如果请求的另一个Servlet也要使用session,会先检查有没有这个保存sessionId的Cookie,如果有则直接到session集合中取对应的session引用返回给要使用的Servlet,所以,只要客户端存在这个sessionId,不管请求哪个Servlet,都可以拿到同一个session。所以Session就可以给不同的请求存储数据。

1.2.Session过期

要保证session能够跨请求存储数据必须保证下面两个条件必须满足

1.客户浏览器不能关闭

因为session会给客户保存一个sessionId,这个id是作为临时cookie存在客户浏览器缓存当中,如果关闭浏览器,缓存就没了,sessionId自然也就消失了。重新打开浏览再请求,就是一个全新的请求,服务器会创建一个新的session,之前的session就没法用了。

2.请求不能超过session的过期时间

服务器的session如果始终没有使用,保留着就是浪费服务器的资源,所以服务器会定期检查session的最后访问时间,如果这个时间超出session设置的过期时间,服务器就会销毁这个session,那么客户端即使把sessionId又传上来,服务器也找不到它的session了,只会再重新创建一个新的session。

1.3.Session生命周期的操作方法

session.setMaxInactiveInterval(20 *  60);//设置session过期时间
session.invalidate();//销毁session的方法
session.getCreationTime();//获得session的创建时间
session.getLastAccessedTime();//获得session最后一次被使用的时间
发布了101 篇原创文章 · 获赞 47 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/TONGZONGE/article/details/99645883