2013-03-20 60 views
1

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

好的,所以你遇到的第一个问题是登录的用户信息是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,这是有道理的,因为他们登录了会话对不对?当你想获取该用户可以拉出来的Session

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 
+0

非常感谢您的回答。因此,当logIntButton_Click发生在logInPage.Master.cs中时,我创建了一个包含非静态变量的User对象,然后将此新的User对象实例放入Session中。在此loginButton_Click之后,我将用户重定向到HomePage.aspx。 HomePage.Master.cs的Page_Load()函数我需要访问会话并查看是否有登录用户,以便我可以决定显示“创建列表”按钮。但是现在会话必须是全局变量?这不会造成同样的问题吗? – 2013-03-20 19:56:11

+0

@Yunus,根据定义,会话不是一个全局变量,它实际上是一个特殊的字典,当用户通过浏览器访问您的网站时,该会话在IIS上创建。该会话基于Cookie,IP地址和其他机制进行管理和加载。 – 2013-03-20 20:01:53

+0

这很有趣,我不知道。我认为会议是我必须写的另一课。感谢您的帮助! – 2013-03-20 23:59:03

0

第一种方法:等Page_Load,当您验证用户,做到这一点也当用户点击注销,然后用户类中的loggedIn变量再次变为false。

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