用户数据库里加一个TempID的字段,用户登陆后就修改这个字段为随机的字符,然后把字符返回给SESSION,每次访问都比较session中的这个字段和数据库是否符合,如不符合,拒绝访问,不就可以了吗?

解决方案 »

  1.   

    to:cnlamar(无中生有) 
    你的意思是:用户admin在计算机A上成功登陆以后,不允许同一个用户admin在计算机B上再次登陆
    我的目的是:用户admin可以在计算机B再次登陆,但是先前此用户先前在计算机A上的登陆会无效
      

  2.   

    我的意思就是你的目的呀,你想想,当你在B登陆后,用户数据库的TID是不是又变了?那B点的SESSION是新的TID啊,能用,而A点呢?由于用户数据库里的TID已经被B点登陆时更新了,而A点的SESSION中的TID还是旧的,一比较,A点就不能继续使用了嘛
      

  3.   

    呵呵,但是我看到过不用添加TempID字段就能实现此功能的,一定有其他的一些配置
      

  4.   

    相信是相同的原理嘛?
    比如说做个用户和IP的对应,当用户登陆时更新对应IP,然后以前的IP就失效等等,但最好的方法我觉得还是TID的方法,或者你可以把TID保存在全局变量中
      

  5.   

    好办:
    再添加一个全局的key值记录用户登陆时的状态,一但发现该状态发生了改变,就不让再做任何操作
    bool state = Application[UserName+"State"].ToString();
    if(state==null)state=false;
    Application.Add(Page.Session["UserName"].ToString()+"State",!state); 
    Session["State"]=!state;用户每做一操作,检查Session["State"]是否和Application[UserName+"State"]一样,如果不一样就发出异常……
      

  6.   

    用户成功登陆后:
    Application.Remove(Page.Session["UserName"].ToString());   
    Application.Add(Page.Session["UserName"].ToString(),Request.UserHostAddress); 创建一页面:autologout.aspx用来判断Session["UserName"]和Request.UserHostAddressWebApp中的每一个业务页面(.aspx)都从autologout.aspx继承,如:public class WebForm1 : autologout这样,如果用户在不同的机器上登陆,Request.UserHostAddress总是最晚登陆的Ip地址,当
    先前已经登陆的用户如果在请求业务页面,会发现Request.UserHostAddress已经不同了,系统自动注销看来,有些问题还是自己解决比较爽!散分