我尝试过的任何东西都不起作用。目前我有以下代码来更改 asp.net 会话 cookie 到期日期和路径,但 asp 不想听我的。我有时在 Set-Cookie 标头中发送相同的 cookie 两次,有时它发送它的默认 cookie,忽略路径和到期日期,有时它按预期发送所有内容,有时它根本不发送 Set-Cookie。我该怎么办。这让我发疯:(
我在 Global.asax 中的代码
protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
{
/// only apply session cookie persistence to requests requiring session information
if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)
{
var sessionState = ConfigurationManager.GetSection("system.web/sessionState") as SessionStateSection;
var cookieName = sessionState != null && !string.IsNullOrEmpty(sessionState.CookieName)
? sessionState.CookieName
: "ASP.NET_SessionId";
var timeout = sessionState != null
? sessionState.Timeout
: TimeSpan.FromMinutes(20);
/// Ensure ASP.NET Session Cookies are accessible throughout the subdomains.
if (Request.Cookies[cookieName] != null && Session != null && Session.SessionID != null)
{
Response.Cookies[cookieName].Value = Session.SessionID;
Response.Cookies[cookieName].Path = Request.ApplicationPath;
Response.Cookies[cookieName].Expires = DateTime.Now.Add(timeout);
}
}
}
Run Code Online (Sandbox Code Playgroud)
也许如果你尝试使用系统调用,而不是直接更改cookie..
HttpContext.Current.Session.Timeout = 20;
Run Code Online (Sandbox Code Playgroud)
根据您的评论以及您对我说的话,您尝试对 2 个不同的应用程序使用相同的 cookie,并设置不同的超时。但 ASP.NET 只能为每个 cookie 保留一个会话。要解决这个问题,您必须使用 2 个不同的命名 cookie,而不是不同的 cookie 路径。
在每个应用程序目录的 web.config 上,更改
<sessionState cookieName="AppSessionCookieName" ..>
Run Code Online (Sandbox Code Playgroud)
更多信息参考
https://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.100)
希望这能解决问题。