跨文件夹共享会话

时间:2012-02-14 09:58:46

标签: php session cakephp

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

它在cakephp文件夹

之外给我一个空会话
<?php
session_name('CAKEPHP');
session_start();
print_r($_SESSION);

?>

感谢你。

7 个答案:

答案 0 :(得分:1)

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

修改 您可以查看Using Cake sessions outside of Cake

答案 1 :(得分:0)

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

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

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

$_SESSION['Name']

它会返回

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

在蛋糕中你可以访问它:

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

它会返回

value1

除非您写信给$_SESSION['CAKEPHP'],否则简单地调用CAKEPHP将无效。

答案 2 :(得分:0)

您使用的是php会话吗?如果您正在使用数据库会话,您可以只为会话执行mysql查询并将其放入$ _SESSION

答案 3 :(得分:0)

在通过控制器将大型应用程序从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()就足够了。

干杯, shean

答案 4 :(得分:0)

我认出你的症状。这是一个特别令人讨厌的问题,当我体验到这一点时,我花了很多时间追踪它,但最后我把它钉在了一起,我很高兴与大家分享我对自己有信心的答案。

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

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

suhosin.session.cryptdocroot=Off
suhosin.cookie.cryptdocroot=Off 
瞧,瞧!跨域的会话变量现在可以正常工作。

答案 5 :(得分:0)

首先,请检查您的会话是否正常运行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/";

希望通过这种方式找到根本原因很容易。

答案 6 :(得分:-1)

检查一下它可能会对您有所帮助

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

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