有什么方法可以检测窗口是否被用户刷新或者是否是window.location.reload();已执行并刷新页面的js命令?
因为如果用户刷新了页面/导航,我想取消设置Filter会话变量,并且如果我进行了重新加载(javascript),我想保留此过滤器会话变量。
我尝试使用$_SERVER['HTTP_REFERER']
当我执行window.location.reload()时,$ _SERVER ['HTTP_REFERER']成为完整的当前路径链接,所以我试着这样做:
if(!isset($_SERVER['HTTP_REFERER']) || $_SERVER['HTTP_REFERER'] != url::base(true).Request::current()->uri())
{
$session = Session::instance();
$session->delete('deal_filter');
}
但这不是有效的,有时只能起作用。
如果我无法通过这种方式检测到它,还有其他方法可以实现吗?
答案 0 :(得分:2)
您可以尝试向页面提交带有值的POST请求,而不是刷新。我想你需要做的只是添加一个表单,
<form name="refresh_form" action="mypage.php" method="post">
<input type="hidden" name="refresh" value="yes">
</form>
使用一些提交表单的代码替换您的Javascript代码以进行刷新,
document.refresh_form.submit();
并检查页面上PHP中的值:
if (isset($_POST['refresh']))
{
// handle the case when your Javascript submitted the refresh
}