设置/更新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来处理这个问题? 我知道这是一个奇怪的请求,但这是该项目的安全要求,所以我试图让它工作!

看起来没有多少人试图做我正在做的事情,但为了记录,我在应用程序结束请求中添加了代码以在请求中查找cookie并在响应中重新创建它们并具有适当的到期时间:

 var timeout = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["myTimeoutConfigSetting"]); foreach (var cookey in Request.Cookies.AllKeys) { if (cookey == FormsAuthentication.FormsCookieName || cookey.ToLower() == "asp.net_sessionid") { var reqCookie = Request.Cookies[cookey]; if (reqCookie != null) { HttpCookie respCookie = new HttpCookie(reqCookie.Name, reqCookie.Value); respCookie.Expires = DateTime.Now.AddMinutes(timeout); Response.Cookies.Set(respCookie); } } } 

这是一个很好的方法

http://www.andreas-kraus.net/blog/increase-aspnet-authentication-membership-cookie-timeout/

这一个http://forums.asp.net/p/1158239/1920541.aspx#1920541

Interesting Posts