关于web会话中的session过期时间的设置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于web会话中的session过期时间的设置
1、操作系统:
步骤:开始——〉管理⼯具——〉Internet信息服务(IIS)管理器——〉⽹站——〉默认⽹站——〉右键“属性”——〉主⽬录——〉配置——〉选项——〉启⽤会话状态——〉会话超时(在这⼉设置你要的超时时间,单位分钟)。
确定即可。
2、应⽤程序中Session过期时间的设置
在这样的Web应⽤中,Session是⽤来保存⽤户状态的常⽤⼿段,不过由于服务器内存空间是有限的,所以Session过期时间设置是很有必要的。
在中如何设置Session的过期时间呢,很简单,修改web.config配置。
具体修改⽅法如下,在web.config中进⾏如下配置
<system.web>
<sessionState mode="InProc" timeout="30"/>
</system.web>
在这⾥指的是Session过期时间为30分钟。
也就是说30分钟后如果当前⽤户没有操作,那么Session就会⾃动过期了。
3、在调⽤Session的cs页中,Load事件⾥⾯写以下
Session.Timeout = 30;
4、Store session in state service
<sessionState cookieless="false" timeout="480" mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;user id=sa;password=" />
看⼀下,看你的程序是⽤到了哪种设置⽅式,把时间改成你需要的时间就可以了。
在⼀般系统登录后,都会设置⼀个当前session失效的时间,以确保在⽤户没有使⽤系统⼀定时间后,⾃动退出登录,销毁session。
具体设置很简单:
在主页⾯或者公共页⾯中加⼊:session.setMaxInactiveInterval(900);
参数900单位是秒,即在没有活动15分钟后,session将失效。
这⾥要注意这个session设置的时间是根据服务器来计算的,⽽不是客户端。
所以如果是在调试程序,应该是修改服务器端时间来测试,⽽不是客户端。
在⼀般系统中,也可能需要在session失效后做⼀些操作,
(1)控制⽤户数,当session失效后,系统的⽤户数减少⼀个等,控制⽤户数在⼀定范围内,确保系统的性能。
(2)控制⼀个⽤户多次登录,当session有效时,如果相同⽤户登录,就提⽰已经登录了,当session失效后,就可以不⽤提⽰,直接登录了
那么如何在session失效后,进⾏⼀系列的操作呢?
这⾥就需要⽤到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执⾏监听器中定义好的程序,就可以了。
监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个⽅法
⾃⼰可以继承这个类,然后分别实现。
sessionCreated指在session创建时执⾏的⽅法
sessionDestroyed指在session失效时执⾏的⽅法
给⼀个简单的例⼦:
public class SessionListener implements HttpSessionListener{
public void sessionCreated(HttpSessionEvent event) {
HttpSession ses = event.getSession();
String id=ses.getId()+ses.getCreationTime();
erMap.put(id, Boolean.TRUE); //添加⽤户
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession ses = event.getSession();
String id=ses.getId()+ses.getCreationTime();
synchronized (this) {
ERNUM--; //⽤户数减⼀
erMap.remove(id); //从⽤户组中移除掉,⽤户组为⼀个map
}
}
}
然后只需要把这个监听器在web.xml中声明就可以了
例如:
<listener>
<listener-class>
com.summer.kernel.tools.SessionListener
</listener-class>
</listener>
补充:
具体设置很简单,⽅法有三种:
(1)在主页⾯或者公共页⾯中加⼊:session.setMaxInactiveInterval(900);
参数900单位是秒,即在没有活动15分钟后,session将失效。
设置为-1将永不关闭。
这⾥要注意这个session设置的时间是根据服务器来计算的,⽽不是客户端。
所以如果是在调试程序,应该是修改服务器端时间来测试,⽽不是客户端。
(2)也是⽐较通⽤的设置session失效时间的⽅法,就是在项⽬的web.xml中设置
<session-config>
<session-timeout>15</session-timeout>
</session-config>
这⾥的15也就是15分钟失效.
(3)直接在应⽤服务器中设置,如果是tomcat,可以在tomcat⽬录下conf/web.xml中
找到<session-config>元素,tomcat默认设置是30分钟,只要修改这个值就可以了。
需要注意的是如果上述三个地⽅如果都设置了,有个优先级的问题,从⾼到低:
(1)--?(2)---?(3)
session的过期时间计算是从当前session的最后⼀次请求开始的。
做⼀个过滤器,实现Filter接⼝,对指定路径下的请求进⾏session的失效验证,如失效则跳转到登录页⾯:
public class RequestFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
//在这⾥判断session是否已失效,如已失效则重定向到登录页⾯。
/*
User user = (User)request.getSession().getAttribute("user");
if(user == null) {
response.sendRedirect(request.getContextPath()+"/login.jsp");
return;
}
*/
}
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
}
在web.xml⾥配置过滤器:
<filter>
<filter-name>requestFilter</filter-name>
<filter-class>com.xxx.RequestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
⾄于你说的直接跳到登录页⾯,由于页⾯响应到达客户端浏览器后就已经与服务端断开连接并呈静态,必须要等到⽤户再次操作向服务端发起请求时才能执⾏。