我们在开发网页的过程中遵循一个程序,就是将页面绑定到一个或多个会话变量,这些会话变量仅用于该页面,以保存当前的处理对象,因此在关闭页面时不需要对他们来说。
关闭页面时如何丢弃这些会话变量? 关于该技术或如何解决该问题的任何建议?
答案 0 :(得分:5)
当页面保持/关闭时,不会引发服务器端事件。另外,当页面离开时,不会调用Session_End事件(在其他答案中提到),因为用户可能导航到同一Web应用程序的其他页面(因此会话将继续存在)。
我可以想出解决(或解决)这个问题的3种可能方法:
1 - 使用 ViewState 来存储带有页面范围的数据。这就是ViewState的用途,除非你拥有大量数据,否则它应该不是问题。如果您有大量数据,请记住,它将被序列化/反序列化并发送到客户端/返回服务器以获取每个请求(这可能会导致大量请求,从而导致性能下降)。
2 - 不是将数据放入会话中,而是将其放入缓存(滑动到期超时较低)。在您的页面上,您可以使用与会话相同的方式访问数据,即data = Cache [“data”],但您必须准备好从Cache中删除数据(您必须重新加载它)如果两个请求之间的时间大于到期时间,则再次从DB(例如))。
3 - 使用客户端(javascript) onUnload 事件,并触发一些操作(例如ajax回调)以删除来自会话的数据。但我认为onUnload事件不可靠(在任何情况下都不会被触发,例如当崩溃或任务管理器终止浏览器时,或者如果禁用了javascript)。
答案 1 :(得分:0)
如果仅对该页面使用变量,请将它们存储在viewstate中。 ViewState适用于页面范围的变量。
答案 2 :(得分:-1)
如果您正在使用ASP.NET会话(可能是您的会话),则可以将global.asax文件添加到您的解决方案中。在那里找到这个事件代表(如果没有,创建它):
protected void Session_End(object sender, EventArgs e)
{
}
..在这里,您可以清除会话集合。
protected void Session_End(object sender, EventArgs e)
{
Session.Clear();
}
当会话过期或用户点击退出时会触发此事件:)