Sussion机制
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:Visual Studio 2015 C#
作者: 李杨
撰写时间:2019-07-22
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
除了使用Cookie,web应用程序中还经常使用Session来记录客户端的状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比cookie简单一些,相应的也增加了服务器的存储压力。
下面我们就来说说Session的常用方法:
Session中包括各种各样的方法,使用起来要比Cookie方便的很多。Session的常用方法如下
void setAttribute(String attribute, Object value): 设置Session属性。Value参数可以为任何Java Object。通常为Java Bean。Value信息不宜过大。
String getAttribute(String attribute):返回Session属性。
Enumeration getAttributeNames():返回Session中存在的属性名
void removeAttribute(String attribute):移除Session属性。
String getId():返回Session的ID。该ID由服务器自动创建,不会重复。
long getCreationTime():返回Session的创建日期。返回类型为long,常被转化为Date类型,例如:Date createTime = new Date(session.getCreationTime())
long getLastAccessedTime():返回Session的最后活跃时间。返回类型为long
int getMaxInactiveInterval():返回Session的超时时间。单位为秒。超过该时间没有访问,服务器认为该Session失效。
void setMaxInactiveInterval(int second):设置Session的超时时间。单位为秒。
void putValue(String attribute, Object value):不推荐的方法。已经被setAttribute(String attribute, Object Value)替代。
Object getValue(String attribute):不被推荐的方法。已经被getAttribute(String attr)替代。
boolean isNew(): 返回该Session是否是新创建的。
void invalidate():使该Session失效。
Tomcat中Session的默认超时时间为20分钟。通过setMaxInactiveInterval(int seconds)修改超时时间。可以修改web.xml改变Session的默认超时时间。例如修改为60分钟:
<session-config>
<session-timeout>60</session-timeout> <!-- 单位:分钟 -->
</session-config>
注意:<session-timeout>参数的单位为分钟,而setMaxInactiveInterval(int s)单位为秒。
还有session对服务器的要求,虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。
Cookie为服务器自动生成的,它的maxAge属性一般为–1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。
因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。
而且注意:新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在链接上右击,在弹出的快捷菜单中选择“在新窗口中打开”时,子窗口便可以访问父窗口的Session。
如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。