zoukankan      html  css  js  c++  java
  • 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 结束===========================================
  • 相关阅读:
    在vm中安装ubuntu 11 并部署 xampp集成环境步骤
    修改xampp的mysql默认密码
    linux下重命名文件的命令
    IE6下DIV最小高度不能为0的解决方法
    linux下解压tar.gz 文件和 tar.bz2 文件命令
    linux svn 使用
    win7 下设置java环境变量
    在linux下安装svn软件rabbitvcs
    linux下开启ssh服务
    【转】DataSet与DataTable的区别
  • 原文地址:https://www.cnblogs.com/luhaiyan/p/2046609.html
Copyright © 2011-2022 走看看