自动登录问题(附代码片断)表OnlineUser有列
IP, SessionID, Username
IP是主键
当Username == "客人"时表示没有登录的用户,否则是注册的已登录的用户。AutoLogin()在Session_Start中执行。
发现有一个问题,如果用户登录了没有单击退出离开,即没有在OnlineUser表中删除相应记录,有可能别人登录而且IP刚好和没有删除的记录的IP相同,这样就别人就自动登录了且不是他的帐号。用什么办法处理这个问题好?
或者其它的解决方案?private void AutoLogin()
{
string username;
string ip = Request.UserHostAddress;
OnlineUser onlineUser = new OnlineUser(ip);
// 同一IP是否已经登录过
if (onlineUser.Exists)
{
// 在本IP登录过则而且是验证过的
username = OnlineUser.GetUsernameByIP(ip);
if (username != null && username != OnlineUser.GUEST)
{
Session["Username"] = username;
}
return;
} username = OnlineUser.GUEST;
onlineUser.Username = username;
onlineUser.SessionID = Session.SessionID;
onlineUser.LoginTime = DateTime.Now;
onlineUser.Create();
     
SiteUser user = SiteUser.FromCookie();
if (user == null)
{
return;
}
// 可能被盗帐号在别的IP登录过
if (OnlineUser.ExistsUsername(user.Username))
{
return;
}
LoginResult result = user.Login();
if (result  == LoginResult.Successful)
{
Session["Username"] = user.Username;
}

}

解决方案 »

  1.   

    建议在OnlineUser中再加一个身份识别号,用户第一次登陆时随机生产
    在判断下就能解决你那问题了
      

  2.   

    楼主,如果是客人,那么建议就不要分配session了,或者所有的都使用一个,反正没有什么分别。
    如果是username不是客人,那么建议不要GetUsernameByIP(ip);而是GetUsernameByIP(username,pwd);这样你的表应该为:
    表OnlineUser有列
    IP, SessionID,UserId, Username
      

  3.   

    to hzBool: 是否身份别号同时要保存在Cookie中?to happyjun2000: 
    代码中是客人时我没有分配session.你的意思是不是同一IP登录过的注册用户只分配一次?
    不明白UserId怎么用?