ASP.net 关闭页面时清空Session

在登陆的时候想必大家都是用Session保存相关的信息的,Session是保存在服务端的,

当客户端页面关闭时Session仍保存在服务端,直到时间超时才会清掉。那么,有没有办法在
客户端关闭的时候清掉Session呢。 
  要在客户端改变服务端的内容那是不可能,要清掉Session必须回到服务端。不过我们可
以变通下——使用ajax。
  首先我们要判断用户什么时候关闭了页面,这样才能执行下一步动作。不过HTML DOM没
要页面关闭的事件,只有onunload和onbeforeunload是与页面关闭有关的,onunload是页面
关闭或刷新后的事件,onbeforeunload是页面关闭或刷新前的事件,所以我们要用的是
onbeforeunload。
  但是这里就有个问题了,用户有可能是刷新页面而引起的onbeforeunload事件,而我们并
不希望在刷新时清除Session,所以要判断下用户是关闭页面还是在刷新页面。代码如下:
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(); 
      }   
}

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


========================Default.aspx 开始===========================================
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
 
    <script type="text/javascript" src="script.js"></script>
 
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Label ID="Label1" runat="server"></asp:Label>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="写入Session" /></div>
    </form>
</body>
</html>
========================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(); 
      }   
}  
========================script.js 结束===========================================
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值