【发布时间】:2016-08-26 14:39:48
【问题描述】:
我尝试在 __destruct() 方法中设置会话变量。 方法 __destruct() 正在运行,但未设置会话变量。 同时,__contruct() 中的会话或其他方法(例如 test())按预期工作。
public function test()
{
$_SESSION['MyVarTest'] = rand(200,300); ← working correctly
}
public function __destruct()
{
echo 'called';
$_SESSION['MyVar'] = rand(1,100); ← not working
}
更新版本。现在我尝试原生 PHP Session 和 Symfony 组件,但都不能在 __destruct() 方法中工作。
<?php
namespace Project\Modules\Cart\Storage;
use Illuminate\Support\Collection;
class Session
{
/**
* @var \Symfony\Component\HttpFoundation\Session\Session
*/
protected $session;
protected $cart;
public function __construct()
{
$this->cart = new Collection();
$this->session = app('session');
print_r($_SESSION);
}
public function test()
{
$this->session->set('json', rand(1,100)); ← working correctly
$_SESSION['json'] = rand(1,100); ← working correctly
return $this->cart->toJson();
}
public function __destruct()
{
echo 'called';
$_SESSION['MyVar'] = rand(1,100); ← not working
$this->session->set('cart', serialize($this->cart->toArray())); ← not working
}
}
【问题讨论】:
-
向我们展示你是如何测试这一切的。
-
你怎么知道
__destruct()确实被调用了? -
是的,这个例子还远未完成。我能想到一个问题:如何停止脚本?最好是一个完整的例子,我们可以运行。
-
var_dump($this->session)in__destruct -
您可能还应该包含更多代码 - 您只展示了类中的几个方法。我尝试使用一些类似的代码复制您的代码 - 在我的示例中,我发现在创建对象之后,然后
unset()调用了__destruct()并设置了会话密钥。
标签: php symfony session session-set-save-handler