Tag: asp.net session

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

我有一个使用Form的身份validation的应用程序,当用户登录时,我检索用户的实际名称并将其分配给会话变量,如下所示: [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”); } } } 然后将其显示在我的索引视图中,如下所示: Welcome, @Session[“Name”] 所以,如果我的名字是鲍勃,它会在我的视图中输出“欢迎,鲍勃”,这很好。 但是,一旦我离开页面或关闭我的浏览器并在几分钟后返回,似乎这些Session变量已被销毁,因为它只输出“欢迎”,但我仍然登录,所以我的会话没有被销毁? 我在web.config中将会话设置为在60分钟后被销毁: 编辑 这只有在我登录时检查“记住我”框时才会发生,因为我猜这会保留一个cookie客户端,所以当我重新打开浏览器时,我仍然登录但是创建一个新的会话ID,因为我做了一个Response.Write(Session.SessionID)在我关闭浏览器之前,在我的索引页面上Response.Write(Session.SessionID)并且ID与我重新打开它时的ID不同。 如果我没有选中“记住我”框,那么我将在重新打开浏览器后再次登录

设置/更新aspxauth和asp.net_sessionid cookie的到期日期

我想知道是否有一种方法可以设置您的.NET应用程序来设置和更新浏览器中的aspxauth和asp.net_sessionid cookie的到期时间? 根据我的看法,cookies的到期日期类似于1/1/0001,告诉浏览器保留它们直到浏览器关闭(我已经使用Chrome观察到了这一点)。 我想设置一个明确的时间,但是,我需要在每个请求上更新该时间。 我试图用以下代码执行此操作: var timeoutMins = Session.Timeout; if (Response.Cookies.Count > 0) { foreach (string s in Response.Cookies.AllKeys) { if (s == FormsAuthentication.FormsCookieName || s.ToLower() == “asp.net_sessionid”) { Response.Cookies[s].Expires = DateTime.Now.AddMinutes(timeoutMins); } } } 我尝试在global.asax End_Request事件中执行此操作,虽然这似乎不是一个好地方,因为它每页触发几次并且您无法访问sessionstate超时; 此外它只在登录和注销时触发,所以基本上我可以设置一次,但我永远不能更新它。 这会导致我的用户在登录后15分钟登出,即使他们已经处于活动状态。 好像会有某些设置告诉.net来处理这个问题? 我知道这是一个奇怪的请求,但这是该项目的安全要求,所以我试图让它工作!