【问题标题】:ASP.NET session - How can I tell if a session is new due to expiration or initial visit?ASP.NET 会话 - 如何判断会话是否由于过期或初次访问而成为新会话?
【发布时间】:2010-09-25 05:51:39
【问题描述】:

我们有一个用户可以通过多种方式点击的搜索结果页面。 90% 的方式将设置一个“搜索条件”会话对象,结果页面将使用它来检索搜索结果。

当未找到会话对象时,我们通常会向用户显示“无效搜索”消息,并为他们提供指向主搜索页面的链接。

例外情况是用户点击将搜索结果页面作为默认页面的网页(我们使用 .NET 的主题为我们的网站提供私有标签,并使用我们的附属公司的颜色和徽标对其进行蒙皮)。如果搜索结果页面是站点的默认页面,则在没有会话条件时执行特殊搜索。

这在我们的测试中运行良好,但我们希望处理一个边缘情况:当会话到期而某人在搜索结果页面上(来自搜索页面)然后他们点击下一页的结果,他们将得到这个特殊的搜索,而不是“过期会话”消息。

这是我们使用的基本格式,其中 searchCriteria 是从会话中设置的。

if (searchCriteria == null)
{
    if (/*Check if this is the default url for this site*/)
    {
      //Preform special search
    }
    else
    {
      //Display 'session expired message'
    }
}

有没有一种方法可以检查内部 if 块中的 Session 以查看用户的会话是否由于现有会话到期而成为新会话?还是浏览器只是在会话 cookie 过期时丢弃它们?

浏览器有区别吗?有些人是否将过期的会话 cookie 返回到服务器,而其他人会在过期时将其删除?还是一致的?

【问题讨论】:

    标签: c# asp.net .net-3.5 session


    【解决方案1】:

    所有浏览器都会返回过期的会话cookie。他们会这样做,直到浏览器重新启动或被服务器响应重写。

    bnkdev 的答案使用这个事实通过查看 cookie 是否已经设置来检测新的和过期的。它简单易行,很可能对您有用,但仅在将 cookie 用于会话 id 时才有效。它不适用于无 cookie 会话。

    此外,您应该从 sessionState 配置元素的 cookieName 属性中获取它,而不是硬编码“ASP.NET_SessionId”。

    【讨论】:

      【解决方案2】:

      这是一个出色的article,它基于this one。我想你会在这里找到你的答案(特别是第二篇文章的第 2 页)

      【讨论】:

        猜你喜欢
        • 2012-08-23
        • 1970-01-01
        • 2021-08-09
        • 1970-01-01
        • 2011-10-22
        • 1970-01-01
        • 1970-01-01
        • 2018-01-05
        • 2015-04-02
        相关资源
        最近更新 更多