【问题标题】:DB Cleanup on Session timeout and logout会话超时和注销时的数据库清理
【发布时间】:2011-07-05 08:25:00
【问题描述】:

只是一个简单的问题。登录时,我将每个用户都放入数据库,因为有一次只有一个用户可以使用相同的用户名和密码登录。如果该用户已经在数据库中,我不会让用户进入。当用户注销时,我会清除 dB 表并使 Servlet 中的会话无效。 现在,如果用户忘记注销,会话显然会在例如过期。 20分钟左右 在 web.xml 我创建了这个:

<listener>
    <listener-class>com.servlets.dbclean</listener-class>
</listener>

这个 dbclean 类然后实现 HttpSessionListener 并在 sessionDestroyed 方法上清理数据库。 我的问题:仅在此处进行此数据库清理是否足够,因为当用户手动注销时,会话将失效并且将调用此方法,或者我应该在/doLogout Servlet 清理数据库并依赖此用户忘记注销时的监听器?那么只使用这个监听器是一种保存方式吗?

【问题讨论】:

    标签: session servlets session-timeout


    【解决方案1】:

    监听器将在会话失效时触发 - 通过超时或调用invalidate()

    如果您不需要支持集群,您可以简单地将登录的用户存储在ServletContext 内的Set 中(在sessionCreated(..) 上执行此操作,然后从sessionDestroyed(..) 中的该集合中删除它. 无需访问数据库 - 它都可以保留在内存中。(使用会话复制,您也可以在集群中执行此操作)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多