ASP.NET登录后,每个其他连接都会登录

时间:2013-03-20 05:43:16

标签: asp.net login web logout

我正在为学校做一个项目。我有一个用ASP.Net编写的网站,我只是制作了一个简单的登录系统。当用户输入电子邮件和密码时,我查询数据库并确保它们有效。

此时我想知道谁登录了所以我有一个名为User.cs的类来跟踪登录的人。

public class User
{
    static public bool loggedIn = false;
    static public int userType = -1;//1 = Agent, 2 = Buyer/Renter
    static public int id = -1;//the id of the user
}

例如在User.cs内,有一个名为bool loggedIn的变量。点击登录按钮后,我将其设置为true,以便在Page_Load()期间,如果需要,我可以使登录/注册按钮不可见。我使用IIS部署了网站并通过从计算机登录进行了测试,效果很好。然后我从另一台计算机登录,我仍然是第一次登录时的最后一个用户登录。我退出了,我也从我打开网站的所有其他计算机中登出。

所以最后,我不确定如何正确登录系统。

2 个答案:

答案 0 :(得分:0)

好的,所以您遇到的第一个问题是登录的用户信息是static。由于这个原因,它可用于应用程序的 所有实例 。因此,当您登录时,该用户已经 在任何地方登录 ,当您退出时,您已在任何地方注销

所以,让我们来解决User类:

public class User
{
    public bool loggedIn = false;
    public int userType = -1;//1 = Agent, 2 = Buyer/Renter
    public int id = -1;//the id of the user
}

我们去,它将修复登录用户的范围到他们的实例。但是我们还没有完成,我们需要将这些信息存储在某个地方,以便您可以在回发等方面恢复它。让我们使用Session,这是有道理的,因为他们已经登录会话了吗?因此,在Page_Load上,当您验证用户时,也请执行以下操作:

var usr = new User
{
    loggedIn = true,
    userType = ?,    // pull this value from the database
    id = ?           // pull this value from the database
};
Session["User"] = usr;

现在,当您想要访问该用户时,您可以将其从Session中删除:

var usr = Session["User"] as User;
// if usr is null then there is no logged in user
// otherwise, if it's NOT null there is a logged in user for this session

答案 1 :(得分:0)

第一种方法:当用户点击注销时,User类中的loggedIn变量再次变为false。

但正确的方法是在后端数据库中,您必须在用户表中添加一个“IsLoggedIn”的新列。其默认值为0表示为false,当用户登录时,则将其设置为true。因此,您可以轻松跟踪在线人员。