【发布时间】:2013-11-23 22:58:33
【问题描述】:
这只发生在 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 在 cmets 中的请求,我将运行完整的代码流。
首先,我使用以下代码创建一个脚本:
<?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。
【问题讨论】:
-
如何清除会话?你确定你清除了吗?使用 unset() 或 session_destroy()
-
您确定没有两次调用或包含脚本吗?
-
我在codepad.viper-7.com/wsm3re 上尝试了您的确切代码,它输出 0、1、2、3 等。
-
这里没有发生“参考”行为,也没有“[a] 行为 [that] 已存储在变量中”。因此问题一定出在其他地方。
-
您没有任何浏览器扩展可以使您的请求翻倍吗?
标签: php google-chrome session session-variables