Java-Session与Cookie及详解

白衣少年
2022-11-08 / 0 评论 / 30 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年11月08日,已超过569天没有更新,若内容或图片失效,请留言反馈。

Session是什么

"会话控制",Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个会话中一直存在下去。当用户请求来自应用程序的Web页面时,如果该用户还没有会话,则Web服务器将自动创建一个Session对象。当会话过期或者被放弃后,服务器将终止该会话。 注意:会话状态只在支持Cookie的浏览器中保存

Cookie是什么

Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息。

例如,如果在用户请求站点中的页面时应用程序发送给该用户的不仅仅是一个页面,还有一个包含日期和时间的 Cookie,用户的浏览器在获得页面的同时还获得了该 Cookie,并将它存储在用户硬盘上的某个文件夹中。

Session与Cookie的区别

  1. Session :是针对每个用户的,只有客户端才能访问,程序为该客户添加一个 session。session中主要保存用户的登录信息、操作信息等等。此 session将在用户访问结束后自动消失(如果也是超时)。
  2. Cookie :是针对每个网站的信息,每个网站只能对应一个,其他网站无法访问,这个文件保存在客户端,每次您拨打相应网站,浏览器都会查找该网站的 cookies,如果有,则会将该文件发送出去。cookies文件的内容大致上包括了诸如用户名、密码、设置等信息。
  3. 存储数据的大小不同,一个 cookie存储的数据不超过3 K; session存储在服务器上可以任意存储数据,但是,当 session存储数据太多时,服务器可选择进行清理。
  4. 有效期不同 :通过设置 Cookie的属性,开发 Cookie能够长期有效。而Session依赖于一个名为 JSESSIONID的 cookies,而 CookiJSESSIONID的过期时间默认为-1,只需关闭该窗口,因此 Session将无法达到长期有效的效果。

session与cookie的区别.png

Session是何时创建的

当浏览器第一次访问服务器一个页面之后由服务器创建的,并使用特殊算法算出一个Session的ID(JSESSIONID),以Cookie的方式保存在客户端中,而这个JSESSIONID在随后的请求中会被用来获得已经创建的Session;在Session被创建之后,就可以调用Session的相关方法往Session中增加内容了,而这些内容只会保存在服务器中,响应给客户端的只有JSESSIONID;当客户端再次发送请求的时候,会将这个JSESSIONID带上,服务器接收到请求之后就会依据JSESSIONID找到响应的Session。
session何时创建.png
浏览器第一次访问服务器一个页面后创建JSESSIONID其实是做了这些事情

Cookie cookie=new Cookie("JSESSIONID",特殊算法算出来的Session ID);
response.addCookie(cookie);

Session方法的使用

HttpSession session=request.getSession();
boolean isNew();    //判断该Session对象是不是新创建的
String getId();     //获取Session对象的JSESSIONID
void setAttribute(String var1, Object var2);    //保存数据到Session对象中
Object getAttribute(String var1);       //从Session对象中取数据
void removeAttribute(String var1);      //移除Session对象中的键值对
void invalidate();      //注销Session,注销之后服务器会生成一个新的JSESSIONID
void setMaxInactiveInterval(int var1);      //设置Session失效时间的秒数
int getMaxInactiveInterval();       //获取Session失效时间的秒数
HttpSession session = req.getSession(true);    
如果该客户端在此服务器中存在Session,就返回这个Session;如果不存在,就创建一个新的Session返回
HttpSession session = req.getSession(false); 
如果该客户端在此服务器中存在Session,就返回这个Session;如果不存在,就返回一个null

Cookie的使用

Cookie创建

document.cookie = 'Authentication=' + response.data;
document.cookie = 'Platform=manageBackend';

表示创建了名为 Authentication ,内容为 response.data 的Cookie,名为 Platform ,内容为 manageBackend的Cookie

Cookie的删除

// 给cookie设置的过期时间
const date = new Date();
date.setTime(date.getTime() - 10000);

// 删除cookie信息
document.cookie = `Platform=; expires=${date['toGMTString']()};path=${cookiePath}; domain=${document.domain}`;

Cookie 不仅仅有 keyvalue 属性,还有域( domain )、过期时间( expires )、路径( path )等属性。其中,不同户域、不同的路径下可以存相同名字的 cookie 。所以删除 cookie 需要写上他的所有属性,这样才能成功删除 cookie

3

打赏

评论 (0)

OwO
取消