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

关于session超时问题,不是普通的超时问题请高手务必进来看看

阅读更多
首先,我知道如果问session超时的问题,相信大家会对这个问题不屑一顾,所以加上了一个说明,呵呵。。。
为什么我会说这不是一个普通的超时问题呢,其实我也不太清楚,这是我在生产环境中发现的,大至情况我在这里详细描述一下
 
  对于一般的WEB应用,我们通常都会通过session来保存操作者的一些相应信息,但为了安全起见,又不能让这个操作者在不退出系统的情况下面该登录一直有效,所以我们一般都会设置如果该操作者一个小时没操作,session就超时,下次操作时必须重新登录后才能操作。我在开发的时候也作了相关的超时处理,就是用过滤器来判断,这也是最省事的判断方式。在常规情况下面,这种方式都能正常实现。现在我就把我遇到情况写出来了,请大家注意,现在我是操作者,我的session超时了,但我发现本次提交却成功了,提交完以后跳到登录页面去了,但我一查写入数据库中的信息,发现是别人的登录信息,其它从操作页面获取的数据都是我提交的,唯独从session中取的数据是别人登录的,很惨很惨,后果很严重啊

这是什么原因引起的呢,我想了很久也想不出一个所以然出来,后来我在想,是不是因为我这个session刚好失效,在这同一时间,另一个用户登录,同时这个登录生成的session id 与我上次登录后失效的session id 刚好相同引起的呢?会不会存在这种可能性呢
如果是,我该怎么解决呢,如果不是,那这种情况产生的原因又是什么呢?期待有解决经验的高手拔刀相助。

我再来说一下我的session 应用过程,过程非常普通,也就是用户登录,通过request.getSession.setAttribute("admin")生成session,用户每次操作时都先经过filter判断该session有没有值,如果为空则跳到登录界面,如果有值则通过 request.getSession.getAttribute("admin")来获取该用户信息。
问题补充:
这是我filter的代码
public void doFilter(ServletRequest srequest, ServletResponse sresponse,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest httprequest = (HttpServletRequest) srequest;
HttpSession session = httprequest.getSession();
try {
ShopAdmin shopAdmin = (ShopAdmin) session.getAttribute("shopAdmin");
if (shopAdmin != null) {

chain.doFilter(srequest, sresponse);
}
else {
HttpServletResponse httpresponse = (HttpServletResponse) sresponse;
httpresponse.sendRedirect("/");
}
} catch (IOException e) {
e.printStackTrace();
} catch (ServletException e) {
e.printStackTrace();
}
}
用户提交处理的代理就是一个action,在action中获取session,并传递这个值去logic中做相应的处理,这个代码相信应该是没有问题的
分享到:
评论
3 楼 thinktank 2009-01-13  
看了一下文章,感觉我所遇到的问题应该是servlet线程安全方面的问题,而不是程序中的问题,所以我准备把这个session重写一下,再测试。。。
谢谢各位的发言
2 楼 thinktank 2009-01-12  
public ActionForward consume(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception
{
memberForm = (MemberForm) form;

ShopAdmin shopAdmin = (ShopAdmin)request.getSession().getAttribute("shopAdmin");
memberForm.member.shopid = shopAdmin.shopid;


//处理输入数据
memberForm.member.discountfee = StringUtil.isNumber(memberForm.member.discountfee);
memberForm.member.unionpayfee = StringUtil.isNumber(memberForm.member.unionpayfee);
memberForm.member.voucherfee = StringUtil.isNumber(memberForm.member.voucherfee);

MemberConsumeLogic memberConsumeLogic = new MemberConsumeLogic();
memberForm = (MemberForm)memberConsumeLogic.consume(memberForm);
memberConsumeLogic = null;

    return mapping.findForward("operated");
}
1 楼 bohemia 2009-01-12  
你的Action处理代码呢?

相关推荐

    weblogic设置session超时时间

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

    session 超时

    知识点一:session超时概念及设置 session超时是指用户在web系统中进行操作时,如果在一定的时间内没有任何操作,系统会自动认为用户已经离开,这时session(会话)会失效,用户下次进行操作时需要重新登录验证身份...

    ajax提交session超时跳转页面使用全局的方法来处理

    这里提到的主题是关于如何在AJAX请求中处理Session超时,并使用全局的方法进行跳转。下面我们将深入探讨这个话题。 首先,我们来看在过滤器中处理Session超时的代码片段。过滤器是Servlet技术中的一种机制,可以在...

    Session登录在线人

    接下来,我们来看如何实现"Session获取当前在线登录人"的功能: 1. **创建Session**:在用户验证身份成功后,服务器创建一个新的Session对象,并将用户信息(如用户名、用户ID等)存入Session。例如,在Java ...

    weblogic session丢失

    6. **日志分析**:通过查看WebLogic的日志文件,寻找关于session丢失的异常信息,有助于定位问题。 7. **监控和调试**:使用WebLogic的管理工具进行监控,如WLST(WebLogic Scripting Tool)或JMX,以便实时查看...

    Tomcat如何监控并删除超时Session详解

    接下来,我们看看Session的存储结构。每个Tomcat的**Context**(代表一个Web应用)都有一个**Manager**对象来管理其会话。Manager使用一个`ConcurrentHashMap`来存储Session对象,键是SessionId,值是Session对象...

    session 共享 tomcat-redis-session-manager 所需要的jar (绝对可用)

    首先,我们来看看标题所提及的"session 共享 tomcat-redis-session-manager"。Tomcat Redis Session Manager是专门为Apache Tomcat设计的一个插件,它的主要任务是将Tomcat的Session对象存储在Redis这种高可用的键值...

    JAVA用户登录超时过滤器和文件配置

    在Java Web开发中,用户登录超时过滤器是一种常见的安全机制,用于检查用户是否已登录并保持其会话状态。这个过滤器会在用户访问受保护的页面之前进行拦截,如果发现用户会话已经超时或者不存在,将重定向到登录页面...

    Zebra_Session.2.0.1

    3. **会话超时管理**:Zebra_Session支持自定义会话超时时间,可以根据需求设定用户无操作后多长时间自动结束会话,以节省服务器资源。 4. **跨域支持**:如果你的应用程序跨越多个域名,Zebra_Session可以处理这些...

    session与application制作.NETt聊天室

    在实际项目中,为了提高性能和可扩展性,我们还可能需要考虑其他优化策略,例如使用分布式Session存储或Application存储,以及合理地处理Session超时和并发问题。总之,理解和掌握Session与Application的使用是构建...

    j2ee项目使用filter和memcached实现session服务器

    5. **会话超时和清理**:在Memcached中,你需要设定每个session的过期时间。同时,可以在后台定期执行任务,清除已过期的session。 6. **跨服务器共享**:当用户在多个服务器之间跳转时,由于session存储在...

    tomcat8 memcached session共享jar包

    标题中的“tomcat8 memcached session共享jar包”指的是在Tomcat 8中使用Memcached作为session共享存储的解决方案。Memcached是一种分布式内存缓存系统,常用于减轻数据库负载,提高应用性能。在Tomcat这样的Java...

    tomcat+redis处理session共享jar包

    通过以上配置,你的Tomcat应用就能利用Redis进行session共享,这不仅解决了在分布式环境下的session一致性问题,还降低了内存压力,因为session数据不再存储在每个Tomcat实例的内存中。同时,Redis的高可用性和可...

    tomcat8 做session共享所需jar包

    标题中的“tomcat8 做session共享所需jar包”指的是在使用Apache Tomcat 8作为Web服务器时,为了实现跨应用或者...在实际操作过程中,可能还需要根据具体需求调整配置,例如设置Session超时时间、优化连接池配置等。

    tomcat-redis-session-manager源码

    首先,我们来看`Tomcat-Redis-Session-Manager`的核心功能:它将Tomcat默认的内存会话管理替换为基于Redis的分布式会话管理。这主要涉及两个关键组件:`RedisSessionManager`和`RedisSessionHandlerWrapper`。 `...

    C#程序中session的基本设置示例及清除session的方法

    这可能是由于Session状态管理方式(InProc、StateServer、SQLServer)的选择、Session超时、IIS配置问题或是浏览器设置等引起。为了解决这些问题,需要检查以下几点: 1. 确保IIS中的ASP.NET State Service已启动,...

    ssh修改超时自动登出时间的方法

    如果不通过tmux这些辅助工具来维持session的话,那么我们需要通过修改服务器的登出时间来防止自动登出。 修改步骤 首先我们看一下服务器上的自动登出时间是多少: $ echo $TMOUT 如果什么都没有输出,那么表示你的...

    redis-tomcat8以上集群所需要的jar :tomcat-redis-session-manager-master 等

    这里,`server`、`port`和`database`分别指定了Redis服务器的地址、端口和数据库编号,`maxInactiveInterval`设置了Session超时时间,`sessionName`则是Session ID的名称。 配置完成后,启动Tomcat集群,每个节点...

    EJB超时调用

    例如,对于Stateless Session Bean,可以在<session-bean>元素内添加<session-timeout>元素来指定超时时间(以分钟为单位)。 2. **异常处理**:当EJB方法超过预设的超时时,会抛出`javax.ejb....

    ASP中SESSION无法保存问题的解决办法

    8. 定期检查服务器日志文件,看是否有关于Session错误的信息。很多情况下,服务器日志可以提供异常处理和问题诊断的重要线索。 通过以上分析,我们可以了解ASP中Session无法保存问题的解决办法以及可能采取的措施。...

Global site tag (gtag.js) - Google Analytics