2010-09-29 102 views
3

当用户登录到我的asp.net网站我使用下面的代码:Asp.net,在哪里存储登录用户的用户名?

FormsAuthentication.RedirectFromLoginPage(userid, false); 

正如我经常需要使用的用户ID,我可以再后来获得通过的用户ID:

string userid = System.Web.HttpContext.Current.User.Identity.Name; 

现在我也想在每个页面上显示登录的用户名,因此我的问题是如果我需要在每个页面上使用它,我最好将用户名放在哪里。 User.Identity.Name已经被用户使用,所以我不能使用它。另一种解决方案是从每个页面上的数据库获取用户名,但这似乎是一个不好的解决方案。

所以:使用会话存储用户名的最好方法是什么?

+0

我相信价值被缓存。所以你在第一次请求之后并没有实际触及数据库。 – 2010-09-29 14:24:03

+0

对不起,我有点不清楚。编辑了这个问题。 – Martin 2010-09-29 14:28:37

回答

1

你可以在asp.net中存储几乎任何东西在SessionState。只是要小心,并且正确的事情存储在正确的地方(你也可以使用ViewState存储变量。

检查this out如何使用SessionState的跨回传存储和检索变量。

0

使用会话不一个坏主意,但要确保检索值时,检查为NULL时,会话超时。

或者你也可以通过在URL如

/Set 
Response.Redirect("Webform2.aspx?Username=" + this.txtUsername.Text); 

/Read 
this.txtBox1.Text = Request.QueryString["Username"]; 
1
传递变量1475
4

存储信息基本上有6种不同的方式,每种方式都有自己的优点和缺点。

  1. 类成员变量。这些只对一个页面刷新的生命有好处。
  2. HttpContext变量。像类成员变量一样,仅适用于一个页面刷新。
  3. ViewState,这些都是从页面到页面传递以保持状态,但增加了下载数据的大小。另外,对于敏感信息不好,因为它可以被解码。
  4. 饼干。发送每个页面请求。对于敏感信息也不好,即使加密。
  5. 会议。没有传递给最终用户,非常适合敏感信息,但会增加页面的资源使用率,因此尽量减少繁忙网站的使用量非常重要。
  6. 身份验证Cookie用户数据 - 这就像cookies,但可以使用身份验证数据进行解码,并用于创建自定义IIdentity提供程序,以实现您所需的身份信息,例如姓名或其他个人资料信息。然而,尺寸是有限的。
相关问题