菜鸟问题:用SESSION防止同一用户多次登陆所带来的问题

Lixh2000 2005-10-10 11:38:01
以下内容是在一个网页上转贴过来的:

SessionID 属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识,会话标识以长整形数据类型返回。在很多情况下 SessionID 可以用于 WEB 页面注册统计。

利用该属性可以解决一种对用户的控制问题。该问题的主要功能就是,针对某个网站的一个模块,当一个会员登录后正在看此模块时,另一个人用同样的会员名登录,就不能浏览这个模块:也就是说一个会员名同时只能一个人浏览此模块。

通过用会员名(假设为UserID,唯一)和SessionID来实现了控制。当会员登录时,给这个会员一个Session记录登录状态如:Session("Status")="Logged",同时把这个会员的Session.SessionID写入数据库。当他要浏览此模块时,先判断其是否登录,若已经登录再判断它的SessionID是否与数据库记录的相同,如果不同则不能访问。

这样,当另一个用户用相同的会员名登录时,那么数据库中记录的就是新的SessionID,前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能在一些收费网站有很有特别作用,它防止了一个会员名给多个人浏览的问题。



问题是:在正常状态下,这样控制是没有问题的。但是,如果某个用户正在浏览网页时,服务器突然断电(尽管这种可能性不大),这时数据库中该用户在线标志没有去除,等服务器重启后,该用户重登陆时仍为在线状态,无法登陆。
请问如何修正这个问题?

我有两个思路:
1、使用一个二级密码,使用该密码登陆后可以清除任何以前在线标志,哪怕是目前正在线上;
2、如果是SQL SEVER的数据库,利用一个系统存储过程,在SERVER启动时清空在线标志,但我不知道SQL SERVER中有没有这样一个系统存储过程?如果有就好办。可是如果是ACCESS数据库呢,那又该怎么办?

请各位大虾不吝赐教!谢谢!
...全文
331 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
大猫钓鱼 2005-10-11
  • 打赏
  • 举报
回复
最直接的方法就是每隔30秒或1分钟向服务器发送一次页面刷新请求。

而被刷新的页面里包含有判断session是否过期的程序,如果过期直接删除access数据库里未此session id的用户记录。

不过这种方法也有不利之处:频繁读取和操作数据库,服务器负荷不轻。不过比较有效。
sdts 2005-10-11
  • 打赏
  • 举报
回复
还有一种方法是在Gobal.asa的Application_OnStart里更改在线标记
hsboy 2005-10-11
  • 打赏
  • 举报
回复
这个问题应该这样解决:

在数据库中不光记录用户的session id,还要记录它最后的活动时间,也就是说用户每访问一个页面你就把这个最后活动时间给更新一下。
这样一来当服务器重启后,用户再来访问,你只要判断用户上次活动时间是否超过一个指定时间段(比如30分钟),如果超过则清除原来记录的session id(就是认为原来的登录已经过期了)并记录这个用户的新session id。

你的解决方法也忒麻烦了。
coolstr 2005-10-11
  • 打赏
  • 举报
回复
清空是一個不錯的選擇,

寫一個程序清空所有在一狀態,如clear.php

放在開機的時候執行。如 php.exe clear.php
Lixh2000 2005-10-11
  • 打赏
  • 举报
回复
回复人: hsboy(PHP it!)
这个问题应该这样解决:

在数据库中不光记录用户的session id,还要记录它最后的活动时间,也就是说用户每访问一个页面你就把这个最后活动时间给更新一下。
这样一来当服务器重启后,用户再来访问,你只要判断用户上次活动时间是否超过一个指定时间段(比如30分钟),如果超过则清除原来记录的session id(就是认为原来的登录已经过期了)并记录这个用户的新session id。


如果设定的时间间隔是30分钟,而服务器重启间隔没有超过30分钟,那么用户在重新登陆后,他上次活动时间还没有超过30分钟,而他的SESSIONID已经和原来的不同了,这时如何判断用户的状态呢?
Lixh2000 2005-10-10
  • 打赏
  • 举报
回复
不好意思,我刚才看了一下SQL SERVER,只要在MASTER中新建一个存储过程,让它在系统启动时运行即可。
如果是ACCESS呢?

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧