我不知道发生了什么,但这在IE8中很明显,它加载了我的页面和我的javascript文件。
然后,我的服务器端代码中有调试行,当来自jquery的ajax请求通过时,这些代码就会被激活。或者其他一些与服务器的联系,这样一个刷新页面。
所以我有这个
var timeout;
var wait = 300000;
$(function()
{
    timeout = null;
    timeout = setTimeout("SessionTimeOut()", wait);
    $.get('SessionTimeOut', null, function(response)
    {
        timeout = clearTimeout(timeout);
        wait = parseInt(response);
        timeout = setTimeout("SessionTimeOut()", wait);
    });
});这应该在每次加载页面时运行,并启动一个计时器来监视它们是否应该注销。每次他们向服务器提出请求时,我都会重置计时器。
有时,当用户登录时,他们会突然超时。所以我在里面放了一个5分钟的默认计时器,看它是否能解决问题。
所以现在假设用户超时,因为他们在大约30分钟内是不活动的。他们回来后会被送到我的登录页面。所以他们要翻开新的一页。我希望所有这些javascript内容都会被销毁,所有超时对象都会被销毁。
然后他们尝试登录(使用IE8)。猜猜他们会得到什么信息,他们在哪里超时,因为IE8似乎不想运行这个脚本了。
我试着刷新这一页,但没什么用。看起来,一旦脚本运行,它就已经运行了整个浏览器打开的时间。
我有很多使用上面代码的页面。然而,一旦它在一个页面中运行一次,而您又转到另一个页面,它就不会再次运行了。
让它再次运行的唯一方法是关闭浏览器或清除所有缓存。
那我怎么才能让它再次运行呢?
编辑
这是我的服务器代码(很好的一部分)
  public ContentResult SessionTimeOut()
    {
         var time = signOut.FigureSessionTime();
        // minues 2 mins to make up for any lost time.
        double total = time.TotalMilliseconds - 120000;
        return Content(total.ToString());
    }因此,基本上,FigureSessionTime从内部查看用户cookie,并检查该cookie是否在会话结束时出现,或者他们是否选择将cookie保存2周。
如果他们选择2周,那么2周的毫秒将被返回。如果是会话,则30分钟的毫秒将被返回。
我只需要2分钟就可以在保存端,所以客户端应该总是在服务器端之前超时。
以毫秒为单位返回时间
//这是它返回的内容
1670778.4725000001
编辑2
好的,这就是我刚刚做的,测试一些东西。
IE 8
启动用户不需要登录的页面。这意味着没有cookie来检查会话,这意味着-120000将返回。警报框验证了这一点。因为这就像一个瞬间超时,在加载页面的第二秒钟,我就超时了。
接下来,我尝试登录到一个安全的页面,该页面将取出cookie,检查它并返回一个超时时间。我有一个警告框,并检查了等待变量中存储的内容。
警报箱来的是-120000,所以这不应该是。应该是个很高的数字。我立即被注销,并被发送到登录页面。
然后我进入IE8中的“安全选项卡”,选择“删除浏览历史”弹出一个弹出,我检查了所有的选项,并点击“删除”。
当我在我的网站上的时候,我做了所有这些,从来没有离开过它。所以我输入了我的登录凭证并登录了。
现在,等待变量在"1677207“中包含了这个变量。所以这大概是27分钟之类的。
那么,为什么第一次出现阴性呢?是因为它第一次超时在其他页面上并且缓存了这个,还是只是觉得它不想工作?
我现在只是累了点别的东西。我清除了浏览历史,关闭了IE8,然后通过VS2008启动了我的网站,并将其加载到我的登录页面上。
然后我登录了5次。每次登录时,我都会注意到等待时间。
这就是结果
1678237
1678237
1678237
1678237
1678237因此,有5次,时间完全相同,甚至一毫秒都没有。
现在让我们检查firefox。
我做了同样的事情,通过VS2008启动我的网站,启动火狐并进入我的登录页面。
我登录了5次。每次警报框显示出等待时间,我都会注意到。
这就是结果
1677176
1677800
1678003
1677956
1677800每次我登录都是不同的时间。因此,出于某种原因,火狐每次都会带来不同的结果,但IE8神奇地总是可以在同一时间完成,而不是多少毫秒?
在做了之前在IE8中做过的事情之后,我去了一个页面,这个页面会给用户计时并返回-12000。我看了这一页,它就这样做了,然后我回到了页面的标牌上。
然后我登录,出现的等待时间是"1677940“。所以它实际上运行了我的代码,得到了一个不同的时间。IE8刚刚一次又一次地使用了之前的-12000。我大概可以登录一百万次,而且总是-12000次。一旦它得到了一个值,它似乎就保留了这个值。
编辑3
你们都可以在家试试了。
这是你需要的
// Javascript file
    var timeout;
    var wait = 300000;
    $(function()
    {
        timeout = null;
        timeout = setTimeout("SessionTimeOut()", wait);
        $.get('SessionTimeOut', null, function(response)
        {
            timeout = clearTimeout(timeout);
            wait = parseInt(response);
            alert(wait);
            timeout = setTimeout("SessionTimeOut()", wait);
        });
        /* starts every time a ajax request is made */
        $().ajaxStart(function(e)
        {
            timeout = clearTimeout(timeout);
            $('body').css('cursor', 'progress');
        });
        $().ajaxStop(function(e)
        {
            $('body').css('cursor', null);
        });
        $().ajaxComplete(function(event, XMLHttpRequest, ajaxOptions)
        {
            if (timeout == null)
            {
                timeout = setTimeout("SessionTimeOut()", wait);
            }
        });
    });
    // need to have dialog ui javascript for this.
    function SessionTimeOut()
    {
    //    $('#content').append('<div id="SessionTimeout" title="Session Time Out">Your session has timed out. You must sigin again.</div>');
    //    $('#SessionTimeout').dialog(
    //    {
    //        height: 140,
    //        resizable: false,
    //        modal: true,
    //        closeOnEscape: false,
    //        buttons:
    //        {
    //            'Return To Sign In Page': function()
    //            {
    //                window.location.href = "/account/signin";
    //            }
    //        }
    //    });
    //    $('#ui-dialog-title-SessionTimeout').siblings('a').remove();
    }//索引视图
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!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>Index</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script src="../../JScript1.js" type="text/javascript"></script>
</head>
<body>
    <div>
    </div>
</body>
</html>//TestController
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Mvc.Ajax;
    namespace MvcApplication1.Controllers
    {
        public class TestController : Controller
        {
            //
            // GET: /Test/
            public ActionResult Index()
            {
                return View();
            }
  public ContentResult SessionTimeOut()
        {
            Random random = new Random();
           return Content(random.Next(100).ToString());
        }
    }
}如果在IE8中运行此代码,每次都会得到相同的随机数。在firefox中尝试一下,你就不会了。
发布于 2009-12-26 21:03:45
我最近也遇到了类似的问题。禁用五月ajax调用的缓存清除了缓存。试试这家伙:
var timeout;
var wait = 300000;
$(function()
{
    timeout = null;
    timeout = setTimeout("SessionTimeOut()", wait);
    $.ajax({
        url:'SessionTimeOut', 
        success:function(response) {
            timeout = clearTimeout(timeout);
            wait = parseInt(response);
            timeout = setTimeout("SessionTimeOut()", wait);
        },
        type:'get',
        cache:false
    });
});注意缓存:false选项
发布于 2009-12-26 03:52:27
我同意Pekka的观点,问题更可能不在浏览器缓存中。
看起来,您正在使用$get调用从服务器获取超时值。这看起来..。很奇怪。如果这是而不是,那么为什么要将响应解析为超时值?如果这个是您想要做的,那么您确定返回的响应包含您希望它包含的值吗?
https://stackoverflow.com/questions/1962527
复制相似问题