【问题标题】:Storing username in sesson data with asp.net使用 asp.net 在会话数据中存储用户名
【发布时间】:2013-01-03 19:04:25
【问题描述】:

在我的 asp.net 网站上,我启用了需要用户登录的会员功能。 我想将用户名存储在会话数据中,以便在他们登录后使用。

在我的登录页面上,我有以下代码来存储会话数据,但它不起作用:

Session["UserName"] = System.Web.HttpContext.Current.User.Identity.Name;

查询不会加载任何结果,因为控制参数(会话[用户名])返回空。

谁能建议它不起作用的原因是什么?

【问题讨论】:

  • 检查用户名是否存在于 System.Web.HttpContext.Current.User.Identity.Name 中。如果使用表单身份验证,它应该有登录的用户名。
  • 在下一个页面加载之前,用户信息通常不可用。您可能必须在登录后重定向到“跳跃”页面并重定向回用户请求的页面

标签: c# asp.net session asp.net-membership


【解决方案1】:

用户信息通常在下一页加载之前不可用。

您可能必须在登录后重定向到“跳跃”页面并重定向回用户请求的页面。

这是使用 MVC 的方法

登录:

public ActionResult Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        return Hop(returnUrl);
    }
}

跳页:此时用户信息才真正可用。

public ActionResult Hop(string returnUrl)
{
    Session["UserName"] = User.Identity.Name;
    return Redirect(returnUrl);
}

【讨论】:

  • 您是对的,会话未存储,因为它尚不可用。我没有使用您的解决方案,但信息是正确的。我所做的只是将该行移到登录页面的登录页面中。
  • 很高兴为您提供帮助。大多数时候我不会得到一个“着陆页”,所以我经常不得不做上面的跳跃方法
【解决方案2】:

如果您使用会员服务提供商,您应该使用他们的课程来获取用户信息。尝试使用

Session["UserName"] = Membership.GetUser().UserName

【讨论】:

    【解决方案3】:

    您是否在页面上使用了登录控件?如果是这样,您可以直接从控件中获取用户名,如下所示: (假设登录控件名为 loginControl)

    Session["UserName"] = loginControl.UserName;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-13
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多