在ASP.NET 2.0中使用Login控件时,将值从一个页面传递到另一个页面
-
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" />
这种控制组合将执行以下操作:
- 如果用户未登录显示:注册或登录
- 如果用户已登录显示:欢迎回来Zhaph - Logout 醇>
登录链接由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存储在客户端的计算机上。所以你不应该用它们来存储敏感数据。