ASP.NET 关闭页面服务端对话层清空
创始人
2024-06-06 18:30:23
0

      要清掉Session必须回到服务端,在客户端是不能改变服务端内容的。ASP.NET 关闭页面服务端对话层的清空我们可以变通下——使用ajax。首先我们要判断用户什么时候关闭了页面,这样才能执行下一步动作。不过HTML DOM没要页面关闭的事件,只有onunload和onbeforeunload是与ASP.NET 关闭页面有关的,ASP.NET 关闭页面或刷新后的事件,onbeforeunload是ASP.NET 关闭页面或刷新前的事件,所以我们要用的是onbeforeunload。要判断下用户是关闭页面还是在刷新页面。代码如下:

  1. window.onbeforeunload = function()   
  2. {     
  3.  //这是网上找的,具体没验证过  
  4.       var n = window.event.screenX - window.screenLeft;   
  5.       var b = n > document.documentElement.scrollWidth-20;   
  6.       if(b && window.event.clientY < 0 || window.event.altKey)     
  7.       {     
  8.           ClearSession();   
  9.       }     

ClearSession()为ajax调用请求服务端,服务端接收到请求后执行清空Session的操作。Ajax的东西不多说了,下面为代码。

  1. ========================Default.aspx 开始===========================================  
  2.  
  3. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>  
  4.    
  5. "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  6. "http://www.w3.org/1999/xhtml">  
  7. "server">  
  8.     无标题页  
  9.    
  10.     "text/javascript" src="script.js">  
  11.    
  12.  
  13.  
  14.     "form1" runat="server">  
  15.         
     
  16.             "Label1" runat="server">  
  17.             "Button1" runat="server" OnClick="Button1_Click" Text="写入Session" />
 
  •       
  •  
  •  
  • ========================Default.aspx 结束===========================================  
  •  
  •  
  • ========================Default.aspx.cs 开始===========================================  
  •  
  • using System;  
  • using System.Data;  
  • using System.Configuration;  
  • using System.Web;  
  • using System.Web.Security;  
  • using System.Web.UI;  
  • using System.Web.UI.WebControls;  
  • using System.Web.UI.WebControls.WebParts;  
  • using System.Web.UI.HtmlControls;  
  •    
  • public partial class _Default : System.Web.UI.Page  
  • {  
  •     protected void Page_Load(object sender, EventArgs e)  
  •     {  
  •           
  •         if (!string.IsNullOrEmpty(Request.QueryString["___command"]))  
  •         {  
  •             string cmd = Request.QueryString["___command"];  
  •             if (cmd == "ClearSession")  
  •                 Session.Remove("name");//清空Session  
  •         }  
  •    
  •         if (Session["name"] != null)  
  •             this.Label1.Text = Session["name"].ToString();  
  •     }  
  •     protected void Button1_Click(object sender, EventArgs e)  
  •     {  
  •         Session["name"] = "vvvvvvvvvvvvv";  
  •         if (Session["name"] != null)  
  •             this.Label1.Text = Session["name"].ToString();  
  •     }  
  • }  
  •    
  • ========================Default.aspx.cs 结束===========================================  
  •  
  •  
  •  
  •  
  • ========================script.js 开始===========================================   
  • function GetXmlHttpObject()   
  • {  
  •     //创建XMLHttpRequest对象来发送和接收HTTP请求与响应  
  •     xmlHttpObj = null;  
  •     try   
  •     {  
  •         // FireFox Opera 8.0+ Safari  
  •         xmlHttpObj = new XMLHttpRequest();  
  •         if(xmlHttpObj.overrideMimeType)   
  •         {  
  •             xmlHttpObj.overrideMimeType('text/xml');  
  •         }  
  •     }   
  •     catch(e)   
  •     {  
  •         // IE  
  •         try   
  •         {  
  •             xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");  
  •         }   
  •         catch(e)   
  •         {  
  •             xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");  
  •         }  
  •     }  
  •     return xmlHttpObj;  
  • }  
  •    
  • function StateChanged()   
  • {  
  •     if(___xmlHttp.readyState == 4)   
  •     {   
  •         if(___xmlHttp.status == 200)   
  •         {  
  •         }   
  •         else   
  •         {  
  •         }  
  •     }  
  • }  
  •    
  • var ___xmlHttp=null;  
  • function ClearSession()   
  • {  
  •     if(___xmlHttp==null)  
  •         ___xmlHttp = GetXmlHttpObject();  
  •     if(___xmlHttp == null)   
  •         return false;  
  •           
  •     var url = "?___command=ClearSession&___clientRandom=" + Math.random();  
  •    
  •     ___xmlHttp.open("GET", url, true);  
  •     ___xmlHttp.onreadystatechange = StateChanged;  
  •     ___xmlHttp.send(null);  
  •       
  • }  
  •    
  • window.onbeforeunload = function()   
  • {     
  •       var n = window.event.screenX - window.screenLeft;   
  •       var b = n > document.documentElement.scrollWidth-20;   
  •       if(b && window.event.clientY < 0 || window.event.altKey)     
  •       {     
  •           ClearSession();   
  •       }     
  • }   
  • 本文来自:博客           作者:陈粤雄

    【编辑推荐】

    1. 中途关闭ASP.NET是否影响服务器端执行
    2. 关闭浏览器Session1分钟失效ASP.NET的BUG
    3. 概述ASP.NET页面框架
    4. 描述ASP.NET页面表单
    5. ASP.NET 页面对象模型

    相关内容

    热门资讯

    如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
    如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
    施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
    20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
    德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
    为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
    《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
    2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...