php - 如果 URL 包含 GET 参数或尾部斜杠,后退按钮不会刷新页面?

标签 php codeigniter google-chrome firefox

我有一个 CodeIgniter 站点,它会在点击登录页面时为用户分配一个 UUID。重新加载登陆页面将分配一个新的 UUID,但是一旦您开始浏览表单,您的 UUID 将保持不变。但是发生了一些事情我不太明白用户何时点击后退按钮,并且行为会根据他们到达的 URL 而有所不同?

情况 1:domain.com/somehash?key=valuedomain.com/somehash/

如果您到达包含 GET 参数的上述 url,请提交第一个表单(其中包含您的 uuid),然后按后退按钮,您将返回到登录页面,但您的 UUID 不会更改。

案例 2:domain.com/somehash

在没有 GET 参数的情况下,如果您提交第一个表单(其中包含您的 uuid)并按下后退按钮,您将返回到登录页面并收到一个新的 uuid。

我在最新的 Chrome 和 Firefox 中对此进行了测试,它是否与他们实现的某种缓存策略有关?理想情况下回击不会刷新页面。

编辑:我应该注意我们不能为这个工具使用 cookie,所以 session 结束了

进一步编辑:只需转到 domain.com/,添加反斜杠,即可阻止 UUID 在点击后退按钮时刷新。可能与 CodeIgniter routes.php 或 .htaccess 有关?

相关的 .htaccess 条目:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [L]

路由.php:

$route['default_controller'] = "home";
$route['404_override'] = '';

$route['(:any)'] = 'home/index/$1';

最佳答案

尝试设置这些 header 并查看这是否使两种情况下的行为一致:

$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0");
$this->output->set_header("Pragma: no-cache");
$this->output->set_header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

更多信息:http://ellislab.com/codeigniter/user-guide/libraries/output.html

关于php - 如果 URL 包含 GET 参数或尾部斜杠,后退按钮不会刷新页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16406904/

相关文章:

php - 服务器或客户端在发送/接收日期时应该处理时区吗?

php - 页面加载时显示查询结果

php - CodeIgniter 中视频文件上传的奇怪问题

css - 如何从伪元素 -internal-input-suggested 中删除样式?

javascript - Chrome 消息 : chrome. runtime.sendMessage 不适用于最新版本 49

php - 我如何根据 Doctrine 中的条件对结果进行排序?

php - 优化查询: get all votes from user's item

jquery - 无法在 Chrome 扩展中使用 JQuery

php - PHP推理变量输出原理

php - 需要通过 PHP 将大型 CSV 文件导入多个 MySQL 表的时间高效方法