当前位置:  开发笔记 > 编程语言 > 正文

是什么导致"会话状态已创建会话ID,但无法保存,因为应用程序已刷新响应."

如何解决《是什么导致"会话状态已创建会话ID,但无法保存,因为应用程序已刷新响应."》经验,为你挑选了3个好方法。

我间歇性地犯了这个错误.

我发现此链接很好地总结了我在Google上能够找到的内容:http: //www.wacdesigns.com/2009/02/03/session-state-has-created-a-session-id-but-不能保存,它-因为最响应是,已经刷新由这应用程序/

基本上它表示您可以尝试设置Web配置设置DisplayWhenNewSession,或者尝试通过在Session_OnStart中获取Session.SessionID来将会话状态事物投入生活.

但有人:

a)对此有一个解释

或者甚至更好,b)有一个久经考验的修复

我意识到在做任何会影响http响应头的事情之后我无法刷新响应.如果我这样做会导致每次都出错,但这是间歇性的.SessionID肯定是由ASP.NET在页面响应开始时自动创建的,在ASPX页面或Page_Load(调用所有刷新的地方)之前.

更新: 反思我发现将文件流式传输到浏览器时会发生这种情况.大多数浏览器实际上都是搜索引擎机器人.我可以通过开始下载然后关闭浏览器来重新创建此错误,因此可能是浏览器在取消下载操作之前没有等待下载完成.我也在其他正常页面上看过这个,但99%的时间是下载页面.



1> eitama..:

我有!

在global.asax文件中,您执行以下操作:

void Session_Start(object sender, EventArgs e) 
{
    // Code that runs when a new session is started
    string sessionId = Session.SessionID;
}

太简单.有用!


这对我也有用,但我很想知道为什么.
它对我不起作用.仍然得到错误.

2> JoeBilly..:

在以下情况下似乎出现此错误:

应用程序启动

即使你在Session_Start/End事件中做了某些事情,你也在使用Global.asax

您的应用程序过早强制刷新响应

你没有在冲洗之前使用Session

它在尝试在发布时保存sessionID时由会话状态引发:

System.Web.SessionState.SessionIDManager.SaveSessionID(HttpContext context, String id, Boolean& redirected, Boolean& cookieAdded)
System.Web.SessionState.SessionStateModule.CreateSessionId()
System.Web.SessionState.SessionStateModule.DelayedGetSessionId()
System.Web.SessionState.SessionStateModule.ReleaseStateGetSessionID()
System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs)
System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

我相信Global.asax的存在导致会话ID在SessionStateModule(后期?)的发布时保存,即使在调用SessionID时没有使用会话而不是HttpSessionState.

这就是为什么字符串sessionId = Session.SessionID; 诀窍避免问题.

我想它只会出现在应用程序启动时因为初始化行为.

解决方案/技巧:

如前所述,避免在Page_Load中刷新

在页面上停用会话状态(EnableSessionState)

在刷新之前使用SessionID技巧

如果您不关心刷新后可能发生的错误,请使用Response.End()代替.Flush()


诀窍避免问题.

3> Curt J. Samp..:

我相信这里的问题可能正是你正在做的事情导致页面输出Page_Load,根据ASP.NET页面生命周期概述早在渲染阶段之前.

确保在PreRender阶段之后,您永远不会做任何可能触发页面输出的事情.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有