【问题标题】:Lose changed data in session在会话中丢失更改的数据
【发布时间】:2010-03-09 18:52:55
【问题描述】:

我们的 asp.net 2.0 应用程序在将响应发送回客户端之前有一个很长的过程(同步)。我观察到,在客户端 IE8 等待响应很长一段时间后,当我们的应用程序仍在处理第一个请求时,发送了第二个请求,与最初的请求完全相同。

当初始请求到达时,我使用带有预定义键的页面会话来存储一个标志,然后在客户端 IE 等待响应时启动长进程,因此如果第二个请求进来,我们的应用程序会检查会话值。在我们的应用程序设置会话标志并开始处理后,我使用 Fiddler “Abort Session” 中止初始请求,立即自动发送第二个请求(与第一个相同),但之前设置的会话值似乎不再存在。

有什么想法吗?

【问题讨论】:

    标签: asp.net session


    【解决方案1】:

    当第二个请求在您正在进行的过程中出现时,它是否会覆盖您当前请求的值,因为它只存储一个项目?假设两个请求都来自同一个会话。

    也许考虑存储一个项目列表,以便您可以将第二个项目添加到标志列表中,然后找到任何以前的项目并将其删除。

    也许在开始第二个请求会话之前终止当前会话中的请求?

    我不太了解您的问题/解决方案,但希望对您有所帮助。

    根据您的评论进行修改:

    如果它不再存在,可能是由于您的会话超时并擦除了值,因此第二个将无法访问它。第二个连接是否在完全相同的会话下进入?比较两种情况下的会话 ID。还要检查你的超时。

    您还可以将此信息存储在您的应用程序缓存中,该缓存具有真正的长期有效期。如果您只希望每个用户一个进程,然后存储您的值,则拥有一个字典,其键是会话 ID,甚至是用户。当第二个请求来自同一用户时,无论会话 ID 是什么,您都可以找到它。只需确保在您的流程完成后进行清算即可。

    【讨论】:

    • 是的,它是一项,但它会在设置值之前先检查标志是否已存储在会话中。问题是第二个请求进来了,第一个在 session 中设置的标志已经不存在了。
    猜你喜欢
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2013-07-09
    • 2014-12-05
    • 2018-01-27
    • 1970-01-01
    • 2013-06-08
    相关资源
    最近更新 更多