1

我正在为学校做一个项目。我有一个用 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 部署了网站,并通过从计算机登录对其进行了测试,效果很好。然后我从另一台计算机登录,我仍然作为第一次登录时的最后一个用户登录。我注销,我也从我打开网站的所有其他计算机上注销。

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

4

2 回答 2

0

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

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

于 2013-03-20T05:55:14.087 回答
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
于 2013-03-20T05:52:40.173 回答