Session的生命周期

一、为什么要使用session?

        在我们去访问某个网站时,像淘宝和博客之类的等等,它都需要登录才可以去购买东西或者更近一步的去访问更多的数据,在没学习session之前,由于http协议是无状态的,浏览器发出去的每一次请求/响应对方都会认为是一个新的请求,这就导致了很多问题,比如购物车加入商品,下次再去访问浏览器会认为是一个新的请求,而数据丢失等等,怎么解决http无状态的问题,使用它变得有记忆呢?——会话技术

二、什么是session对象?

  • 会话跟踪机制: 一种服务器端的机制
  • 用户第一次请求服务器时创建会话,并返回sessionId
  • 后续请求携带该sessionId,携带同一sessionId的请求被认为处于同一个会话中。

补充:

   使用session内置对象描述一次会话,一次会话包含多次请求和响应。

三、session对象的工作原理

1. 没使用session的情景:

        比如,当用户去访问一个网站,该网站需要登录才可以进行一系列操作,但是用户直接在输入栏上输入了该网站首页的地址,照样可以进去,造成了一个弊端: (用户没有登录就可以直接访问)

2. 使用session的情景:    

       使用session会话技术,当去请求一个login登录页面,服务器会进行判断该请求是否携带了一个sessionId或该sessionId和服务器里的是否匹配。如果没有携带,服务器就会创建一个session,并响应login页面,当用户按下登录键,浏览器会再次发送do_login请求,(该页面用于验证登录是否正确),如果正确,在该会话中设置一个标识属性,如: userName用户名(用于下次访问时判断是否已经登录),跳转到index首页。如果该用户没有登录就去访问首页,那么此时session里的userName属性就会为空,则没有登录,跳转到login页面。

注:  示例图: login.jsp 登录页面、do_login验证登录页面、index.jsp首页。

四、session对象的生命周期

  1. 每个session对象都与一个浏览器窗口对应(不同版本会有差别)
  2. 重新开启一个浏览器窗口,可以重新创建一个session对象(但不代表以前的对象过期了,它其实还在)。
  3. 在一个浏览器窗口,重新打开一个子窗口,还是处于同一个会话中。
  4. 使用setMaxInactivelnterval(秒) 可以设置会话的非活动时间(即页面不活动时它的有限时间)。
  5. invalidate() 销毁会话
  6. 页面长时间不操作的话,默认有效时间是30分钟。

五、session对象常用方法

方法名称说明
String getId()        获取sessionId
long getCreationTime()返回session对象创建的时间,以毫秒为单位
void setMaxInactiveInterval(int interval)设定session的非活动时间,以秒为单位
int getMaxInactiveInterval()获取session的有效非活动时间,以秒为单位
void invalidate()设置session对象失效
void setAttribute(String key,Object value)以key/value的形式将对象保存到session中
Object getAttribute(String key ,Object value)通过key获取session中保存的对象
void  removeAtribute(String key)从session中删除属性

fejfiefjefjfjdjdj

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值