ASP.NET会话到期

时间:2010-04-14 19:32:25

标签: asp.net

我有一个ASP.NET Web应用程序,无论出于何种原因,当它部署在任何IIS服务器上时,其行为类似于页面缓存,它根本不会回发到服务器。

例如,导航到登录页面,输入凭据,单击登录按钮,然后返回到您登录页面,并清除表单字段。信息未提交回服务器。回发没有执行。浏览器似乎只是从缓存中恢复原始页面。

我发现这个article表示我需要在ASP.NET会话状态中放置一些东西,以使会话保持有效。

  

当用户连接到ASP.NET时   应用程序,一个唯一的会话ID将   与用户有关联。如果   然而,会议中没有任何内容,   没有cookie将被发送到浏览器。   这意味着用户将得到一个   新会话ID下次新建一个URL   已打开或页面已刷新。如果   什么东西放在会议上   (HttpContext.Current.Session [“你好] =   “你好”但是,ASP.NET会发布一个   cookie名为ASP.NET_SessionId。这个   cookie包含用户的会话ID   并且cookie将在最后到期   会议(当你关闭你的   浏览器)。

我将尝试该文章推荐的内容,因为我没有在会话中存储任何内容。

我还在页面中添加了过期标头:

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1))
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.Cache.SetNoStore()

并在html中添加一些元标记:

<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />  

关于这种行为的原因可能是什么?

4 个答案:

答案 0 :(得分:2)

该问题与IIS有关。

Web应用程序的Directory Security设置为在匿名访问下运行 ,其中包含专为应用程序创建的本地用户帐户和应用程序池。

事实证明,Integrated Windows Authentication Enable anonymous access必须两者,否则你会得到这种奇怪的行为。

FWIW,ASP.NET Web应用程序在经典ASP站点下的FRAMESET / FRAME中运行,只有在从本地网络访问站点时才会出现此问题。它外部工作得很好。它在第一次访问时也在本地网络上工作,然后需要清除会话cookie以使其再次工作。

答案 1 :(得分:0)

这听起来不像会话状态问题。这听起来像你的Sub Page_Load

有问题

答案 2 :(得分:0)

这只是登录页面发生的事吗?如果您在多个IIS服务器上尝试过此操作,那么您的页面中的某些内容似乎已关闭。 IIS的标准安装和带按钮的简单ASPX页面将导致回发而无需执行任何操作。如果您没有看到,那么它必须是该页面上的内容。尝试使用标签和按钮创建一个非常简单的页面,并验证您是否可以看到帖子,并且page_load(如RichO所说)正常工作。

答案 3 :(得分:0)

您使用的是哪种服务器配置?这是一个很长的镜头,但是会话是特定于服务器的:如果你有多个Web服务器,后续页面加载可能会(正确)表现,好像会话从未设置过一样。

确保您的浏览器启用了Cookie。会话存储需要cookie。

如果您的开发箱出现这种情况,请在page_load中设置断点(假设您没有使用MVC)或POST控制器操作,以查看服务器端实际发生的情况。

另外,尝试通过HTTP嗅探器(如Fiddler)点击这一点,看看网络上发生了什么。