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

在asp.net中设置会话cookie的路径和过期时间,asp.net,html,Asp.net,Html,我试过的任何东西都不起作用。目前,我有以下代码来更改asp.net会话cookie的过期日期和路径,但asp不想听我的。我有时在Set cookie头中发送两次相同的cookie,有时它发送默认cookie忽略路径和过期日期,有时它按预期发送所有内容,有时它根本不发送Set cookie。我该怎么办。这让我发疯:( 我在Global.asax中的代码 protected void Application_PreRequestHandlerExecute(Object sender, EventA

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

如果您尝试使用系统调用,而不是直接更改cookie,则可能会发生此情况

HttpContext.Current.Session.Timeout = 20;
更新 在您的评论之后,根据您对我说的,您尝试对两个不同的应用程序使用相同的cookie,并设置不同的超时。但是asp.net只能为每个cookie保留一个会话。要解决此问题,您必须使用两个不同的命名cookie,而不是不同的cookie路径

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

<sessionState cookieName="AppSessionCookieName" ..>

更多信息的参考资料


希望这能解决问题。

路径没有问题。我在同一个域上有同一应用程序的不同实例。我不想设置路径以允许它们在不改变彼此会话的情况下并排工作。Request.ApplicationPath对我来说也不错。它不是我目前看到的物理路径。它返回类似“/MyApplication”或“/”的内容这取决于它在IIS中的配置方式,但如果我怀疑Request.ApplicationPath没有提供我所期望的内容,我也可以将此值存储在Web.Config中。目前,从何处获取此路径不是问题,而是如何将其传递到浏览器。此外,我还发现了一个错误。在ITest服务器上,我发现了此错误,并且它过期得太快。我的d上看不到这一点ev机器,因为我在这里有不同的web.config。但是关于路径的问题仍然有效。我想我自己找到了路径问题的答案。私有静态HttpCookie CreateSessionCookie(字符串id){HttpCookie cookie=new HttpCookie(config.CookieName,id);cookie.Path=“/”;cookie.HttpOnly=true;返回cookie;}