即后台按钮PHP会话问题“网页已过期”

时间:2011-06-02 10:54:59

标签: php internet-explorer session

在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中出现该消息?

2 个答案:

答案 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代码)。

相关问题