加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – ASP.NET MVC 3 – 处理会话变量

发布时间:2020-12-15 08:02:18 所属栏目:百科 来源:网络整理
导读:我有一个使用Form的身份验证的应用程序,当用户登录时,我检索用户的实际名称并将其分配给会话变量,如下所示: [HttpPost]public ActionResult LogOn(LogOnModel model,string returnUrl){ if (ModelState.IsValid) { if (Membership.ValidateUser(model.UserN
我有一个使用Form的身份验证的应用程序,当用户登录时,我检索用户的实际名称并将其分配给会话变量,如下所示:
[HttpPost]
public ActionResult LogOn(LogOnModel model,string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(model.UserName,model.Password))
        {
            Session["Name"] = client.GetName(model.UserName);
            FormsAuthentication.SetAuthCookie(model.UserName,model.RememberMe);
            return RedirectToAction("Index","Home"); 
        }
    }
}

然后将其显示在我的索引视图中,如下所示:

<h3>Welcome,@Session["Name"]</h3>

所以,如果我的名字是鲍勃,它会在我的视图中输出“欢迎,鲍勃”,这很好.但是,一旦我离开页面或关闭我的浏览器并在几分钟后返回,似乎这些Session变量已被销毁,因为它只输出“欢迎”,但我仍然登录,所以我的会话没有被销毁?我在web.config中将会话设置为在60分钟后被销毁:

<sessionState regenerateExpiredSessionId="true" timeout="60" />

编辑

这只发生在我登录时检查“记住我”框时,因为我猜这会保留一个cookie客户端,因此当我重新打开浏览器时,我仍然登录但是创建一个新的会话ID,因为我做了一个响应.在我关闭浏览器之前,在我的索引页面上写入(Session.SessionID)并且ID与我重新打开它时的ID不同.如果我没有选中“记住我”框,那么我将在重新打开浏览器后再次登录

解决方法

我的会话变量遇到了同样的问题.如果在登录时选择了“记住我”选项,它将绕过我的代码以设置下次用户访问该站点时所需的会话变量.

如果IsAuthenticated为true,我可以通过重新填充会话变量来解决我的问题.

protected void Session_Start(object sender,EventArgs e)
{
    if (User.Identity.IsAuthenticated)
    {
        Session["Name"] = client.GetName(User.Identity.Name);   
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读