ASp.net中处理同一个用户不能同时登录!

luyuans86 2009-04-07 11:22:03
使用Asp.net做个后台管理程序,但是遇到一个问题,就是
后台管理只有一个admin用户,只有他登录后能操作,但是我想让用户登录后,必须退出来后其他的用户在用这个admin才能登录
而不能一个后台,同一个用户,同时登录

采取措施:
1、我在数据库后台管理员表里增加一个状态字段,默认为0,当登录后设置为1,退出后设置为0
问题:如果突然断电的话,就永远是1了.......

请问高手们,还有好的方法?
...全文
438 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjx251 2009-04-14
  • 打赏
  • 举报
回复
application变量里放一个hashtable,记录登录的用户名。
mubai007 2009-04-08
  • 打赏
  • 举报
回复
Asp.net中防止用户多次登录的方法
[Quote=引用 5 楼 hmily821023 的回复:]
放cache中

或在登陆页面做个静态变量  标识admin是否登路



[/Quote]
keystudio 2009-04-08
  • 打赏
  • 举报
回复
1 全部登录用户名存在应用程序级变量里
2 数据库设置在线状态

但是都要在Global里处理 Session_End
即使客户端突然断电 会话到期后 Session_End依然会执行
如果服务器断电 第二种方法确实会存在一直为1的情况。。。。
huanghong2004268 2009-04-08
  • 打赏
  • 举报
回复
利用SESSION控制!
zjybushiren88888 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 popeyepower 的回复:]
两种方式, 1. 后来的把前面的踢掉, 2. 前面的不登出, 后面的就上不去.
具体做法, 第一种.

用户登陆以后在用户的session里存一个临时的身份票, GUID也可以, 其它方式的随机字符串也可以. 同时把这个字符串缓存在服务端, 写数据库也可以, 用application也可以, 方法很多. 以后每次校验session的时候同时校验这个字符串. 不符合的就session丢弃掉.

第二种, 服务端记录online的状态, 通过超时的方式认为用户离线. 你要自定…
[/Quote]

顶个
hy_lihuan 2009-04-08
  • 打赏
  • 举报
回复
说到底就是你怎么样来控制用户的在线状态,这个是不能使用数据库来控制的;
wugaochao 2009-04-08
  • 打赏
  • 举报
回复
学习
wlm1314 2009-04-08
  • 打赏
  • 举报
回复
up
AuC 2009-04-08
  • 打赏
  • 举报
回复
http://soft.ccw.com.cn/apply/network/htm2007/20071201_351176.shtml
里面应该有你要的答案
AuC 2009-04-08
  • 打赏
  • 举报
回复
http://soft.ccw.com.cn/apply/network/htm2007/20071201_351176.shtml
里面有你要的答案
hmily821023 2009-04-08
  • 打赏
  • 举报
回复
放cache中

或在登陆页面做个静态变量 标识admin是否登路


popeyepower 2009-04-08
  • 打赏
  • 举报
回复
两种方式, 1. 后来的把前面的踢掉, 2. 前面的不登出, 后面的就上不去.
具体做法, 第一种.

用户登陆以后在用户的session里存一个临时的身份票, GUID也可以, 其它方式的随机字符串也可以. 同时把这个字符串缓存在服务端, 写数据库也可以, 用application也可以, 方法很多. 以后每次校验session的时候同时校验这个字符串. 不符合的就session丢弃掉.

第二种, 服务端记录online的状态, 通过超时的方式认为用户离线. 你要自定义超时也可以, 用session的超时时间也可以.

总的来说第一种方法好实现, 也比较精确.
jian_xiaowei 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wanhot 的回复:]
ASP.NET 2.0防止同一用户同时登陆

要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在。在这里使用一个cache存 放已经登陆的用户名,但是还有一个问题就是要知道用户是什么时候离开系统的呢?这就要定期清除cache中的内容了,也就是设置一个cache的时间。这 个时间可以跟用户的session值联系起来,刚好当用户session值失效的时候该用户在cache里面的信息也会被清空.…
[/Quote]
------------------------------------------
太搞笑了,如果cookieSlidingExpiration等于true的话,用户在session失效时间内与服务器有交互的话session会一直有效,但是Cache内的信息就被清空了。
teerhu 2009-04-07
  • 打赏
  • 举报
回复
学习
wanhot 2009-04-07
  • 打赏
  • 举报
回复
ASP.NET 2.0防止同一用户同时登陆

要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在。在这里使用一个cache存 放已经登陆的用户名,但是还有一个问题就是要知道用户是什么时候离开系统的呢?这就要定期清除cache中的内容了,也就是设置一个cache的时间。这 个时间可以跟用户的session值联系起来,刚好当用户session值失效的时候该用户在cache里面的信息也会被清空.这样就达到了防止同时登陆 的效果,具体代码如下:

  放在登陆成功的地方:

  string key = TextBox1.Text; //用户名文本框设为cache关键字

  string uer = Convert.ToString(Cache[key]); //读取cache中用户相应的值

  //判断cache中是否有用户的信息,如果没有相关的值,说明用户未登陆

  if (uer == null || uer == String.Empty)

  {

  //定义cache过期时间

  TimeSpan SessTimeout = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);

  //第一次登陆的时候插入一个用户相关的cache值,

   HttpContext.Current.Cache.Insert(key, key, null, DateTime.MaxValue, SessTimeout, System.Web.Caching.CacheItemPriority.NotRemovable, null);

  Session["ADMINID"] = TextBox1.Text;

  Response.Redirect("main.aspx");

  }

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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