在ASP.NET 2.0中使用Login控件时,将值从一个页面传递到另一个页面

StackOverflow https://stackoverflow.com/questions/620134

  •  03-07-2019
  •  | 
  •  

我在登录页面中使用ASP.NET 2.0中提供的登录控件。一旦用户成功通过数据库验证,我将用户重定向到home.aspx。在这里,我想将用户名传递给home.aspx,以便在home.aspx中向用户提供他/她的名字。例如:欢迎史密斯

在检查登录凭据期间,我从数据库中的users表中提取用户名。

有人可以告诉我如何以安全的方式做到这一点(可能不安全,但有点)?

谢谢,

有帮助吗?

解决方案

这种数据的一个好地方是会议。在第一页上尝试这样的事情:

this.Session["UserName"] = userName;

然后该会话中该用户的后续页面可以访问 this.Session [" UserName"]

最好的办法是创建一个静态类来管理 Session ,如下所示:

using System;
using System.Web;

static class SessionManager
{
    public static String UserName
    {
        get
        {
            return HttpContext.Current.Session["UserName"].ToString();
        }
        set
        {
            HttpContext.Current.Session["UserName"] = value;
        }
    }

        // add other properties as needed
}

然后您的应用程序可以像这样访问会话状态:

SessionManager.UserName

这将为您提供最大的灵活性和可扩展性。

其他提示

如果您使用标准的asp.net身份验证,那么您应该能够通过页面对象的User属性访问用户名。

User.Identity.Name

正如安德鲁建议的那样,Session是放置用户名的常见位置,但如果可能的话我完全避免使用会话。

您可以使用用户名设置Cookie。

您还可以设置登录控件的DestinationPageUrl属性,以在查询字符串中包含用户名。虽然感觉/看起来很蹩脚。

as ScottS 说,如果您使用标准登录控件和会员提供商,则此信息已在User.Identity.Name中提供。

我发布答案的唯一原因是提及 LoginName 控件,您可以将其放在页面/母版页上并自动完成此操作:

<asp:LoginName id="LoginName1" runat="server" FormatString ="Welcome, {0}" />

这将呈现出“Welcome,Zhaph”用户登录时,如果不登录,则为空。

你也可以将它与 LoginView LoginStatus 控制:

<asp:LoginView ID="RegisterLink" runat="server">
  <AnonymousTemplate>
    <div class="titleRegistration">
      <a href="/Users/Register.aspx">Register</a> or 
    </div>
  </AnonymousTemplate>
  <LoggedInTemplate>
    <div class="titleRegistration">
      Welcome back
        <asp:LoginName ID="LoginName1" runat="server" /> -
    </div>
  </LoggedInTemplate>
</asp:LoginView>
<asp:LoginStatus ID="lsGeneral" runat="server"
  LogoutPageUrl="/Users/Logout.aspx" />

这种控制组合将执行以下操作:

  1. 如果用户未登录显示:注册或登录
  2. 如果用户已登录显示:欢迎回来Zhaph - Logout
  3. 登录链接由web.config中的设置填充,并由LoginStatus控件生成。

是的,正如安德鲁所说,会话是存储敏感数据的主要场所。

但为什么用户的名字很敏感?您可以将其保存在cookie中,并在用户进入时将其打印在home.aspx中。

编辑:您可以在ASP.NET中使用Cookie:

// Setting cookie : 
Response.Cookies["UserName"].Value = "Erhan";
Response.Cookies["UserName"].Expires = DateTime.Now.AddDays(7); // Persists 1 week

// Getting cookie : 
string username = string.Empty;
if(Request.Cookies["UserName"] != null)
{
    username = Server.HtmlEncode(Request.Cookies["UserName"].Value);
}

注意: Cookie存储在客户端的计算机上。所以你不应该用它们来存储敏感数据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top