- 浏览: 1112805 次
文章分类
- 全部博客 (379)
- S2SH (16)
- stuts2 (0)
- java语言 (81)
- JSP (17)
- <html>元素 (11)
- javaweb (4)
- web容器 (3)
- ext (23)
- javaScript (48)
- ant (1)
- liferay (1)
- sql (9)
- css (42)
- 浏览器设置 (3)
- office_world (1)
- eclipse (4)
- 其它 (28)
- 操作系统 (5)
- android (6)
- Struts2 (11)
- RegEx (3)
- mysql (5)
- BigDATA (1)
- Node.js (1)
- Algorithm (10)
- Apache Spark (1)
- 数据库 (5)
- linux (2)
- git (1)
- Adobe (3)
- java语言,WebSocket (1)
- Maven (3)
- SHELL (1)
- XML (2)
- 数学 (2)
- Python (2)
- Java_mysql (1)
- ReactJS (6)
- 养生 (4)
- Docker (1)
- Protocols (3)
- java8 (2)
- 书籍 (1)
- Gradle (2)
- AngularJS (5)
- SpringMVC (2)
- SOAP (1)
- BootstrapCSS (1)
- HTTP协议 (1)
- OAuth2 (1)
最新评论
-
Lixh1986:
Java并发编程:自己动手写一把可重入锁https://blo ...
Java之多线程之Lock与Condition -
Lixh1986:
http://win.51apps.com.cn/https: ...
temp -
ztwsl:
不错,支持很好
HttpServletRequest和ServletRequest的区别 -
guodongkai:
谢谢您能将知识精华汇编总结,让初学者们从原理中学会和提高。
javaScript之function定义 -
kangwen23:
谢谢了,顶顶
struts2中的ValueStack学习
session失效时间设置
session 在tomcat重启后一般也不会失效,
关闭浏览器后,session失效,但服务器端的session不会立刻销毁,
而是存活一个session生命周期。
首先需要理解一下几点:
1、Http是无状态的,即对于每一次请求都是一个全新的请求,服务器不保存上一次请求的信息
2、Session是保存在服务端的,为什么后续请求会读取到session?因为请求会包含一个sessionId,该值存储在cookie中,服务器通过这个sessionId找到对应的session
3、cookie是有过期时间的,规则如下:
Cookie的Max-Age决定了Cookie的有效期,单位为秒
0:Cookie立即作废(如果原先浏览器已经保存了该Cookie,那么可以通过设置Max-Age为0使其失效)
<0:默认,表示只在浏览器内存中存活,一旦浏览器关闭则Cookie销毁,浏览器的max-age默认为-1
>0: 将Cookie持久化到硬盘上,有效期由Max-Age决定
综上所述:
sessionId是一个cookie,max-age默认为-1,即关闭浏览器后sessionId就会清空,
sessionId(cookie)清空后,自然就无法找到对应的session,所以session就失效了。
在一般系统中,也可能需要在session失效后做一些操作:
(1)控制用户数,当session失效后,系统的用户数减少一个等,控制用户数在一定范围内,确保系统的性能。
(2)控制一个用户多次登录,当session有效时,如果相同用户登录,就提示已经登录了,当session失效后,就可以不用提示,直接登录了。
那么如何在session失效后,进行一系列的操作呢?
这里就需要用到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序就可以了。
监听器类为: HttpSessionListener 类,有 sessionCreated 和sessionDestroyed 两个方法
自己可以继承这个类,然后分别实现。
sessionCreated指在session创建时执行的方法
sessionDestroyed指在session失效时执行的方法
如下:
把这个监听器在web.xml中声明就可以了:
上面是一个简单的利用session监听用户数的方法,在实际过程中,可能比这个复杂得多。
-
session失效时间设置 一、java代码 <!--优先级是最高的--> <!--秒为单位,1800= 60*30 即30分种--> request.getSession().setMaxInactiveInterval(1800); 二、web.xml <session-config> <!--分钟为单位--> <session-timeout>30</session-timeout> </session-config> 三、web服务器resin.conf,tomcat,<!--优先级是最低的--> <session-config> <!--分钟为单位--> <session-timeout>30</session-timeout> <enable-url-rewriting>false</enable-url-rewriting> </session-config> 优先级: 1 > 2 > 3
session 在tomcat重启后一般也不会失效,
关闭浏览器后,session失效,但服务器端的session不会立刻销毁,
而是存活一个session生命周期。
引用
首先需要理解一下几点:
1、Http是无状态的,即对于每一次请求都是一个全新的请求,服务器不保存上一次请求的信息
2、Session是保存在服务端的,为什么后续请求会读取到session?因为请求会包含一个sessionId,该值存储在cookie中,服务器通过这个sessionId找到对应的session
3、cookie是有过期时间的,规则如下:
Cookie的Max-Age决定了Cookie的有效期,单位为秒
0:Cookie立即作废(如果原先浏览器已经保存了该Cookie,那么可以通过设置Max-Age为0使其失效)
<0:默认,表示只在浏览器内存中存活,一旦浏览器关闭则Cookie销毁,浏览器的max-age默认为-1
>0: 将Cookie持久化到硬盘上,有效期由Max-Age决定
综上所述:
sessionId是一个cookie,max-age默认为-1,即关闭浏览器后sessionId就会清空,
sessionId(cookie)清空后,自然就无法找到对应的session,所以session就失效了。
在一般系统中,也可能需要在session失效后做一些操作:
(1)控制用户数,当session失效后,系统的用户数减少一个等,控制用户数在一定范围内,确保系统的性能。
(2)控制一个用户多次登录,当session有效时,如果相同用户登录,就提示已经登录了,当session失效后,就可以不用提示,直接登录了。
那么如何在session失效后,进行一系列的操作呢?
这里就需要用到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序就可以了。
监听器类为: HttpSessionListener 类,有 sessionCreated 和sessionDestroyed 两个方法
自己可以继承这个类,然后分别实现。
sessionCreated指在session创建时执行的方法
sessionDestroyed指在session失效时执行的方法
如下:
public class OnlineListener implements HttpSessionListener{ public void sessionCreated(HttpSessionEvent event) { HttpSession ses = event.getSession(); String id=ses.getId()+ses.getCreationTime(); SummerConstant.UserMap.put(id, Boolean.TRUE); //添加用户 } public void sessionDestroyed(HttpSessionEvent event) { HttpSession ses = event.getSession(); String id=ses.getId()+ses.getCreationTime(); synchronized (this) { SummerConstant.USERNUM--; //用户数减一 SummerConstant.UserMap.remove(id); //从用户组中移除掉,用户组为一个map } } }
把这个监听器在web.xml中声明就可以了:
<listener> <listener-class>com.demo.system.listener.OnlineListener</listener-class> </listener>
上面是一个简单的利用session监听用户数的方法,在实际过程中,可能比这个复杂得多。
-
发表评论
-
HTTP协议之Cookie
2017-11-08 16:45 1329Cookie是什么,有什么用,为什么要用到Cookie Co ... -
JSP 表达式 VS EL 表达式 用法比较
2017-06-21 06:03 1054应用场景: 根据访问路径URL,判断当前用户选择使用的语言。转 ... -
JSP之 @include VS jsp:include
2017-06-17 01:39 1416第一篇 对于可以重复使用的一段代码, 1、使用 <%@ ... -
JavaEE之(Servlet+Filter)环境搭建
2017-04-01 14:15 1042初学 Java Web 开发,请远 ... -
Servlet之单例与线程安全
2017-02-06 13:04 4441一、Servlet 是单例吗 不 ... -
Servlet之 destroy
2016-11-29 22:04 792只听说过 Servlet 何时 init(),何时 servi ... -
Servlet之JSP_03 JSTL/EL 表达式
2016-09-16 16:13 2318准备工作:在JSP 中启用 EL 表达式 <%@ ... -
Servlet之JSP_02初探
2016-09-15 22:37 844一、被编译后的JSP 1、写一个JSP文件:index.js ... -
Servlet之JSP_01概述
2016-09-15 20:42 1165一、什么是JSP JSP (Java Server Page ... -
Servlet之Servlet API
2016-09-13 19:10 1613一、在哪里 Java Servlet ... -
Servlet 的生命周期图
2014-12-31 03:18 951A servlet life cycle can be def ... -
在一个JSP页面中,操作数据库
2013-03-11 19:02 2785下面的代码是在一个jsp页面中实现数据库的操作。 也是为了加深 ... -
Servlet之Filter及FilterChain的使用详解
2013-01-07 20:06 2164在 JavaEE 中没有 Interceptor(拦截器)的概 ... -
out.print和out.write
2012-12-30 11:42 19432问题: 这是一个JSP页面: <%@ page l ... -
等幂操作——get方法与post方法
2012-12-23 20:13 1754幂等操作: 指的是对于同一数据,不论对其进行任何次幂操作,总 ... -
jsp/servlet中的相对路径
2012-12-19 23:20 68761.基本概念 绝对路径: 绝对路径就是你的主页上的文件或目 ... -
如何将jsp中<input>设为只读
2012-12-13 10:49 23335将一个input变为只读,可以使用 readonly 属性 和 ... -
Request的 getAttribute 和 getParameter
2012-12-03 19:57 1283getParameter 返回的是String, 用于 ...
相关推荐
本文将详细介绍如何设置JavaWeb Session的失效时间以及失效后如何进行相关操作。 首先,Session的失效时间可以通过以下三种方式设置,其优先级从高到低依次为: 1. **Java代码设置**:通过`request.getSession()....
1. **过期时间设置**:Session过期时间不宜过长,以防止恶意用户长时间占用服务器资源。通常设置为20分钟到1小时。 2. **Session失效策略**:除了基于时间的失效外,还可以配置为无操作一定时间后自动失效,或者在...
在Spring框架中,可以使用@SessionAttributes注解,它允许我们指定一个或多个模型属性,这些属性会被存储在一个会话范围内的session中,还可以使用@SessionAttribute注解来指定session属性的过期时间。但这种方法...
4. **session超时设置**:在web.xml中配置session的超时时间,比如30分钟无操作自动失效。这样,即使用户未主动注销,长时间不活动也会被认为是离线。 5. **展示在线人数**:在需要显示在线人数的页面上,可以通过...
默认情况下,如果一段时间内没有新的请求(例如 30 分钟),Session 将会过期。 - 用户也可以主动销毁 Session,例如通过调用 `invalidate()` 方法。 #### 二、Session在JavaWeb中的体现与操作 在 JavaWeb 开发中...
同时,为了增强安全性,可以定期刷新Session ID,或者设置合理的Session过期时间,避免长时间未操作的用户仍保持登录状态。 总结起来,Cookie和Session是JavaWeb开发中重要的用户会话管理工具,理解它们的工作原理...
### Javaweb-session和cookie笔记 #### 一、会话技术概述 在Web开发中,会话技术是一项非常重要的技术,它可以帮助我们追踪用户的活动并维持用户的状态信息。会话技术主要包括两种方式:Cookie技术和Session技术。...
开发者可以通过调用 `setMaxInactiveInterval(int interval)` 方法来设置Session的有效时间。如果用户关闭浏览器,通常会清除Cookie,相应的Session也会失效。但是,通过在URL中携带Session ID,可以在不同浏览器或...
本文将详细介绍如何在Java Web项目中设置和使用Session监听器,以及如何根据Session ID获取Session。 首先,为了实现Session监听,我们需要创建一个实现了`javax.servlet.http.HttpSessionListener`接口的类。这个...
及时清理不再需要的Session,或者设置合理的过期策略,防止过多Session占用服务器资源。 通过学习这9页的课件,开发者可以对JavaWeb中的Session有基本的理解,为后续的Web开发奠定坚实的基础。实践是检验真理的唯一...
3. 生命周期:Cookie的生命周期可自定义,也可设置为浏览器关闭时失效;Session的默认生命周期为30分钟,服务器会定期检查是否过期,过期则自动销毁。 总结来说,基于Session的用户登录注销机制在JavaWeb中广泛使用...
- Cookie:可以设置生存时间,过期后自动删除。 - Session:服务器默认会设定一个超时时间,超过此时间未接收到用户请求,Session将被销毁。 三、Session实现原理 3.1、服务器如何为一个用户浏览器服务? ...
此外,还可以使用`session.setMaxInactiveInterval()`来设置Session的过期时间。 #### JSP文件中设置Session范围内的共享数据 在JSP中设置Session范围的数据可以通过`session`对象来完成。例如,下面的代码展示了...
- **过期策略**:设置合理的Session过期时间,避免Redis内存占用过大。 通过以上方法,我们可以有效地解决Java Web项目的Session不共享问题,提升系统的可用性和用户体验。在实际应用中,可以根据项目需求和资源...
- **Session过期**:合理设置Session的超时时间,避免因长时间未活动导致的用户体验问题。 - **Session过多导致服务器压力**:过多的Session会占用服务器资源,可以通过集群和Session复制等方式分散压力。 - **...
Session可以通过两个方式失效:一是距离上一次使用该session的时间达到设置的失效时间,session失效;二是方法session.invalidate()被执行,主动使得session失效。 从上述内容可以看出,浏览器关闭后Session失效的...
8. **安全考虑**:为了增强安全性,验证码通常有有效期限制,例如在一段时间后过期,以防止被重复使用。此外,每次新的验证码请求都会使旧的验证码失效。 9. **用户体验**:虽然验证码的主要目的是安全,但也需要...
此外,还可以通过`invalidate()`方法立即使Session失效。 #### 5. 表单提交 表单提交通常有两种方式:GET和POST。GET方式通常用于简单的查询操作,如搜索功能;而POST方式则用于数据提交操作,如登录或注册等。 `...
课程可能涵盖创建、获取和管理session,以及session超时和失效的处理。 4. **EL(Expression Language)与JSTL**: `8. 尚硅谷_JavaWEB_EL&JSTL.pdf` 提及了EL表达式语言和JSTL(JavaServer Pages Standard Tag ...
若Session失效或丢失,用户将被重定向到登录页面。 2. **增删改查操作** - **添加图书**:用户可以输入新图书的相关信息(如书名、作者、出版社等),这些数据通过HTTP请求发送到服务器,服务器端处理并将其存储到...