了解Session

1、Session的工作原理及出现

      当我们用浏览器打开一个网页,用到的是HTTP协议,而这个协议它是无状态的,什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。但是这种无状态的的好处是快速。

      然而我们希望访问的两个页面或更多页面之间有关联,就比如我们要访问一个网站,当我们进入登录页面的时候是一个http请求,而登录之后又是一个http请求,而这两个请求都是无状态,两者之间没有关联,我们希望在登录之后登录页面中也能读取到已经登录了,但不推荐。

      前面讲过cookie的存储特点,我们知道cookie 是存在用户端,而且它本身存储的尺寸大小也有限,最关键是用户可以是可见的,并可以随意的修改,很不安全。那如何又要安全,又可以方便的全局读取信息呢?于是,这个时候,一种新的存储会话机制:session 诞生了。

2、Session作用

      从上面的描述来讲,它的作用就是在一次会话中解决2次HTTP的请求的关联,让它们产生联系,让2两个页面都能读取到找个这个全局的session信息。session信息存在于服务器端,所以也就很好的解决了安全问题。

3、标识会话JSESSIONID

      Session 既然是为了标识一次会话,那么此次会话就应该有一个唯一的标志,这个标志就是sessionId。


   每当一次请求到达服务器,如果开启了会话(访问了 session),服务器第一步会查看是否从客户端回传一个名为 JSESSION 的 cookie,如果没有则认为这是一次新的会话,会创建一个新的 session 对象,并用唯一的 sessionId 为此次会话做一个标志。如果有 JESSIONID 这个 cookie 回传,服务器则会根据 JSESSIONID 这个值去查看是否含有 id 为 JSESSION 值的 session 对象,如果没有则认为是一个新的会话,重新创建一个新的 session 对象,并标志此次会话;如果找到了相应的 session 对象,则认为是之前标志过的一次会话,返回该 session 对象,数据达到共享。


  这里提到一个叫做 JSESSION 的 cookie,这是一个比较特殊的 cookie,当用户请求服务器时,如果访问了 session,则服务器会创建一个名为 JSESSION,值为获取到的 session(无论是获取到的还是新创建的)的 sessionId 的 cookie 对象,并添加到 response 对象中,响应给客户端,有效时间为关闭浏览器。


  所以 Session 的底层依赖 Cookie 来实现。

4、Session作为域对象

       Session 用来表示一次会话,在一次会话中数据是可以共享的

域对象三个数据操作方法:
    setAttribute(String key,Object value)   向域对象中添加数据
    getAttribute(String key)                从域对象中获取数据
    removeAttribute(String key)             从域对象中移除数据
 

        数据存储在 session 域对象中,当 session 对象不存在了,或者是两个不同的 session 对 象时,数据也就不能共享了

5、   session的 创建:由服务器创建和管理的

6、获取session的方式

// 获取Session对象
HttpSession session = request.getSession();

7、session的销毁

a、服务器默认为30分钟不活动就销毁session,当用户访问服务器的时候相当于活动时间,会重新计时。

b、自定义最大不活动时间,单位为秒

// 设置最大不活动时间  单位为s
session.setMaxInactiveInterval(10);

c、立即销毁

session.invalidate();

    获取session对象然后立即销毁

request.getSession().invalidate();

d、关闭浏览器

      当我们关闭浏览器时,JSESSIONID会被销毁,从而导致session也会失效,但是服务器中被销毁的JSESSIONID对应的session对象还在,需要经过默认时间才会被销毁。

e、关闭服务器

    正常关闭:服务器会将session序列化到本地磁盘,(Tomcat目录下的work下会产生一个SESSIONS.ser)

                     存在session中的对象的实体类需要实现序列化接口,implements Serializable

 非正常关闭:服务器中的所有session对象都会被销毁

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值