Sussion机制

本文介绍了Session在Web应用程序中的作用,它是一种记录客户端状态的服务器端机制,相对Cookie更简单但增加服务器存储压力。文章详细阐述了Session的常用方法,如设置、获取和移除属性,以及检查Session状态和设置超时时间。此外,还提到了Session依赖于Cookie的识别机制,并讨论了在Cookie禁用或不支持的情况下如何通过URL地址重写来实现Session跟踪。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                            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 BeanValue信息不宜过大。

 

String getAttribute(String attribute):返回Session属性。

 

Enumeration getAttributeNames():返回Session中存在的属性名

 

void removeAttribute(String attribute):移除Session属性。

 

String getId():返回SessionID。该ID由服务器自动创建,不会重复。

 

long getCreationTime():返回Session的创建日期。返回类型为long,常被转化为Date类型,例如:Date createTime = new Datesession.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失效。

 

TomcatSession的默认超时时间为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连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONIDCookie,它的值为该Sessionid(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。

Cookie为服务器自动生成的,它的maxAge属性一般为–1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。

因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session

 

而且注意:新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在链接上右击,在弹出的快捷菜单中选择在新窗口中打开时,子窗口便可以访问父窗口的Session

如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持CookieJava Web提供了另一种解决方案:URL地址重写。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值