Session那点事
前言:在Web开发中,服务器可以为每个用户创建一个会话对象(Session对象),注意:一个浏览器独占一个Session对象(默认情况下)。因此,在需要保存数据时,服务器程序可以把用户数据写到浏览器独占的Session中,当用户用浏览器访问其他程序时,其他程序可以从用户的Session中取出数据为用户服务。
一.Session实现原理
Session是基于Cooike实现的,服务器通过Cookie形式回写给用户的SessionId,值得一提的是,这个Cookie是没有有效期的,只有浏览器进程结束,这个Cookie才消失。
通过一张图来说明工作原理。
二. Session的生和死
大家都知道Session这个对象时服务器创建的,那服务器在什么时候创建这个对象呢?当执行 .getSession 这句代码的时候,服务器就会创建一个Session对象。
那Session对象在什么时候消亡?默认情况下,不使用Session对象30分钟后服务器自动摧毁该对象。我们也可以在web.xml文件中配置<session-timeout>这个标签来设定被摧毁时间,也可以执行session.invalidate()这句代码摧毁Session对象。
最后说个小细节,如果用户禁用Cookie,那么浏览器就会收不到服务器回写的SessionId,这时候服务器该怎么解决呢?
可以调用response.encodeURL(url)这个方法重写URL,在超链接后面加上SessionId回写给浏览器。