【发布时间】:2016-06-16 03:24:43
【问题描述】:
复制:
全新安装。将以下内容放在 Page::init() 中。
var_dump(Session::get_all());
Session::set('testVariable', 'testValue');
访问网站上的页面,无需登录也无需访问 /admin。
此操作的预期结果(在加载页面两次后)将看到包含 testVariable => testValue 的会话数据转储
相反,似乎存储在会话中的任何数据都不会在请求之间持续存在。除非 /admin 被访问过。访问/admin,然后再次检查...
因此,当访问 /admin 时会发生一些事情,这会使 Session 持续存在。
这似乎不是所有托管环境的问题...但是,我们测试过的 3/4 确实存在此问题。其中两个运行 PHP 5.4,另外两个运行 PHP 5.6。
这似乎不是任何 SS 版本特有的问题,我们测试了 3.0.5、3.2、3.4.0
我已经在 github 上针对 silverstripe-framework 提交了 issue,但是任何见解都会很有价值,因为我们在野外有一个网站因此而被破坏,任何线索/修复/补丁/黑客/解决方法都会很棒。
【问题讨论】:
-
这些能解释stackoverflow.com/questions/21911292/… 和silverstripe.org/community/forums/general-questions/show/39118 的问题吗.. 可能不完全是因为会话也应该为未登录的用户保存.. 但是调用保存有帮助吗?
-
请求完成,因此问题与这些线程中提出的问题无关。调用 Session::save() 没有帮助。
-
这真的很奇怪,我已经尝试过这个场景,它的工作原理和我预期的一样——即我没有得到错误。我要添加到建议中的最后一件事是确保会话以...开始... Session::start();
-
感谢@Barry 安排会议::start();在 mysite/_config.php 中就可以了。 session_start() 也可以工作,但前提是调用得更远一点,即。在 Page_Controller::init() 中。知道根本问题是什么仍然很高兴,但目前这是一个很好的解决方法
-
@SheaDawson 我已经添加了这个作为答案,因为我无法重现它,我不得不猜测它是其他一些代码干扰。你是在全新安装时这样做的吗
标签: silverstripe