代码之家  ›  专栏  ›  技术社区  ›  Sergej Andrejev

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

  •  3
  • Sergej Andrejev  · 技术社区  · 14 年前

    我试过的都没用。目前我有以下代码来更改asp.net会话cookie的过期日期和路径,但asp不想听我的。我在set cookie header中发送同一个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);
        }
      }
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Dan Atkinson    7 年前

    如果你尝试使用系统调用,而不是直接更改cookies..

    HttpContext.Current.Session.Timeout = 20;
    

    更新

    在你的评论之后,从你对我说的话来看,你试图在两个不同的应用程序中使用相同的cookie,并设置不同的超时。但是asp.net只能为每个cookie保留一个会话。要解决这个问题,您必须使用两个不同的命名cookie,而不是不同的cookie路径。

    在每个应用程序目录的web.config上,更改

    <sessionState cookieName="AppSessionCookieName" ..>
    

    更多信息参考
    https://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.100)

    希望这能解决问题。