设置/更新 aspxauth 和 asp.net_sessionid cookie 的过期时间
本文关键字:cookie sessionid 过期 时间 net 更新 aspxauth asp 设置 | 更新日期: 2023-09-27 18:33:18
我想知道是否有一种方法可以设置.NET应用程序以设置和更新浏览器中aspxauth和asp.net_sessionid cookie的过期时间?
据我所知,cookie 的到期日期类似于 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 事件中执行此操作,尽管这似乎不是一个好地方,因为它每页触发几次并且您无法访问会话状态超时; 此外,它仅在登录和注销时触发,所以基本上我可以设置一次,但我永远无法更新它。这会导致我的用户在登录后 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