这仅在 Chrome 中发生
有没有人经历过将功能行为存储到变量中的 PHP 会话?我创建了以下脚本:
<?php
session_start();
$_SESSION['count'] = (isset($_SESSION['count'])) ? $_SESSION['count'] + 1 : 0;
echo $_SESSION['count'];
?>
您会认为这会在每次页面加载时回显 0、1、2、3 等。但是,我得到 1、3、5、7 等等。我发现由于某种原因,$_SESSION['count'] 的行为就好像它的递增行为已存储在变量中一样。它似乎在每次页面加载时增加 2 的原因是因为当调用 $_SESSION['count'] 时,它会自动增加 1。为了清楚起见,以下脚本将在每个页面加载时输出和更高的数字。
<?php
session_start();
echo $_SESSION['count'];
?>
这将回显 $_SESSION['count'] 的任何内容,然后在每次页面加载时回显 $_SESSION['count'] + 1。我尝试取消设置会话,清除 $_SESSION 变量,并使用相同的脚本在各种目录中创建新文件。我也在http://codepad.viper-7.com/上尝试过,它工作正常。任何人都知道为什么会发生这种情况?我今天在将会话变量设置为随机数时遇到了类似的行为。在每次页面加载时,我只需通过回显变量即可获得一个新的随机数。当我序列化或 var_dump 变量时,它只是返回一个字符串值。
这是我用来取消会话的:
$_SESSION = array();
session_unset();
session_destroy();
我已经在几个浏览器上尝试过这个脚本。IE 和 Firefox 正确递增 1;但是 Chrome 增加了 2。知道为什么浏览器会影响这一点吗?
编辑:如果我创建一个新脚本并更改变量,它可以正常工作。我注意到的是,每当我需要 index.php 中的这个脚本时, index.php 只是有 ,我又开始遇到这个问题。所以,index.php 出了点问题。我的 .htaccess 多次加载页面会不会有问题?这里是:
我的 .htaccess 选项 +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
DirectoryIndex /index.php
FallbackResource /index.php
#Allow cross domain AJAX
Header set Access-Control-Allow-Origin *
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
再次编辑:根据用户 2086860 在评论中的请求,我将运行完整的代码流。
首先,我使用以下代码创建一个脚本:
<?php
session_start();
$_SESSION['counter'] = (isset($_SESSION['counter'])) ? $_SESSION['counter'] + 1 : 0;
echo $_SESSION['counter'];
?>
此代码按预期工作,打印 0、1、2、3 等。
现在,如果我通过 index.php 需要这个脚本,如下所示:
<?php
require 'test6.php';
?>
数字开始增加 2 而不是 1。正是通过我的 index.php 的要求导致了问题。它还搞砸了我的脚本文件,因此直接访问 test6.php 现在增加了 2 而不是 1。您可以在此处看到它的实际效果:
测试网址已移除
只是我很清楚,上面的代码是我所有的代码。index.php 或 test6.php 中没有其他内容。这仅在 Chrome 中发生。Firefox 和 Internet Explorer 工作正常,递增 1。