- 主题:网站对于一个用户账号不允许同时多处登录,应该如何实现
session都应该有过期的概念,无论保存在哪里。
既然要保证不重复登录,那么必然需要一个单点(至少对同一个用户来说)来保存session,数据库是很自然的选择,当然,并不是唯一的。
由于http是无状态的,所以至少要做两件事:
1、记录下用户最后一次活动的时间。
2、根据用户最后一次活动的时间判断session是否过期。
【 在 GreyTooWolf (灰太狼) 的大作中提到: 】
: 现在有一个系统,登录以后就在数据库中记录下状态为已登录。每次登陆前都要验证此状态为未登录。在用户退出时就在讲数据库中该列记为未登录。
: 现在存在一个问题,如果用户是用直接关闭浏览器的方式离开了,或者用户的浏览器崩溃了,那么用户退出时实际上数据库此列值未被修改,因此用户将永远无法再登陆。如何解决浏览器崩溃时依然可以让用户退出的问题。
: 另外我觉得在数据库中记录用户是否登录不是个好办法。有什么别的方法来解决单一登录的问题吗。
--
FROM 202.106.68.*
我说的session是一个基本概念,不是某个具体实现。
【 在 GreyTooWolf (灰太狼) 的大作中提到: 】
: 你的意思是把session再保存在数据库里面?
: 我前面说的现有那个系统的方法就是直接在数据库里面记录是否登录,也就是看user(state)是1还是0,和session没有关系。
: 你说的session有过期的概念是指一般服务器里面都会自己判断session["zhangsan"]是否过期吗。
--
FROM 202.106.68.*
如果以应用服务器作为控制的单点,那么所有应用都必须在同一个容器中,并且支持有一定的事务隔离功能,才能保证真正的单一登录。
【 在 JulyClyde (torred) 的大作中提到: 】
: 为啥要保存在数据库里面?
: 应用服务器本身会有session过期的概念的,在那里处理
--
FROM 202.106.68.*
现在的问题只有一个,要实现单一登录,也就是单一session,那么必然有一个单点来对session进行控制。“应用程序自己处理保存”的话,如何满足这个需求?
【 在 JulyClyde (torred) 的大作中提到: 】
: 由应用服务器把session保存到共享的存储机制中
: 和
: 由应用程序员自己处理保存
: ...................
--
修改:sayinger FROM 202.106.68.*
FROM 202.106.68.*