Javascript 如果用户按浏览器';单击“上一页”按钮,进入上一页。然后,该页应显示一条消息,如“返回”;“网页已过期”;在asp.net中

Javascript 如果用户按浏览器';单击“上一页”按钮,进入上一页。然后,该页应显示一条消息,如“返回”;“网页已过期”;在asp.net中,javascript,asp.net,Javascript,Asp.net,如果用户按浏览器的“后退”按钮进入上一页,则该页应在asp.net中显示类似“网页已过期”的消息 我可以用javascript来做这个吗 例如 网站中有4个页面。1、2和3可以返回。但是当第4页运行时,第4页就不能返回了。。。当用户按下浏览器的后退按钮时,会显示一条消息“weg页面已过期”。这很棘手。您可以使用cache-control指令确保用户始终获得文件的新副本,但这不是您的问题 JavaScript和DOM都没有关于文档创建时间的任何信息(或者至少我知道没有),您不能相信用户的时钟与服务

如果用户按浏览器的“后退”按钮进入上一页,则该页应在asp.net中显示类似“网页已过期”的消息

我可以用javascript来做这个吗

例如


网站中有4个页面。1、2和3可以返回。但是当第4页运行时,第4页就不能返回了。。。当用户按下浏览器的后退按钮时,会显示一条消息“weg页面已过期”。

这很棘手。您可以使用cache-control指令确保用户始终获得文件的新副本,但这不是您的问题

JavaScript和DOM都没有关于文档创建时间的任何信息(或者至少我知道没有),您不能相信用户的时钟与服务器时间同步。但是,如果您不介意将此过程分为两步,您可以在页面中嵌入GMT时间戳。然后,您可以对同一台服务器执行一个简单的AJAX请求(它可以用于任何内容,甚至是一个空文本文件,也可以只是一个HTTP头请求,而不是POST或GET)。当客户机通过XHR成功加载时,它应该会收到一个“Date”头,您可以将其与页面中嵌入的时间戳进行比较。如果您将此代码放在页面上尽可能高的位置,则新到页面的用户可能只需离开服务器一秒或两秒的时间。但是如果有人按下后退按钮,就会失去同步

如果您在站点上使用jQuery,则执行此操作的代码如下所示:

var intTimeStampAtCreation = 1279871757843; // This value is generated when building the page

var onXHRLoad = function(xhr) {
    var dtCurrentDateTime = new Date(xhr.getResponseHeader('Date'));
    var intCurrentTimestamp = dtCurrentDateTime.getTime();
    if (Math.abs(intCurrentTimestamp - intTimeStampAtCreation) > 10000) { // 10 seconds
        alert("Expired");
    }
};
$.ajax({type:"HEAD",url:"/",complete:onXHRLoad});

在本例中,我正在加载默认页面(因为我知道它会在那里),但您应该将其指向一些微小的非动态页面。

这很棘手。您可以使用cache-control指令确保用户始终获得文件的新副本,但这不是您的问题

JavaScript和DOM都没有关于文档创建时间的任何信息(或者至少我知道没有),您不能相信用户的时钟与服务器时间同步。但是,如果您不介意将此过程分为两步,您可以在页面中嵌入GMT时间戳。然后,您可以对同一台服务器执行一个简单的AJAX请求(它可以用于任何内容,甚至是一个空文本文件,也可以只是一个HTTP头请求,而不是POST或GET)。当客户机通过XHR成功加载时,它应该会收到一个“Date”头,您可以将其与页面中嵌入的时间戳进行比较。如果您将此代码放在页面上尽可能高的位置,则新到页面的用户可能只需离开服务器一秒或两秒的时间。但是如果有人按下后退按钮,就会失去同步

如果您在站点上使用jQuery,则执行此操作的代码如下所示:

var intTimeStampAtCreation = 1279871757843; // This value is generated when building the page

var onXHRLoad = function(xhr) {
    var dtCurrentDateTime = new Date(xhr.getResponseHeader('Date'));
    var intCurrentTimestamp = dtCurrentDateTime.getTime();
    if (Math.abs(intCurrentTimestamp - intTimeStampAtCreation) > 10000) { // 10 seconds
        alert("Expired");
    }
};
$.ajax({type:"HEAD",url:"/",complete:onXHRLoad});

在本例中,我正在加载默认页面(因为我知道它会在那里),但您应该将它指向一些微小的非动态页面。

您不需要在JavaScript中执行任何操作。您需要在服务器的响应头中指定cache control/expires。

您不需要在JavaScript中执行任何操作。您需要在服务器的响应头中指定cache control/expires。

这就是我使用的。在大多数情况下似乎有效。但是在ASP.NET中,围绕这个问题有很多讨论

    Response.ClearHeaders();
    Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
    Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
    Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
    Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
    Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
    Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
    Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
    Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
    Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
    Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 

这是我用的。在大多数情况下似乎有效。但是在ASP.NET中,围绕这个问题有很多讨论

    Response.ClearHeaders();
    Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
    Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
    Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
    Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
    Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
    Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
    Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
    Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
    Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
    Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 

函数GoBack()
{
窗口.历史.go(+1);
}
Response.Cache.SetCacheability(HttpCacheability.NoCache)


函数GoBack()
{
窗口.历史.go(+1);
}
Response.Cache.SetCacheability(HttpCacheability.NoCache)