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

时间:2010-03-25 07:35:05

标签: asp.net html

我尝试的任何东西都不起作用。 Currenly我有以下代码来改变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);
    }
  }
}

1 个答案:

答案 0 :(得分:2)

也许如果您尝试使用系统调用,而不是直接更改Cookie ..

HttpContext.Current.Session.Timeout = 20;

更新

您的评论之后,以及您对我说的是,您尝试使用相同的Cookie,针对2个不同的应用程序,并设置不同的超时。但是asp.net只能为每个cookie保留一个会话。要解决这个问题,您必须使用2个不同的命名cookie,而不是不同的cookie路径。

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

<sessionState cookieName="AppSessionCookieName" ..>

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

希望这能解决问题。