【Web】关于Session过期/失效的理解

一直好奇关于Session的过期,一种说法是关闭浏览器即Session失效,另一种说法是可以设置Session的过期时间,时间到了自动过期。

这两种说法到底是怎么回事?Session过期跟Cookie过期又有什么关系?

网上搜了几篇相关文章:

通过阅读上面几篇文章后,对Session过期有了新的理解,简单总结一下:

  • Cookie保存在客户端浏览器,Session保存在服务器。
  • Cookie可以设置过期时间。
    • 如果Cookie不包含到期日期,则可视为会话Cookie(Session Cookie)。会话Cookie存储在客户端的内存(浏览器占用的内存)中,决不会写入磁盘。当浏览器关闭时,Cookie将从此永久丢失。
    • 如果Cookie包含到期日期,则可视为持久性Cookie,存储在客户端的磁盘中。在指定的到期日期,Cookie将从磁盘中删除。
  • 客户端请求服务端时,如果客户端的Cookie中没有当前会话的Session Id,则服务端会新分配一个Session,并将与该Session对应的Session Id存到Cookie中发回给客户端浏览器。
  • 由于大部分的网站在发回Session Id时使用了会话Cookie(即没有设置过期时间),导致该Cookie存在客户端内存中,所以关闭浏览器即丢失了Session Id信息,再次访问服务端时才找不到对应的Session,于是才有了“关闭浏览器则Session过期”的说法!
  • 服务端在保存Session时也可以设置该Session的过期时间,服务端的Web服务容器通常也有一个默认的过期时间。若访问服务器后,保持不关闭浏览器一段时间,超过Session过期时间后再次访问,会发现依然Session过期找不到了(比如表现为跳转到登录页面),则是“没有关浏览器但Session过期了”!
  • 当(存放着Session Id的)Cookie和Session中两者有任一过期,即宣告会话过期。

另外,关于Java中设置Session的过期,参考:http://www.cnblogs.com/diewufeixian/p/4221747.html

总结一下方法有三:

  • 在web容器中(如Tomcat)修改配置文件
  • 在工程的web.xml中设置
  • 创建Session后通过java代码设置
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
F5是一种负载均衡器,可能会对应用程序的Session造成影响。在配置F5时,您需要确保它正确地配置了Session保持策略。如果Session保持策略设置不正确,可能会导致Session丢失或过期。 如果您使用的是SSM框架,可以尝试在您的应用程序中添加以下配置: 在web.xml中添加以下配置,启用Session保持: ``` <session-config> <session-timeout>30</session-timeout> // 设置Session过期时间 <cookie-config> <http-only>true</http-only> </cookie-config> </session-config> ``` 在Spring配置文件中添加以下配置,启用Session保持: ``` <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="packagesToScan" value="com.example"/> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.cache.use_second_level_cache">false</prop> <prop key="hibernate.cache.use_query_cache">false</prop> <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</prop> <prop key="hibernate.current_session_context_class">thread</prop> <prop key="hibernate.enable_lazy_load_no_trans">true</prop> <prop key="hibernate.connection.release_mode">on_close</prop> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="sessionInterceptor" class="com.example.SessionInterceptor"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.example.SessionInterceptor"/> </mvc:interceptor> </mvc:interceptors> ``` 其中,SessionInterceptor是一个自定义的拦截器,用于处理Session保持。 如果您已经正确配置了Session保持策略,但仍然遇到Session过期的问题,您可以考虑增加Session过期时间或者使用Cookie来保存Session。同时,您还可以检查F5的配置是否正确,并确保所有服务器上的应用程序都使用相同的Session保持策略。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值