`
tomkoo
  • 浏览: 186260 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

页面“长时间”操作引起的Session过期

阅读更多

在Servlet Specification 2.4中对Session的过期有这样的一句描述:
引用

The session invalidation will not take effect until all servlets using that session have exited the service method.


所以,如果client跟server没有交互,那么session过期时间就开始计算了。

但是在实际应用中,我遇到了这样的问题:

客户要求系统5分钟不操作Session就过期。但是我们有一项功能“银企对账”,需要在页面上对2000多条数据进行勾选,这个勾选完全是页面的操作,同Server没有任何交互,但是由于数据量大,勾选的时间远远超过5分钟,当勾选完后执行操作时,Session已经过期了。

这样的矛盾如何解决?设置自动同Server交互以维持Session?Or Other?
分享到:
评论
42 楼 javaest 2008-08-06  
SESSION超时是一种很不好的用户体验,可以设定如果5分钟没有操作,就探出一个屏保,这个屏保可以用罩遮来搞。如果用户想继续操作,他就需要输入密码,我想对于你的这个页面,这样搞是好地。
41 楼 liushoucang 2008-05-09  
在对帐的时候可以在页面上加一个进度条,和Server进行交互,这样就会避免问题的发生!
40 楼 ufinity 2008-04-25  
chinata 写道
tomkoo 写道

在Servlet Specification 2.4中对Session的过期有这样的一句描述:
引用

The session invalidation will not take effect until all servlets using that session have exited the service method.


所以,如果client跟server没有交互,那么session过期时间就开始计算了。

但是在实际应用中,我遇到了这样的问题:

客户要求系统5分钟不操作Session就过期。但是我们有一项功能“银企对账”,需要在页面上对2000多条数据进行勾选,这个勾选完全是页面的操作,同Server没有任何交互,但是由于数据量大,勾选的时间远远超过5分钟,当勾选完后执行操作时,Session已经过期了。

这样的矛盾如何解决?设置自动同Server交互以维持Session?Or Other?


这个世界上有什么新鲜花样?特别是java的业务实现,都是别人做过的东西。这种逻辑抄袭就行了。
从安全角度上看,自动连接刷新session是非常危险的。多用些网银就知道了,就是2种做法:
1,主动通知:服务器端把session的timeout设为5分钟,页面有个计时器(新页面的话会重新计时),如果到了5分钟,就通知客户说,你5分钟没连接session了,是否要logout(客户点否,就用javascript送一个httprequest去刷session),客户选“是”或者不选都算logout。这段代码应该包括在所有的页面中。前面一个朋友说用事件函数也可以,但是如果在每个页面都这样写,可能会和别的逻辑代码冲突。
2,被动认证:另外一种做法还是自动timeout,超时的话就去一个页面多输入一次密码。我觉得这种实现实际是多层架构,就是在app server层有timeout,实际上web server的是没有timeout或者很长的timeout,这样保证了安全性和页面逻辑的一致性。

同意这样的方法
39 楼 titanfoot 2008-04-24  
赫赫,其实这个问题很简单,很多人第一感觉采用ajax 啊,什么定期连接一下服务器!



就像RayPoy所说,一个内容过多的页面就需要拆分多个页面,减少用户输入量,增强用户体验,多个页面可以通过向导方式一步一步完成,用户的输入,这样每个页的操作时间大大缩减,基本不到所谓的5分钟。
38 楼 RyanPoy 2008-04-23  
为什么不分页显示。让用户有一个next page的过程。为什么一次性显示给用户2000条。我要是用户,看都看累了。
37 楼 dzmonkey 2008-04-23  
后面几位的回答有点偏离方向了~~~~
36 楼 yelaiwei 2008-04-23  
i think the expiration of session can be defined in the server, so you can set it a bit longer.
the other way is you can let page reflash after a specific time. then you question solved
35 楼 BradenCao 2007-12-04  
应用服务器里不是都能设置的啊,把过期时间设得长一点,或者设为-1,永不过期。
34 楼 allenny 2007-12-04  
用Cookie难道不能解决这个问题吗?
33 楼 wplqw 2007-12-01  
做个内嵌帧,然后里面放上一个很简单的html,或者jsp的页面,
接着加上
<meta     http-equiv="Refresh"   content=5>
这个meta,上例为5妙,就可以实现永久保持会话了,当然这个内嵌帧你放在合适的地方就可以了,别到处都放.
32 楼 flyraincn 2007-11-30  
可以用JS弄个计时

嵌入页面的刷新时间time1
前一次操作(勾选等操作)时间time2
操作时间time3

time3 - time2 > 5分钟,超时
time3 - time1 >= 4分钟,刷新嵌入的页面,保证session不过期
31 楼 zfting 2007-11-20  
如果你用的是tomcat是可以在web.xml设置的!!!
30 楼 idragon 2007-11-19  
选中2000条数据需要5分钟?这个是不是有点慢?用户受得了吗?
29 楼 neuzhujf 2007-11-19  
客户端的操作有5分钟,是不是性能有问题?
能不能优化呢
28 楼 ddandyy 2007-11-18  
我对自动刷新有哪些危险比较有兴趣
27 楼 spiritfrog 2007-11-18  
你这情况肯定要跟客户协调了,必须说明有些操作会费时超过5分钟,因此他们的要求是办不到的。
26 楼 抛出异常的爱 2007-10-22  
qlhl2000 写道
如果Server端得自身运算超过5分钟,应该如何处理session?
你先试一下看看。。。
25 楼 qlhl2000 2007-10-22  
如果Server端得自身运算超过5分钟,应该如何处理session?
24 楼 myyate 2007-10-15  
chinata 写道
tomkoo 写道

在Servlet Specification 2.4中对Session的过期有这样的一句描述:
引用

The session invalidation will not take effect until all servlets using that session have exited the service method.


所以,如果client跟server没有交互,那么session过期时间就开始计算了。

但是在实际应用中,我遇到了这样的问题:

客户要求系统5分钟不操作Session就过期。但是我们有一项功能“银企对账”,需要在页面上对2000多条数据进行勾选,这个勾选完全是页面的操作,同Server没有任何交互,但是由于数据量大,勾选的时间远远超过5分钟,当勾选完后执行操作时,Session已经过期了。

这样的矛盾如何解决?设置自动同Server交互以维持Session?Or Other?


这个世界上有什么新鲜花样?特别是java的业务实现,都是别人做过的东西。这种逻辑抄袭就行了。
从安全角度上看,自动连接刷新session是非常危险的。多用些网银就知道了,就是2种做法:
1,主动通知:服务器端把session的timeout设为5分钟,页面有个计时器(新页面的话会重新计时),如果到了5分钟,就通知客户说,你5分钟没连接session了,是否要logout(客户点否,就用javascript送一个httprequest去刷session),客户选“是”或者不选都算logout。这段代码应该包括在所有的页面中。前面一个朋友说用事件函数也可以,但是如果在每个页面都这样写,可能会和别的逻辑代码冲突。
2,被动认证:另外一种做法还是自动timeout,超时的话就去一个页面多输入一次密码。我觉得这种实现实际是多层架构,就是在app server层有timeout,实际上web server的是没有timeout或者很长的timeout,这样保证了安全性和页面逻辑的一致性。

正解,学习了
23 楼 chinata 2007-10-14  
tomkoo 写道

在Servlet Specification 2.4中对Session的过期有这样的一句描述:
引用

The session invalidation will not take effect until all servlets using that session have exited the service method.


所以,如果client跟server没有交互,那么session过期时间就开始计算了。

但是在实际应用中,我遇到了这样的问题:

客户要求系统5分钟不操作Session就过期。但是我们有一项功能“银企对账”,需要在页面上对2000多条数据进行勾选,这个勾选完全是页面的操作,同Server没有任何交互,但是由于数据量大,勾选的时间远远超过5分钟,当勾选完后执行操作时,Session已经过期了。

这样的矛盾如何解决?设置自动同Server交互以维持Session?Or Other?


这个世界上有什么新鲜花样?特别是java的业务实现,都是别人做过的东西。这种逻辑抄袭就行了。
从安全角度上看,自动连接刷新session是非常危险的。多用些网银就知道了,就是2种做法:
1,主动通知:服务器端把session的timeout设为5分钟,页面有个计时器(新页面的话会重新计时),如果到了5分钟,就通知客户说,你5分钟没连接session了,是否要logout(客户点否,就用javascript送一个httprequest去刷session),客户选“是”或者不选都算logout。这段代码应该包括在所有的页面中。前面一个朋友说用事件函数也可以,但是如果在每个页面都这样写,可能会和别的逻辑代码冲突。
2,被动认证:另外一种做法还是自动timeout,超时的话就去一个页面多输入一次密码。我觉得这种实现实际是多层架构,就是在app server层有timeout,实际上web server的是没有timeout或者很长的timeout,这样保证了安全性和页面逻辑的一致性。

相关推荐

    设定tomcat中session过期时间.txt

    ### 设定Tomcat中Session过期时间的三种方式 在Web开发中,Session管理是确保用户状态跟踪的重要机制之一。Tomcat作为一款广泛使用的Java应用服务器及Servlet容器,提供了多种方式来设定Session的有效时长。这有助...

    判断session过期的方式

    服务器收到心跳请求后,会更新Session的最后访问时间,防止其因无操作而过期。如果一段时间内未收到心跳,服务器可以认为Session已过期。心跳请求可以是轻量级的Ajax请求,示例代码如下: ```javascript // 定时...

    项目访问时间过长session过期提醒

    "项目访问时间过长session过期提醒"这个话题涉及到的是如何配置Web应用程序,以便在用户的会话过期时自动跳转到特定的过期页面,提醒用户重新登录。下面我们将详细讲解实现这一功能的关键步骤和技术。 首先,我们...

    session过期问题

    这种方法可以避免用户因为长时间无操作而导致Session过期,但增加了服务器的负担。 3. **Cookie与Session结合**:服务器可以在创建Session时同时设置一个与Session关联的Cookie,Cookie的过期时间略长于Session。...

    在ASP.NET中,设置Session的过期时间的方法

    方法一:  在后台应用程序中设置:Session.Timeout = 1;  注意:1、此方法可以设置在一个... 您可能感兴趣的文章:php 如何设置一个严格控制过期时间的sessionjava设置session过期时间的实现方法php中实现精确设置se

    session过期处理

    - 定期清理无效Session:服务器应定期扫描并删除长时间未更新的Session,避免内存占用过多。 - 避免存储敏感数据:Session不是安全存储,不要存放敏感信息,如密码明文。 - 使用CSRF Token:防止跨站请求伪造攻击...

    session过期时间设置

    在本文中,我们将详细讨论如何设置Session的过期时间以及在Session失效后进行相关操作。 首先,设置Session的过期时间主要是为了安全和性能考虑。默认情况下,Session可能会在服务器内存中长时间存储,消耗资源,...

    详解php设置session(过期、失效、有效期)

    3. `session.gc_maxlifetime` 也设置为一个大值,如99999999,确保服务器端Session数据长时间保存。 如果无法直接修改`php.ini`,也可以通过程序逻辑来实现Session永不过期。一种方法是使用Cookie来持久化Session ...

    session失效重新登录后,返回之前页面,并保留表单数据

    然而,Session有其生命周期,超过设定时间未活动,服务器会自动清理Session,导致用户状态丢失。 2. 登录逻辑: 当检测到Session失效,服务器会清除与之相关的用户信息,然后将用户重定向到登录页面。登录页面应...

    phpcms web发布session过期问题解决

    当用户长时间无操作或者达到预设的session生命周期时,session会自动销毁,导致用户状态丢失,表现为用户被强制登出。 在phpcms系统中,session的配置通常位于`config.php`或`includes/config.inc.php`文件内。你...

    .net 和IIS7.5关于Session超时的设置

    - **安全性**:长时间的Session可能导致安全风险,如用户离开电脑但Session仍然活跃,其他人可能有机会访问其账户。 - **性能**:大量活跃的Session会占用服务器资源,尤其是`InProc`模式,因此合理设置Session...

    asp中设置session过期时间方法总结

    如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行,IIS中session默认过期时间为20分钟,IIS中session时间可以更改 时间设置要放在前面 例如 代码如下: Session.Timeout=30...

    Session过期后自动跳转到登录页面的实例代码

    然而,Session不能永久保持,它有默认的超时时间,超过这个时间如果没有接收到客户端的任何请求,Session就会被视为过期。在本文中,我们将探讨如何在Session过期后自动将用户重定向到登录页面。 首先,开发者可能...

    weblogic设置session超时时间

    WebLogic 设置 Session 超时时间 WebLogic 是一个功能强大且流行的 Java 企业级应用服务器,支持多种方式来设置 Session 的超时时间。在本文中,我们将介绍如何在 WebLogic 中设置 Session 超时时间。 Method 1: ...

    java设置session过期时间的实现方法

    然而,为了防止Session被恶意用户长时间占用或者因为用户离开浏览器而未清除Session导致资源浪费,通常需要设置Session的过期时间。下面我们将详细探讨Java中设置Session过期时间的三种方法。 1. **在部署描述符...

    php中实现精确设置session过期时间的方法

    例如,通过记录session的最后访问时间`$_SESSION['last_access']`,并在每次请求时检查这个时间戳,如果超过预设的过期时间,就重置session。这种方法可以实现更加灵活的session管理,如下所示: ```php if (!is...

Global site tag (gtag.js) - Google Analytics