欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中的Cookie和Session

程序员文章站 2024-02-28 19:16:52
...

Cookie:
Cookie其实就是使用了浏览器的数据存储技术,我们把需要浏览器存储的数据响应给浏览器,告诉浏览器这些数据需要存储起来。
Cookie的使用:

Cookie c=new Cookie(String key, String value);//创建Cookie对象并存储数据,键值对的方式存储
response.addCookie(c); //响应Cookie信息给客户端

如果没有设置Cookie的存储有效期,那么Cookie就会存储在浏览器的运行内存中,浏览器关闭了Cookie也就失效了

c.setMaxAge(3*24*3600);//设置Cookie的有效期,参数是Cookie存储的有效时间(以秒为单位)

设置好Cookie的存储有效期后,那么Cookie就会存储在客户端的硬盘中,在有效期内每次请求都会附带该信息,除非设置有效路径。
如果没有设置Cookie的使用有效路径的话,默认Cookie信息存储好之后,每次请求都会附带该信息

c.setPath(String uri);//设置Cookie的有效路径,参数是浏览器地址栏的uri

设置好Cookie的使用有效路径后,Cookie的使用有效路径就会得到限制,Cookie只有在请求有效路径的时候浏览器才会附带该信息。
Session:
Session 是依赖 Cookie 的服务器端的数据存储技术,用户第一次访问服务器时,服务器会创建一个Session对象给此用户,并将该Session对象的JSESSIONID使用Cookie存储到浏览器中,保证用户的其他请求能够获取到同一个Session对象,也保证了不同请求能够获取到相同的数据。注意:JSESSIONID使用Cookie存储在浏览器的运行内存中,浏览器关闭即失效。
Session的使用:

HttpSession hs = request.getSession();//创建Session对象

如果请求中拥有JSESSIONID,则返回其对应的Session对象,如果请求中没有JSESSIONID,则创建新的Session对象,并将其JSESSIONID作为从Cookie数据存储到浏览器内存中,如果Session对象是失效了,也会重新创建一个Session对象,并使用Cookie将其JSESSIONID存储在浏览器内存中。
如果没有设置Session的有效期的话,Session默认存储时间为 30分钟,30分钟内session对象没有被使用则会自动销毁,如果使用了则重新计时。

hs.setMaxInactiveInterval(3600);//设置Session有效期,参数是Session存储的有效时间(以秒为单位)

如果想要Session在有效时间没有结束时被销毁,则可以设置 Session强制销毁

hs.invalidate();//设置Session强制销毁

Session的存储

hs.setAttribute(String key,Object value);//Session存储数据,键值对的方式存储

获取Session中的数据

hs.getAttribute(String key);//获取Session中的数据,返回的数据类型为Object,所以如果使用String接收的话需要强制转换

如果存储和获取发生在不同的请求中时,存储要先于获取执行,如果获取 Session中不存在的数据则返回 null。
只要在JSESSIONID和Session对象不失效的情况下,用户的任意请求在处理时都能获取到同一个Session对象,也就是说在JSESSIONID和Session对象不失效的情况下Session对象的作用域为整个项目内。