在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控件完美结合:
Register or Welcome back -
这种控件组合将执行以下操作:
- 如果用户未登录显示:注册或登录
- 如果用户已登录显示:欢迎回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存储在客户端的计算机上。 所以你不应该用它们来存储敏感数据。