【问题标题】:Silverstripe Session not persisting, unless /admin visitedSilverstripe 会话不会持续存在,除非 /admin 访问过
【发布时间】: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


【解决方案1】:

添加会话::start();在其他会话调用起作用之前。

【讨论】:

    【解决方案2】:

    在Session::set() 之后尝试Session::save()。

    【讨论】:

    • Session::save() 不走运
    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 2012-01-10
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多