菜鸟问题:用SESSION防止同一用户多次登陆所带来的问题
以下内容是在一个网页上转贴过来的:
SessionID 属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识,会话标识以长整形数据类型返回。在很多情况下 SessionID 可以用于 WEB 页面注册统计。
利用该属性可以解决一种对用户的控制问题。该问题的主要功能就是,针对某个网站的一个模块,当一个会员登录后正在看此模块时,另一个人用同样的会员名登录,就不能浏览这个模块:也就是说一个会员名同时只能一个人浏览此模块。
通过用会员名(假设为UserID,唯一)和SessionID来实现了控制。当会员登录时,给这个会员一个Session记录登录状态如:Session("Status")="Logged",同时把这个会员的Session.SessionID写入数据库。当他要浏览此模块时,先判断其是否登录,若已经登录再判断它的SessionID是否与数据库记录的相同,如果不同则不能访问。
这样,当另一个用户用相同的会员名登录时,那么数据库中记录的就是新的SessionID,前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能在一些收费网站有很有特别作用,它防止了一个会员名给多个人浏览的问题。
问题是:在正常状态下,这样控制是没有问题的。但是,如果某个用户正在浏览网页时,服务器突然断电(尽管这种可能性不大),这时数据库中该用户在线标志没有去除,等服务器重启后,该用户重登陆时仍为在线状态,无法登陆。
请问如何修正这个问题?
我有两个思路:
1、使用一个二级密码,使用该密码登陆后可以清除任何以前在线标志,哪怕是目前正在线上;
2、如果是SQL SEVER的数据库,利用一个系统存储过程,在SERVER启动时清空在线标志,但我不知道SQL SERVER中有没有这样一个系统存储过程?如果有就好办。可是如果是ACCESS数据库呢,那又该怎么办?
请各位大虾不吝赐教!谢谢!