自动登录问题(附代码片断)表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;
}
}
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;
}
}
在判断下就能解决你那问题了
如果是username不是客人,那么建议不要GetUsernameByIP(ip);而是GetUsernameByIP(username,pwd);这样你的表应该为:
表OnlineUser有列
IP, SessionID,UserId, Username
代码中是客人时我没有分配session.你的意思是不是同一IP登录过的注册用户只分配一次?
不明白UserId怎么用?