在IE上,当用户点击按钮时,他们会得到经典的IE“网页已过期”消息。
我发现在我的php.ini中设置以下内容已经解决了这个问题。
'session.cache_limiter=private'
但是我现在的问题是当我发送表单时,我在隐藏字段中包含一个PHP会话值($ _SESSION ['token'])。然后我在下一页上检查这一点,看看令牌值是否匹配
echo "<form ......<input type='hidden' name='token' value='".$_SESSION['token']."' />";
/*on recieving page*/
if($_POST['token']==$_SESSION['token']){/*ok matched*/}
else{/*THIS IS WHERE THE ERROR OCCURS*/}
我的问题是因为我将这个设置添加到我的php.ini文件中我注意到在发送表单时我得到了我的自定义页面错误,因为某些原因$ _SESSION ['token']值似乎在接收表单数据的页面上发生了变化从而使if()语句返回false?现在所有浏览器都在发生这种情况吗?
这是我的$ _SESSION ['token']代码(注意当发送我的表单时,它落在else()但是$ _SESSION ['token']的值更改与缓存有关可能不保留我的$ _SESSION值?
session_start()
if(!isset($_SESSION['token']))
{
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token; /*have to put current session token into this variable for hidden field in <form>*/
$_SESSION['token_time'] = time();
}
else
{
/*if token set ie user press back button on browser*/
$token_age = time() - $_SESSION['token_time'];
if ($token_age > 1200)
{
/* More than 20 minutes has passed - regenerate. Do this so more likely wont timeout when user taking long time on <form> and token may not get refreshed before time limit*/
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token; /*have to put current session token into this variable for hidden field in <form>*/
$_SESSION['token_time'] = time();
}
}
如果有任何用途继承我的其他php.ini会话设置
session.cache_limiter=private
session.cookie_secure=1 ;my wholes site is SSL
session.cookie_httponly=1
session.save_path = /tmp ;directory to store sessions
session.save_handler = files
session.cookie_lifetime = 0 ;persistence cookie dies after browser closed
session.use_trans_sid = 0
session.use_only_cookies=1
让我向大家澄清一下,整个问题发生的原因是使用'session.cache_limiter = private'。如果我把它拿出来没有问题,除了我在IE浏览器上点击“网页已过期”表单页面上的按钮时收到消息。是否有任何建议如何在按下后退按钮时避免在IE中出现该消息?
答案 0 :(得分:4)
ini_set(“session.cache_limiter”,“must-revalidate”);
答案 1 :(得分:1)
这是HTML代码吗?
<input type='hidden' name='token' value='".$_SESSION['token']."' />
如果是,请尝试:
<input type='hidden' name='token' value='<?PHP echo $_SESSION['token']; ?>' />
:)
我从不对PHP内置会话功能感到满意。对我来说太麻烦了......
您是否正在使用session_start()
初始化会话处理?
您确定会话使用的是Cookie - 而不是任何Query-String / POST字段吗? (检查浏览器中生成的HTML代码)。