我想在Application_BeginRequest中读Session记录的最后请求时间
用来判断用户是否3秒内持续请求,从而防止恶意刷新
可老是读不出来
请求帮助

解决方案 »

  1.   

    BeginRequest时AcquireRequestState还没有执行,Session是不能使用的。 今天刚看到的文章对你友帮助:
    http://blog.joycode.com/kaneboy/archive/2004/09/12/33213.aspx
      

  2.   

    其实你可以先判断一下
    if(Session["name"]!=null)
    {
      ...
    }
      

  3.   

    session还没有建立怎么使用啊!
      

  4.   

    先判断seesion是否存在,再进行下面的运算
      

  5.   

    怎么判断是否存在?
    用if(Session["name"]==null)不行啊,还是报错,根本就不能用
    难道我想实现的这个功能是不可能吗?
      

  6.   

    这个时候Session不存在,你当然没法读了!放到Session_start
    里!
      

  7.   

    因為在這個時候Session還不存在
      

  8.   

    防止恶意刷新最好在客户端控制, 如果你在服务器端做,实际上已经刷新了下面的代码可以参考(IE菜单里面的刷新没有受控,如果有必要,你可以将菜单去掉)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <title>aaa</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.0">
    <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout" onkeydown="event_onkeydown()" oncontextmenu="event.returnValue=false">
    <form id="Form1" method="post" runat="server">
    <FONT face="宋体">
    <TABLE id="Table1" style="Z-INDEX: 101; LEFT: 216px; WIDTH: 344px; POSITION: absolute; TOP: 320px; HEIGHT: 112px" cellSpacing="1" cellPadding="1" width="300" border="1">
    <TR>
    <TD>
    </TD>
    <TD>
    <asp:Button id="Button1" runat="server" Text="Button"></asp:Button></TD>
    <TD></TD>
    </TR>
    <TR>
    <TD></TD>
    <TD></TD>
    <TD></TD>
    </TR>
    <TR>
    <TD></TD>
    <TD></TD>
    <TD></TD>
    </TR>
    </TABLE>
    </FONT>
    </form>
    <script language="javascript">
    var readydate = new Date();
    var readyhour = readydate.getHours();
    var readyminute = readydate.getMinutes();
    //提交时判断 页面生成时间 和 当前时间比较
    function Form1.onsubmit()
    {
    var submittime = new Date();
    var submithour = submittime.getHours();
    var submitminute = submittime.getMinutes();

    var _interval = submitminute-readyminute;
    if(readyhour!=submithour || _interval<3)
    {
    alert('刷新过快');
    event.keyCode = 0;
    event.returnValue = false;
    }
    }
    //屏蔽F5刷新
    function event_onkeydown()
    {
    if(event.keyCode == 116)
    {
    event.keyCode = 0;
    event.returnValue = false;
    }
    }
    </script>
    </body>
    </HTML>
      

  9.   

    没仔细看
    原来你是三秒内不许刷新把getHours换成getMinutes
    把getMinutes换成getSeconds
      

  10.   

    app start
    app begin request
    session start
    app end request
    session end
    app end好象事件是这样的触发顺序
      

  11.   

    to:luckysusan(海闊天空) 
    你的方法是在客户端实现,如果用户IE不支持js,一点作用也不起
    还有用户如果用自己写的浏览器穷举试探登陆页,也没办法防
    在Application_BeginRequest判断是否刷新,虽然是已经请求了,但可以立即结束请求
      

  12.   

    session 要在application  之后
      

  13.   

    看样子你的页面的作用不那么简单啦
    用户如果用自己写的浏览器穷举试探登陆页?? 
    也不用自己写浏览器吧,随便写个页面,定义个WebRequest,指向你的页面,来个循环CMIC(大象) ( ) 给出的连接已经说的很清楚了,所以说在Application_BeginRequest判断session来决定是否刷新应该是不可能的了非要这样,我看你还是去具体页面的init里面判断session当然也可能还有高人有另外的方法,期待高人出现! :)
      

  14.   

    对呀Application_BeginRequest是在Session_Start这前运行,当然不能访问Session哆!