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

我在登录页面中使用ASP.NET 2.0中提供的登录控件。 一旦用户成功通过数据库validation,我将用户重定向到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身份validation,那么您应该能够通过页面对象的User属性访问用户名。

User.Identity.Name

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

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

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

正如ScottS所说,如果您使用的是标准登录控件和成员资格提供程序,则可以在User.Identity.Name中使用此信息。

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

  

这将在用户登录时呈现“Welcome,Zhaph”,如果不是,则不呈现。

您还可以将此与LoginView和LoginStatus控件完美结合:

      
Welcome back -

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

  1. 如果用户未登录显示:注册或登录
  2. 如果用户已登录显示:欢迎回Zhaph – Logout

Login链接由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存储在客户端的计算机上。 所以你不应该用它们来存储敏感数据。