关于Session生命周期和使用HttpSessionListener中遇到的问题

    继续重复昨天的内容,昨天提到 Session 其创建并不是当我们客户端访问服务器时就产生的,而是我们在如Servlet类中有类似HttpServletRequest.getSession()时才会创建。而其结束时间更不是我们关闭客户端时产生。注:我们关闭客户端只是使客户端内存中的Session cookie失效,而不是服务器端的Session对象失效。其失效时间是我们在如使用Tomcat等时的配置,或者程序中显示调用invalidate()使其失效。

   关于其创建时期我们都没有太大的问题,可是关于其失效时间今天简直是把我郁闷惨了。

   今天做简单的类似晚上购物系统,其基本功能是实现登录、注册、商品显示、用户选择并把商品加入购物车。

   问题就出在对购物车信息的保存,当时我们同学提出了很多解决方案,现在想起来其实当时提出的保存在Cookie实现其实是最可行和简单的。我们后来使用的方案是为了解决客户换浏览器或者机子登录时由于Cookie丢失造成客户购物车信息丢失的问题,我们的思路是在用户登录会话过程中,我们知道Session对象作用域是整个会话过程,我们把所有购物车信息保存在Session对象中,然后存入数据库。当时考虑我们不在用户每次点加入购物车时向数据库添加数据,这样会加大数据库负担。而我们今天正好学了Serlet事件监听器,所以数据向数据库写入的时机就是该次对话结束时触发sessionDestroyed(HttpSessionEvent arg0)时写入数据库。

   问题来了,等我辛辛苦苦把相关方法实现之后。跑起服务器测试之后郁闷了,因为Session对象失效时间的不可控(相对,虽然可以配置。)但是我们期望的效果是用户关闭会话之后就能保存数据,不然用户突然关闭之后又访问呢?这时因为数据未存,导致用户登录后购物车为空。哎~~~~~~~~~~郁闷中,明天问问老师怎么解决了。

你可能感兴趣的:(tomcat,数据库,session,servlet,浏览器,服务器)