使用友好的URL来避免缓存问题

时间:2011-06-29 14:07:41

标签: php .htaccess caching friendly-url browser-cache

在我的应用程序(*)中,我有时需要打开(在默认用户浏览器中)带有一些参数的URL。

在某些计算机上,我遇到了缓存问题,即使我发送了不同的参数,浏览器也会使用旧参数打开页面。

我尝试添加时间戳作为第一个参数:

但是,在某些计算机上它并没有解决问题。

我想知道使用友好的URL是否有助于避免所有用户,所有浏览器,所有默认设置等的缓存问题。

[我使用友好网址的来源:

你知道使用这种传递参数的方法有什么不利吗?

谢谢,

Atara。

(*)我的应用程序是一个exe文件(VB .Net) 应用程序的一个菜单选项是使用用户默认浏览器打开URL:

 '-- Create temporary *.url file and open it
  Try
    Dim line1 As String = "[InternetShortcut]"
    Dim line2 As String = "URL=" & sUrl
    Dim dst As String = GetSystemPathTemp() & "myAppTemp.url"

    Dim sw As New System.IO.StreamWriter(dst, False)
    sw.WriteLine(line1)
    sw.WriteLine(line2)
    sw.Close()

    System.Diagnostics.Process.Start(Chr(34) & dst & Chr(34))   

URL是一个表单,参数是表单的一些字段,因此用户不必键入它们。

通常,用户填写表单并重定向到“谢谢”页面。

我的问题:下次用户点击菜单并打开URL \ form时,表单中应该有不同的字段值,根据当前的应用程序阶段,但是在某些计算机\用户\浏览器上有第一个URL缓存,然后,所有表单都填充初始字段,因此用户需要手动编辑它们(如果他注意到问题),否则我会得到表单结果与非准确信息 - 新用户注意到先前错误的字段值。

我的表单页面现在以 -

开头
<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");   // Date in the past

直到今天,它始于以下所有选项 -

<?php
//disable all browser caching MUST BE FIRST LINES WITH NO PRECEEDING SPACES ETC
// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// always modified
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

// HTTP/1.0
header("Pragma: no-cache");

文件“myAppTemp.url”已更新,但浏览器会打开旧链接。

2 个答案:

答案 0 :(得分:3)

解决缓存问题的URL不是可行的方法。 URL应该代表访问内容的方法,仅此而已。

最后,您永远无法完全解析客户端缓存,因为他们可以随心所欲。但是,有了一些敏感的标题,你就可以了。

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>

来自:http://php.net/manual/en/function.header.php

答案 1 :(得分:0)

我认为你正在寻找错误的答案。如果查询字符串不同,客户端永远不会加载缓存数据,但是如果内容(具有链接的页面)被缓存,那么即使您希望参数已经更改,也会再次请求相同的数据。

如果您在pageload上动态生成网址,这可能会出现问题。一旦用户导航离开该页面,然后返回,它将在页面上具有相同的URL,因为该页面已被缓存。

编辑:

我认为您可以绕过.url文件的创建,因为Windows支持直接打开http链接,请阅读以下文章:http://support.microsoft.com/kb/305703

这样您至少可以消除问题的一个错误来源。