我在CakePHP中的文件夹之间共享会话时遇到问题,并在此处找到了解决方案:Access cakephp session (auth) from outside cakephp
它在cakephp文件夹
之外给我一个空会话<?php
session_name('CAKEPHP');
session_start();
print_r($_SESSION);
?>
感谢你。
答案 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";