zoukankan      html  css  js  c++  java
  • ASP.Net中Session失效的一种编程思路

    在写一个客户的B/S结构应用程序时,突然发现一个技巧,不知道是否是MS的一个BUG,给相关的有研究的朋友原先考虑写一个检查Session的类,Session失效后,必须转向登陆页面,可每一个调用该类的页面,在不同的WEB路径下,所以转到登陆页面的URL都不同,每个页面都要调用和设置登陆页面路径,所以实际应用就放弃了这一想法后来考虑到不如写一个检查Session失效的页面,由客户端每一秒都刷新一下,就可以在一个页面中调用,但通过FRAME嵌入该ASPX老时有请求发出,不太好看,虽然该页面是隐藏的.再后来,想想,就用一个页面,使用无刷新技术,去请求该失效Session的页面就可以了,此处的无刷新技术使用了xmlhttp对象,没有使用WEBService技术.(由于客户的BS系统,使用FRAME框架,最上层的页面是显示软件名称,用户登陆信息的,所以调用就放在该页面中).

      让我们来看看代码,主要是客户端的JavaScript脚本程序  webjx.com

    <script language="javascript">
       var idx=0;
       function ChkSession()
       {
        var Http = new ActiveXObject("Microsoft.XMLHTTP");
        Http.open("GET","ChkSessionOut.aspx",false); //检查Session失效的页面
        Http.send();
        var str = Http.responseText;//执行ASPX后的返回结果
        //idx++
        //document.all("ConvertResult").innerHTML = str+idx;
        if(str=="notnull")
        {
         //alert(str); 网页教学网 
        }
        else
        {
         alert("会话值跟踪时间超时,请重新登录...");//这段代码一直没有运行,往下看,你就知道了
         location.href = "longin.aspx";
        }
        window.setTimeout(‘ChkSession()‘, 1000 );//每一秒钟,请求一次ChkSessionOut.aspx
       }
      </script>

      这段CODE,我放在<HEAD></HEAD>标签之间,然后在BODY加载时,调用该函数,如下:

    <BODY onload="ChkSession();">

    ChkSessionOut.aspx.cs的代码如下ChkSessionOut.aspx文件中的HTML标签全部被我删除,这样一来执行下面的代码,就只有结果的输出了 

    private void Page_Load(object sender, System.EventArgs e)
      {
       if(Session["sUserID"]==null)
       {
        Response.Write("isnull");
        return;
       }
       else
       {
        Response.Write("notnull");
        return;
       }  
      }

    为了测试以上程序,我将WEB.Config的内容更改,将SESSION设置段,改成一分钟后失效WEB.Config文件的一部分,设置一分钟后失效SESSION的地方,如下:

    <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="1"/>

    www.webjx.com

      然后我运行代码,我特地在原来的IE上,使用菜单新打开一个IE窗口,为保证他们是检查同一个SESSION,在地址中输入ChkSessionOut.aspx,程序运行后,发现秘密了,一分钟后,我点刷新ChkSessionOut.aspx的页面,居然输出notnull,我想到,对了,我每秒都在向这个页面发请求,所以没失效的原因,然后我将有无刷新技术的页面关闭,过一分钟后,发现输出isnull,说明Session失效了,这个发现好,我吃了一惊!想到VS.NET好好好,它就是一个好工具,哈哈!我的环境IIS5.0,Win2000,VS.Net2003然后我有设置30秒自动请求,无刷新技术的主页面不关,SESSION不失效,一关闭还是1分种后就失效,考虑到了1分钟/30秒是整数,设置成50秒,无刷新技术的主页面不关,它过1分种,失效了!哈哈,完全明白了!1分钟/50秒非整数,所以失效.

    转载自:http://www.aspnetjia.com/

  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1036. Boys vs Girls (25)
    1035 Password (20)
    1027 Colors in Mars (20)
    1009. Product of Polynomials (25)
    1006. Sign In and Sign Out
    1005 Spell It Right (20)
    1046 Shortest Distance (20)
    ViewPager页面滑动,滑动到最后一页,再往后滑动则执行一个事件
    IIS7.0上传文件限制的解决方法
  • 原文地址:https://www.cnblogs.com/aspnetjia/p/5151085.html
Copyright © 2011-2022 走看看