【问题标题】:asp.net session stateasp.net 会话状态
【发布时间】:2009-05-18 22:54:25
【问题描述】:

在会话开始期间,可以访问请求对象。 Session End 怎么样,它仍然可以访问 Request 对象吗?例如,我想计算当前有多少浏览器连接到我的应用程序。

编辑 1:如果 Session End 无权访问请求对象,它可以访问什么信息?会话 ID 等?

编辑 2:如果 Session End 不能用于跟踪断开连接,如何在 ASP.Net 中跟踪断开连接?

谢谢

【问题讨论】:

    标签: asp.net session


    【解决方案1】:

    不,Request 对象在 Session End 中不可用。

    还要注意,Session End 仅在您从代码中调用 Session.Abandon() 时触发,而不是在 Session 由于自然超时或您有什么问题而过期时触发。因此,它不是用于跟踪断开连接的可靠方法。

    【讨论】:

    • 嗨 Rex,感谢您的回复,如何跟踪我的应用程序中当前连接的浏览器会话(例如 Firefox 5 会话、IE 10 会话等)。
    • 来自 MSDN 文档“Session_OnEnd 子例程在调用 Abandon 方法或会话过期时运行。” msdn.microsoft.com/en-us/library/ms178583(VS.80).aspx
    • @GregB 它确实这么说,但是当我第一次试图弄清楚为什么 Session_End 没有按我预期的方式工作时,我在我的 Session_End 事件上留下了一个带有断点的调试器并且它从未被击中,除非我明确调用 Session.Abandon()
    【解决方案2】:

    如果使用 InProc,Session_End 将被触发。

    Session_End 将被触发 1) 在 n 分钟不活动后(n = 超时值),或 2) 如果有人调用 Session.Abandon()

    如果关闭浏览器,Session_End 不会被触发。

    Session_End 需要设置会话状态。

    如果需要原始 Request.Browser 数据,应将其保存在 Session State 中。

    在 Session_End 期间,它可以访问 Session State。

    【讨论】:

    • 能否举例说明如何访问 Session_End 中的会话。我做不到...
    • void Session_End(object sender, EventArgs e) { string str = Session[browser]; }
    【解决方案3】:

    来自the documentation

    Session_OnEnd 事件发生在 会话被放弃或超时。的 服务器内置对象,只有 应用程序对象、服务器对象和 会话对象对象可用。

    备注

    你不能调用 Server.MapPath Session_OnEnd 脚本中的方法。经过 默认情况下,Session_OnEnd 作为 匿名用户,定义为 应用。如果有 不是匿名用户或登录 对于匿名用户失败, OnEnd 函数将不会被调用,并且 将记录一个事件。

    【讨论】:

    • 我从未见过 Session End 在会话超时时触发。你有吗?
    • @Rex M:Session End 仅在您使用进程内会话时触发,而不是在您使用状态服务器或 SQL Server 作为会话存储时触发。
    猜你喜欢
    • 2011-06-07
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2011-10-11
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多