0

我有一个登录页面和一个全局页面,用户在登录后被重定向到该页面。

我需要知道如果用户未登录,这是否是保护某些要访问的 Web 文件的好方法。

global.aspx代码(用户登录后被重定向的受保护页面)

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["Login"] != null)
        {
            if (Session["Login"].Equals("Logged"))
            {
                userName.Text = (string)Session["UserTest"].ToString();
            }
        }
        else
            Response.Redirect("http://localhost:port/Login.aspx");
    }

登录页面代码:

Session["Login"] = "Logged";
Session["UserTest"] = "Test123";
Response.Redirect("http://localhost:port/Global.aspx");

谢谢

4

1 回答 1

2

我认为您应该阅读有关表单身份验证的信息。还有另一篇关于它的文章。您编写的代码看起来不错,但我的上帝,您正在重新发明轮子。

表单身份验证的想法是,当前经过身份验证的用户名存储在加密的 cookie 中(除非另有定义)并随每个请求一起发送。表单身份验证模块一旦激活,就会在每个请求中检查此 cookie 的存在,并自动分配该User属性以使其可用于您的所有页面。如果有人试图访问受保护的页面,该模块只会将他重定向到在web.config. <location>另一方面,web.config 中的元素允许您指定应用程序的哪些页面/文件夹需要身份验证。

因此,一旦您激活表单身份验证,您的受保护页面如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    userName.Text = User.Identity.Name;
}

Login页面(不应受到保护):

public void Login_Click(object sender, EventArgs e) 
{
    if (Membership.ValidateUser(userName.Text, password.Text))
    {
        FormsAuthentication.RedirectFromLoginPage(username.Text, false)
    }
    else
    {
        errorLabel.Text = "Invalid credentials";
    }
}

您还可以签出可以进一步简化此操作的登录控件。

于 2012-07-15T19:36:27.950 回答