【问题标题】:How to make an ASP.NET session cookie expire with the ASP.NET HttpSession?如何使用 ASP.NET HttpSession 使 ASP.NET 会话 cookie 过期?
【发布时间】:2010-09-25 17:21:06
【问题描述】:

我创建了一个 HttpCookie 以便跨子域共享数据:

HttpCookie cookie = new HttpCookie("sessionGUID");
cookie.Value = value;
cookie.Domain = ".example.com";

Response.Cookies.Set(cookie);

我不小心假设它是一个“会话”cookie(不会过期),它会与我的 ASP.NET 会话一起过期。当然,对于浏览器来说,这是一个“浏览器会话”cookie,并且没有链接到 ASP.NET 会话。

我想要做的是将这些“浏览器会话”cookie 与 ASP.NET 会话一起过期。

我想我只需要将 Expires 设置为与 ASP.NET 会话相同的值。我将如何以编程方式确定这一点?

【问题讨论】:

    标签: asp.net session httpcookie


    【解决方案1】:

    如果他们只是需要靠近,那么像这样:

    int expirationMinutes = Session.Timeout;
    if (System.Web.HttpContext.Current.Response.Cookies["monster"]!=null)
    {
        System.Web.HttpContext.Current.Response.Cookies["monster"].Expires =
                                     DateTime.Now.AddMinutes(expirationMinutes);
    }
    

    会话计时器会重置用户发布或获取的所有内容,因此由于代码正在服务器上执行,当前会话的剩余时间为 Session.Timeout,例如 20 分钟。

    20 分钟后,cookie 将不被接受,您必须发布一个新的。

    【讨论】:

    • 哦。我确实查看了 Session 对象,但我懒得向下滚动并查看 Timeout 属性。乍一看,它看起来并没有什么有趣的东西,而且我在其他一些物体上也找不到它。谢谢!
    • Session 对象在每次页面请求时都会重置其超时。因此,除非对每个请求都执行此代码,否则 cookie 过期将很快与 Session 过期不同步。
    • Expires 属性是一个绝对的 DateTime,而 Session.Timeout 是一个以分钟为单位的 int 持续时间。这些不相关;这不会编译。
    猜你喜欢
    • 2016-11-08
    • 2017-03-16
    • 2014-10-07
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多