所以这是我的设置。
在 file1 中,我有一个 class1。在构造函数中,我创建了一个类变量,例如
$this->session = $_SESSION['test'];
在构造函数中,我在 $this->session 中设置了一些默认值,例如
$this->session['something']['somethingelse'] = 'test';
Class1 需要(在函数中)file2 并启动 class2(在 file2 中)。调用一个函数并给出一个 $this->session。然后我使用 &$session 引用变量。
$this->session 然后更改 class2 中的值让我们说喜欢
$this->session['something']['somethingelse'] = 'test2';
当我返回到 class1 时,我可以看到值已更改。我现在调用一个 storeSession 函数,该函数基本上与开始相反。
$_SESSION['test'] = $this->session;
我对 $this->session 和 $_SESSION 都进行了 var_dump,在 file1 中我可以看到值已更改。
然后我通过调用我拥有的另一个 php 文件来结束
session_start();
var_dump(session_id());
var_dump($_SESSION);
exit;
但是这里的结果是不对的!$this->session['something']['somethingelse'] 的值是 'test' 而不是 'test2'!如果我用 var_dump($_SESSION); 重新加载页面,file1 也是如此。在顶部,值没有改变。我也调试了 session_id,我肯定在所有文件中的同一个会话上运行!
现在这里有一些更奇怪的东西。就像我无法覆盖我在开始时设置的默认值。与它是多维数组有关吗?
我在 file1 中做的最后一件事是更改值。我做的第一件事是$_SESSION 上的var_dump。无论我尝试什么,多维数组中的值都不会改变(第一次设置时)!
我什至尝试在 file1 末尾转储 $this->session 值 - 确认它已更改。取消设置 $_SESSION 然后尝试设置
$this->session['something']['somethingelse'] = 'test';
但是它根本没有设置!这个地方简直是空的。那么整个 $_SESSION 是空的。如果我清除会话 cookie 并运行页面,就会出现这种情况。
我很困惑......我以前从未遇到过这些会话处理问题。有任何想法吗?它与会话中的多维数组有关吗?
我觉得我已经尝试了一切。我也试过在我用正确的值更改会话后立即创建一个 session_write_close() 但结果是一样的。
编辑
我离得更近了一点。我认为这与 $this->session 的引用有关。
就在我设置会话之前,我 var_dump 和 echo $this->session['seomthing'] 这表示值是正确的 - 来自 class2 的更改值。当我在 $_SESSION 中插入这个值时,我没有得到正确的值!!!我得到 test 而不是 test2 我刚刚被告知是它的价值。PHP 这里有一些完全错误的地方。如果我用像'lalala'这样的字符串设置$_SESSION,它会改变。如果我在 $this->session['seomthing'] 之前更改它也可以工作!所以会话不是问题。我可以改变它。
$this->session['seomthing'] = 'sdfsdfs';
那么 vardump 和 echo 如何告诉我该值是一回事,但是当我将其插入 SESSION 时,它又是另一个值!这就是为什么我如此困惑。PHP 告诉我两件事。
所以基本上我在第一类中有一个变量(测试)。我将它发送到第二类,在那里我将它更改为 test2,而我有 & 字体(参考)。然后我在第一堂 vardump 中回显它,它说它现在是 test2。我把它放入 $_SESSION 然后它说值是 test... 而不是 test2... wtf?
编辑2
所以我试着做一个非常简单的例子来说明我在做什么。当我这样做时,一切正常......所以答案必须在代码中的某个地方......我正在关闭这个并进一步挖掘这个谜团。
类1.php
<?php
session_start();
class Class1 {
var $session;
public function __construct() {
$this->session = $_SESSION['something'];
$this->session['somethingelse'] = 'test';
$this->main();
}
private function main() {
var_dump($this->session);
require_once 'class2.php';
$Class2 = new Class2($this->session);
$Class2->main();
$this->storeSession();
}
private function storeSession() {
var_dump($this->session);
$_SESSION['something'] = $this->session;
var_dump($_SESSION);
echo 1;
}
}
new Class1();
?>
类2.php
<?php
session_start();
class class2 {
public $session;
function __construct(&$session) {
$this->session = &$session;
$this->main();
}
function main() {
$this->session['somethingelse'] = 'test2';
}
}
?>
会话.php
<?php
session_start();
var_dump(session_id());
var_dump($_SESSION);
?>
/RJ