我有一个Web应用程序,它使用Session变量来保存某些数据表的状态。我没有使用viewstate来增加页面的重量。
我不需要在页面更改时保持状态,所以我想在页面上释放这些会话变量。
用户更改网站页面时如何拦截?有一种像“Page Leave”这样的方法吗?
答案 0 :(得分:7)
会话数据对于在页面生命周期之外存储数据非常有用。如果您不想将其存储在页面的生命周期之外,那么会话数据不适合您。
答案 1 :(得分:3)
导航到页面后尝试此操作
Session.Remove("Name");
或完全删除会话
Session.Clear();
or
Session.Abadon();
答案 2 :(得分:1)
我建议您使用网站的所有页面使用类库,并使用允许您定义链接的PreviousPage
属性(状态机图)
您可以定义Session.Remove进行清理
另一个评论:建议你使用viewstate,因为pemit你持久化数据而不添加代码,重要的是<每页30K。就这个
答案 3 :(得分:1)
在Web应用程序中,用户可以通过各种方式“离开”页面。 Web应用程序的模型是基于请求的;客户端和服务器在请求之间不知道彼此。一些技术如cookie或会话状态试图缩小这个差距,但基本上没有连接。
因此,如果用户离开页面,浏览器将不会通知服务器,因此不存在Page_Leave等事件。但是,您可以在某些情况下解决此问题(例如,如果用户更改为您的应用程序的另一个页面),但不是全部。
正如@ Terror.Blade指出的那样,会话数据用于需要在单个页面生命周期中持久化的数据。因此,我建议不要将这些数据放入Session中,并在用户离开页面后找到一种(非常稳定的)删除方式。
因为看起来你不能再为同一个用户请求DataTable(尽管这是一种常见的方式)。我可以建议你以下的替代方案:
答案 4 :(得分:1)
一种方法是使用网络应用程序的global.asax
文件,它是Application_BeginRequest
事件:
public class Global : System.Web.HttpApplication
{
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext context = base.Context;
HttpRequest request = context.Request;
string pageName = System.IO.Path.GetFileNameWithoutExtension(request.RawUrl);
if (pageName != "YourPageName")
{
if(context.Session["NameOfSessionVariable"] != null)
context.Session.Remove("NameOfSessionVariable");
}
}
}
然而,当会话到期时,我会让它静静地死去。