在 asp.net 中设置会话 cookie 的路径和过期时间

Ser*_*jev 5 html asp.net

我尝试过的任何东西都不起作用。目前我有以下代码来更改 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)

Ari*_*tos 2

也许如果你尝试使用系统调用,而不是直接更改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)

希望这能解决问题。