c#Web程序,如何实现一个账号不能多人同时登录;
使用状态控制,在关闭IE时恢复状态,经常捕捉不到;
如果一段时间自动恢复,有的时候用户操作时间很短,不太现实;
请问各位有什么方法实现;

解决方案 »

  1.   

    asp.net 单用户登录经典解决方案
    http://hi.baidu.com/isbx/blog/item/34ff908f1446c9f3503d92d5.html
      

  2.   

    http://topic.csdn.net/u/20091226/10/bdd24dbf-b9f9-4fa9-83dd-619b549dc736.html?91932
      

  3.   

    就是说在推出,关闭IE的时候,捕捉IE关闭的时间经常捕捉不到,
      

  4.   

    加一个专门的用户登录状态表~
    flag字段 0在线 1离线 
    用户登录的时候先判断flag的值 是否为1
    ~~
      

  5.   

    就是因为这个不好使啊,在onunload事件时修改回状态,但是这个往往捕捉不到
      

  6.   

    如果我登录了,然后关闭IE,服务器端不可能即时得知用户离线了,恐怖flag还是为0,短期内再重新登录只能被拒绝了.
      

  7.   

    楼主是不是用session来验证用户的存储登录状态啊。我的想法是这样的,每次登录的时候要记录下用户的网关,然后核对是不是有这个用户的Session如果有的话就再比对一下网关,不相同的话就把这个Session删掉然后重新生成Session。
      

  8.   

    只有用超时判断...http协议下只有超时是唯一可靠的,配合比较最后一次登录IP就可以达到目的...
      

  9.   

    如果有用户的详细的操作日志,记录用户最后一次操作的时间和IP,和新的登录会话的时间和IP作比较,如果不同IP在很近的时间内连接登录,被认为是同一登录.其实, 一般B/S系统没人去管这个. 据我所知, 没有哪个有影响的网站限制了这个东东.
      

  10.   

    我的想法是在数据库用户表中增加一个字段, 每次登录后都生成一个GUID存到该字段中与Cookie中, 操作时对比, 相同则不允许, 不同则提示未登录.
      

  11.   

    判断的session 跟Cookie的时间弄成一样的。绑定在一起。session没。COOKIE也没。关闭浏览器 Cookie还存在、就这样了。。实现
      

  12.   

    是因为这个登录修改状态了,但是在关闭的时候不能正常捕捉到onunload事件,造成状态改不回去;
    专门设了个作业,5分钟清理一会,再就是给系统管理员权限可以刷新;
    但是很多客户的IE不能捕捉到onunload事件,造成不能马上重新登录呢,很是费劲;有人说这是IE的bug;
    再就是如果有客户装了什么插件,弹出框后台的那个页面都不弹出;
      

  13.   

    js好像可以捕捉到ie的关闭事件,但如果客户强制关机了。你也没办法吧。
    还是用超时判断吧。
      

  14.   

    1.可以多开几个账户呀
    2.如果用SESSION保存的,当用户登录的时候判断SESSION是否存在,存在的话就不让登录
    3.其他的只有在数据库,添加一个表了
      

  15.   

    你登入第一个系统后,这时Session就有东西,通过中间一个页面,这个中间页面属于第二个系统(前提是只有通过登入后才能跳到这个中间页面),然后这个中间页面来Seesion复制,直接给第二个系统!
      

  16.   

    可以在表里面多建一个字段quota。默认值为1
    成功登录一次-1,log out的时候+1。登录的时候判定是否为1即可。
      

  17.   

    用时间判断吧..
    只要登录的用户每隔一段时间就去刷新一下这个时间..然后服务器做个Timer
    每隔一段时间去判断这个时间是否超出一定范围,如果超出..flag就为0勉强能够实现了..
      

  18.   

    网上看到一文章说用 SessionStateStoreData可以去研究一下
      

  19.   

    在数据库设置的时候     家一个状态的字段 
    登陆的时候查询  用户名  ,密码   ,和状态 
    如果
    string state=当前的用户登陆状态
    if(state==1)
    {
      进入
    }
    else
    {
    提示当前的账号登陆……省略
    }
      

  20.   

    page_Load()
    {
        Update(你需要修改标识状态的那个字段);
    }
    page_Init()
    {
         Update(你需要修改标识状态的那个字段);}这样很难吗?
      

  21.   

    我是在登录时,生成一个GUID,将GUID和用户名放在cache里,登录时判断cache里是否有这个用户。如果有同名用户登录,将另一登录者从cache里清除。但是如何即时通知被清除的用户已经离线了还没弄出来。学习
      

  22.   

    可以不用马上清除cache,标识一下,等用户再次操作时,检查标识如果已改变就通知用户已被清除。
    没实践过不知道可不可行。
      

  23.   

    引用二楼,讲的不错.
    第一:建立global.asax文件, Session_End 事件中写入如下代码:             Hashtable h = (Hashtable)Application["online"];
                 if (h[Session.SessionID] != null)
                     h.Remove(Session.SessionID);
                 Application["online"] = h;第二:修改web.config文件,在system.web 结点里面增加<sessionState mode="InProc"></sessionState>这个是为了使用global.asax中的session_end事件生效。第三:页面的登录事件中,判断登录用户是否在服务端全局变量中存在,存在就不允许登录,不存在就创建。以下是实现过程,登录按纽的事件中调用。
      

  24.   

    目前就是这么处理的,问题出在用户在关闭IE的时候有个处理动作,弹出页面去修改状态,有的IE关闭的时候捕捉不到;
    如果用session会造成不能马上重新登录;