【问题标题】:sharing session across folder跨文件夹共享会话
【发布时间】:2012-02-14 09:58:46
【问题描述】:

我在 CakePHP 中的文件夹之间共享会话时遇到问题,在这里找到了解决方案:Access cakephp session (auth) from outside cakephp

它在 cakephp 文件夹外给了我一个空会话

<?php
session_name('CAKEPHP');
session_start();
print_r($_SESSION);

?>

谢谢你。

【问题讨论】:

  • 好像没问题,试试删除缓存

标签: php session cakephp


【解决方案1】:

您正在使用session_name('CAKEPHP') 设置会话名称,这可能不是 cake 使用的名称。尝试删除该行,PHP 将使用默认的session_name('PHPSESSID')

编辑 您可能想查看Using Cake sessions outside of Cake

【讨论】:

  • 它根本不工作,cakephp 不会让我登录。配置::write('Session.cookie', 'CAKEPHP');配置文件中有没有
  • 我试过你的链接..它在文件夹外开始一个新会话
【解决方案2】:

您将会话命名为什么? $_SESSION['CAKEPHP'] 也将在放置在 CakePHP 应用程序中时返回空。确保您可以阅读它的最佳方法是知道您想要阅读的内容,然后在您正在编写的 CakePHP 应用程序中正确命名。

$this->Session->write('Name.item1', 'value1'); $this->Session->write('Name.item2', 'value2'); $this->Session->write('Name.item3', 'value3'); ...

然后您可以通过以下方式访问:

$_SESSION['Name']

它会返回

array (
  'item1' => 'value1',
  'item2' => 'value2',
  'item3' => 'value3',
)

在 cake 中,您可以像这样访问它:

$this->Session->read('Name.item1')

它会返回

value1

所以简单地调用$_SESSION['CAKEPHP'] 是行不通的,除非你写信给CAKEPHP

【讨论】:

    【解决方案3】:

    您使用的是 php 会话吗?如果您正在使用 DB 会话,您可以对会话进行 mysql 查询并将其放入 $_SESSION

    【讨论】:

    • 我可以从数据库中获取它,但是如何将它放入会话中?
    • 我将如何使用数据库对用户进行身份验证?
    【解决方案4】:

    在通过控制器将大型应用程序从 CakePHP 迁移到 Yii 控制器的过程中,我们遇到了同样的需求,我相信您所缺少的只是设置正确的 session.save_path (至少在我的情况下)不是只是 /tmp/,而是 %CAKE_PATH%/tmp/sessions/。

    ini_set('session.save_path', TMP . 'sessions');
    

    该行和所有其他 cakephp 会话配置设置可以在 cake/libs/cake_session.php 中找到(至少对于 1.3.10)。从那里设置相同的名称并执行 session_start() 就足够了。

    干杯, 谢恩

    【讨论】:

      【解决方案5】:

      我知道你的症状。这是一个特别令人讨厌的问题,当我遇到这个问题时,我花了很多时间去追查,但我最终解决了这个问题,并且很高兴与其他人分享我有信心的答案。

      Suhosin 的 suhosin.session.cryptdocroot 选项是问题的全部原因。使用 phpinfo.php 检查您的网络服务器并查看是否启用了 Suhosin。 Suhosin 根据子域名在 DocRoot 中创建会话变量。对于两个或多个子域,会话变量无法看到彼此以及彼此的值,因为它们存储在单独的子文件夹中。疯了,是的。但是,有一个足够简单的解决方法,如下所示。

      只需将这两行添加到您的 php.ini 文件中。

      suhosin.session.cryptdocroot=Off
      suhosin.cookie.cryptdocroot=Off 
      

      瞧!跨域的会话变量现在可以正常工作。

      【讨论】:

        【解决方案6】:

        首先请通过phpinfo()检查您的会话是否正常

        如果一切顺利,请尝试

        session_set_cookie_params(0);//before session_start function
        session_start();
        

        同时更改服务器上的会话以查看究竟是什么造成了问题。

        如果您在共享主机上,那么您可以创建单独的 php.ini 来设置值

        [PHP]
        session.cookie_domain = ".domain.com";
        session.save_path = "/home/users/web/foldr1/domain.com/sessions/";
        

        希望通过这种方式,您可以轻松找到根本原因。

        【讨论】:

          【解决方案7】:

          检查一下它可能对你有帮助

          //在文件夹之间共享使用 session save_path

          session_save_path('/home/www/sessions');
          session_start();
          $_SESSION["CAKE_PHP"] = "my_name";
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-08-13
            • 1970-01-01
            • 2013-11-21
            • 2011-02-26
            • 1970-01-01
            • 1970-01-01
            • 2012-10-05
            相关资源
            最近更新 更多