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


Back button doesn't refresh page if URL contains GET parameters or trailing slash?

我有一个CodeIgniter站点,在点击登录页面时为用户分配一个UUID。重新加载登录页面将分配一个新的UUID,但是一旦开始执行表单,UUID将保持不变。然而,有些事情发生了,我不太明白,当用户点击后退按钮,行为是不同的,这取决于他们到达的URL ?

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

如果您到达的url包含一个GET参数,提交第一个表单(其中包含您的uuid),并按后退按钮,您返回到着陆页面,但您的uuid没有改变。

案例2:domain.com/somehash

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

我在最新的Chrome和Firefox中测试了这一点,它是否与他们实施的某种缓存策略有关?理想情况下,反击不会刷新页面。

编辑:我应该注意,我们不能在这个工具中使用cookie,所以会话是out的

进一步编辑:简单地转到domain.com/,添加一个反斜杠,在点击后退按钮时阻止UUID刷新。可能与CodeIgniter路由。php或。htaccess相关?

相关的。htaccess条目:

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

Routes.php:

$route['default_controller'] = "home";
$route['404_override'] = '';
$route['(:any)'] = 'home/index/$1';

尝试设置这些标头,看看这是否会使两种情况下的行为一致:

$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