ASP.NET会话 - 如何通过到期或初次访问来判断会话是否是新的?

时间:2008-12-03 23:20:19

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

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

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

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

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

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

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返回给服务器,而其他人在过期时删除它们吗?或者它是否一致?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

bnkdev的答案使用此事实通过查看cookie是否已设置来检测新的vs过期。它简单易用,可能对您有用,但只有当cookie用于会话ID时才有效。它不适用于无cookie会话。

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