通过SessionID和用户名来保证同一个用户不能同时登录
2010-01-22 13:14
274 查看
可以通过SessionID和用户名来保证同一个用户不能同时登录的问题,下面程序模仿了QQ的登录,当登录后判断当前帐号是否已经登录,如果登录。则踢掉以前登录的用户。
1.通过Application全局变量来存储SessionID和用户名,每次登录时都保存,并且将该Application存入Hashtable中,当用户登录成功后,首先判断该用户是否已经存储在Application中,如果存在(说明已经登录),则将该用户对应的值设置为XX(值为无用),
代码
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
Hashtable hOnline = (Hashtable)Application["Online"];
if (hOnline[Session.SessionID] != null)
{
hOnline.Remove(Session.SessionID);//清除当前SessionID
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();
}
}
4.如果程序非正常退出,SessionID没有及时的清除,那么也不会影响帐号的正常登录,而SessionID也会随着Session的过期而自动清除,服务器也不会有压力。
5,如果感觉存储在Application中感觉不好,也可以将SessionID存入数据库中,判断方法和上面一样。
6,测试时注意在不同机器上面测试,同一台机子上面的SessionID是一样的,每次设置为XX后又有新值进去,看不到效果,如果要防止同一个帐号在同一台机子上面同事登录两次以上,可以通过mac地址来判断。
1.通过Application全局变量来存储SessionID和用户名,每次登录时都保存,并且将该Application存入Hashtable中,当用户登录成功后,首先判断该用户是否已经存储在Application中,如果存在(说明已经登录),则将该用户对应的值设置为XX(值为无用),
代码
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
Hashtable hOnline = (Hashtable)Application["Online"];
if (hOnline[Session.SessionID] != null)
{
hOnline.Remove(Session.SessionID);//清除当前SessionID
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();
}
}
4.如果程序非正常退出,SessionID没有及时的清除,那么也不会影响帐号的正常登录,而SessionID也会随着Session的过期而自动清除,服务器也不会有压力。
5,如果感觉存储在Application中感觉不好,也可以将SessionID存入数据库中,判断方法和上面一样。
6,测试时注意在不同机器上面测试,同一台机子上面的SessionID是一样的,每次设置为XX后又有新值进去,看不到效果,如果要防止同一个帐号在同一台机子上面同事登录两次以上,可以通过mac地址来判断。
相关文章推荐
- 通过SessionID和用户名来保证同一个用户不能同时登录
- 通过SessionID和用户名来保证同一个用户不能同时登录
- 通过SessionID和用户名来保证同一个用户不能同时登录
- 通过SessionID和用户名来保证同一个用户不能同时登录
- 通过SessionID和用户名来保证同一个用户不能同时登录
- 通过SessionID和用户名来保证同一个用户不能同时登录的问题
- 2.如何让一个项目的用户目前只能是姓名登录,优化为增加一个字段为姓名和用户名同时都可以实现登录 ,并且用户名不能使中文?
- oracle中的sys用户(修改密码)/////Oracle删除表空间的同时删除数据文件 ///// Oracle中如何保证用户只有一个session登录
- 通过session_id限制仅一个用户登录
- 关于两个用户用同一浏览器不能同时登录同一网站的问题(session覆盖问题)
- 一种实现一个用户帐户不能同时登录的问题
- thinkphp 通过获取用户登录时的session_id来获取session里面的数据传到前台默认显示
- 局域网不同用户同时登录同一个网站,会出现session乱窜的问题
- 一个用户同时登录两次的话,关于session回话问题
- struts2 jsp 通过session获取登录用户id并把值加到流中
- PHP通过session id 实现session共享和登录验证[转]
- qq邮箱是怎么做到同一个浏览器让多个不用用户同时打开的? --session的控制
- redis来共享各个服务器的session,并同时通过redis来缓存一些常用的资源,加快用户获得请求资源的速度(转)
- 获取Discuz论坛登录用户名、用户组、用户ID等
- php同时使用session和cookie来保存用户登录信息的实现代码