在客户端改变服务端的内容部可能实现,本文为大家介绍下ASP.NET 关闭页面清除服务端Session的方法,希望对您有所帮助。

要清掉Session有必要回到服务端,在客户端是不能改动服务端内容的。ASP.NET 封闭页面服务端对话层的清空咱们能够变通下——运用ajax。首要咱们要判别用户什么时候封闭了页面,这样才干履行下一步动作。不过HTML DOM没要页面封闭的事情,只要onunload和onbeforeunload是与ASP.NET 封闭页面有关的,ASP.NET 封闭页面或改写后的事情,onbeforeunload是ASP.NET 封闭页面或改写前的事情,所以咱们要用的是onbeforeunload。要判别下用户是封闭页面仍是在改写页面。代码如下:

ASP.NET 封闭页面服务端对话层清空  关闭页面 第1张

  1. window.onbeforeunload=function()
  2. {
  3.  //这是网上找的,详细没验证过
  • varn=window.event.screenX-window.screenLeft;
  • varb=n>document.documentElement.scrollWidth-20;
  • if(b&&window.event.clientY<0||window.event.altKey)
  • {
  • ClearSession();
  • }
  • }
  • ClearSession()为ajax调用恳求服务端,服务端接纳到恳求后履行清空Session的操作。Ajax的东西不多说了,下面为代码。

    1. ========================Default.aspx开端===========================================
    2. <%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
    3. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    4. <htmlxmlns="http://www.w3.org/1999/xhtml">
    5. <headrunat="server">
    6. <title>无标题页</title>
    7. <scripttype="text/javascript"src="script.js"></script>
    8. </head>
    9. <body>
    10. <formid="form1"runat="server">
    11. <div>
    12. <asp:LabelID="Label1"runat="server"></asp:Label>
    13. <asp:ButtonID="Button1"runat="server"OnClick="Button1_Click"Text="写入Session"/></div>
    14. </form>
    15. </body>
    16. </html>
    17. ========================Default.aspx完毕===========================================
    18. ========================Default.aspx.cs开端===========================================
    19. usingSystem;
    20. usingSystem.Data;
    21. usingSystem.Configuration;
    22. usingSystem.Web;
    23. usingSystem.Web.Security;
    24. usingSystem.Web.UI;
    25. usingSystem.Web.UI.WebControls;
    26. usingSystem.Web.UI.WebControls.WebParts;
    27. usingSystem.Web.UI.HtmlControls;
    28. publicpartialclass_Default:System.Web.UI.Page
    29. {
    30. protectedvoidPage_Load(objectsender,EventArgse)
    31. {
    32. if(!string.IsNullOrEmpty(Request.QueryString["___command"]))
    33. {
    34. stringcmd=Request.QueryString["___command"];
    35. if(cmd=="ClearSession")
    36. Session.Remove("name");//清空Session
    37. }
    38. if(Session["name"]!=null)
    39. this.Label1.Text=Session["name"].ToString();
    40. }
    41. protectedvoidButton1_Click(objectsender,EventArgse)
    42. {
    43. Session["name"]="vvvvvvvvvvvvv";
    44. if(Session["name"]!=null)
    45. this.Label1.Text=Session["name"].ToString();
    46. }
    47. }
    48. ========================Default.aspx.cs完毕===========================================
    49. ========================script.js开端===========================================
    50. functionGetXmlHttpObject()
    51. {
    52. //创立XMLHttpRequest目标来发送和接纳HTTP恳求与呼应
    53. xmlHttpObj=null;
    54. try
    55. {
    56. //FireFoxOpera8.0+Safari
    57. xmlHttpObj=newXMLHttpRequest();
    58. if(xmlHttpObj.overrideMimeType)
    59. {
    60. xmlHttpObj.overrideMimeType('text/xml');
    61. }
    62. }
    63. catch(e)
    64. {
    65. //IE
    66. try
    67. {
    68. xmlHttpObj=newActiveXObject("Msxml2.XMLHTTP");
    69. }
    70. catch(e)
    71. {
    72. xmlHttpObj=newActiveXObject("Microsoft.XMLHTTP");
    73. }
    74. }
    75. returnxmlHttpObj;
    76. }
    77. functionStateChanged()
    78. {
    79. if(___xmlHttp.readyState==4)
    80. {
    81. if(___xmlHttp.status==200)
    82. {
    83. }
    84. else
    85. {
    86. }
    87. }
    88. }
    89. var___xmlHttp=null;
    90. functionClearSession()
    91. {
    92. if(___xmlHttp==null)
    93. ___xmlHttp=GetXmlHttpObject();
    94. if(___xmlHttp==null)
    95. returnfalse;
    96. varurl="?___command=ClearSession&___clientRandom="+Math.random();
    97. ___xmlHttp.open("GET",url,true);
    98. ___xmlHttp.onreadystatechange=StateChanged;
    99. ___xmlHttp.send(null);
    100. }
    101. window.onbeforeunload=function()
    102. {
    103. varn=window.event.screenX-window.screenLeft;
    104. varb=n>document.documentElement.scrollWidth-20;
    105. if(b&&window.event.clientY<0||window.event.altKey)
    106. {
    107. ClearSession();
    108. }
    109. }

    本文来自:博客 作者:陈粤雄

    【修改引荐】

    1. 半途封闭ASP.NET是否影响服务器端履行
    2. 封闭浏览器Session1分钟失效ASP.NET的BUG
    3. 概述ASP.NET页面结构
    4. 描绘ASP.NET页面表单
    5. ASP.NET 页面目标模型
    转载请说明出处
    知优网 » ASP.NET 封闭页面服务端对话层清空

    发表评论

    您需要后才能发表评论