ASP.NET登录后,每登录一次其他连接

ASP.NET登录后,每登录一次其他连接,asp.net,login,web,logout,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 pub

我正在为学校做一个项目。我有一个用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\u Load()
期间,如果需要,我可以使“登录/注册”按钮不可见。我使用IIS部署了该网站,并通过从计算机登录进行了测试,效果非常好。然后我从另一台计算机登录,我仍然是第一次登录后的最后一个用户。我注销了,我也从我打开网站的所有其他计算机上注销了


因此,最后,我不知道如何建立一个正确的登录系统。

好的,所以您遇到的第一个问题是登录的用户信息是静态的。因此,它可用于应用程序的所有实例。因此,当您登录时,这就是在任何地方登录的用户,当您注销时,您在任何地方注销。

那么,让我们安装
用户
类,我们将:

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
,这是有意义的,因为他们是为Session登录的,对吗?因此,在
Page\u Load
上,验证用户时,也要执行以下操作:

var usr = new User
{
    loggedIn = true,
    userType = ?,    // pull this value from the database
    id = ?           // pull this value from the database
};
Session["User"] = usr;
现在,当您想要访问该用户时,可以将其从
会话中拉出:

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

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


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

感谢您的回答。因此,当logInPage.Master.cs中发生LoginButton_单击时,我使用非静态变量创建一个用户对象,然后将这个新的用户对象实例放入会话中。登录按钮点击后,我将用户重定向到HomePage.aspx。HomePage.Master.cs的Page_Load()函数我需要访问会话并查看是否有登录用户,以便决定显示“创建列表”按钮。但现在会话必须是一个全局变量?这不会产生同样的问题吗?@Yunus,Session根据定义不是一个全局变量,它实际上是一个特殊的字典,当用户从浏览器访问您的站点时,它会在IIS上创建。该会话是基于cookies、IP地址和其他机制进行管理和加载的。这很有趣,我不知道。我以为这节课是我必须写的另一节课。谢谢你的帮助!