我正在为学校做一个项目。我有一个用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部署了网站并通过从计算机登录进行了测试,效果很好。然后我从另一台计算机登录,我仍然是第一次登录时的最后一个用户登录。我退出了,我也从我打开网站的所有其他计算机中登出。
所以最后,我不确定如何正确登录系统。
答案 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。因此,您可以轻松跟踪在线人员。