Php 为什么浏览器重新打开后此cookie会更改值?

Php 为什么浏览器重新打开后此cookie会更改值?,php,session,cookies,Php,Session,Cookies,下面是一个简单的php代码,它启动会话并重新生成会话id,并在POST请求时设置cookie生存期 <?php // url: http://localhost/sessiontest/ session_start(); if (isset($_POST['test'])) { ini_set('session.cookie_lifetime', 86400); session_regenerate_id(true); header('Location: http

下面是一个简单的php代码,它启动会话并重新生成会话id,并在POST请求时设置cookie生存期

<?php
// url: http://localhost/sessiontest/
session_start();
if (isset($_POST['test'])) {
    ini_set('session.cookie_lifetime', 86400);
    session_regenerate_id(true);

    header('Location: http://localhost/sessiontest/');
    return;
}
print_r($_COOKIE);
?>
<html>
    <form method="post" action="">
        <input type="text" name="test" />
        <input type="submit" />
    </form>
</html>

我在firefox 35.0.1中遇到了一个问题。会话id存储在PHPSESSID cookie中。会话id重新生成后,我关闭浏览器并打开它。浏览器关闭后,cookie值将更改。在chrome中没有这样的问题

如果打开此页面,您将看到具有某些值(值#1)的PHPSESSID cookie 如果单击“提交”按钮,PHPSESSID cookie将被更改(值#2)

然后,如果关闭firefox 35.0.1并重新打开它,您将看到PHPSESSID cookie的值为#1。为什么会这样?这是firefox的bug吗? 如果重新打开后在chrome中执行相同操作,则会看到值#2


这对我来说非常重要,因为在我的网站上,当用户进行身份验证时,我也会这样做。重新打开浏览器后,用户将注销。

重新加载浏览器页面时,它还会重新提交
$\u POST
$\u REQUEST
$\u GET
数组中的数据。Firefox可能会重复这个过程,而Chrome可能会注意到这个过程已经发生过一次,并且不会重新提交数据

当你刷新表单填充页面时,Firefox经常会出现“你确定要重新提交此数据吗”的显示,这只是不同的浏览器和不同的数据。为确保表单提交仅在有两条路线(可能更多)时发生:

1) 表单和会话工作发生在服务器页面上,该页面不会输出到浏览器,而是转发到“已完成”的浏览器页面。然后刷新只需重新加载完成的页面

2) 添加某种形式的标志、数据库或(其他)受控制的cookie,以检查是否已使用cookie中的标志系统提交了
$\u POST
数据