我在CakePHP中的文件夹之间共享会话时遇到问题,并在这里找到了一个解决方案:从cakehp外部访问cakehp-session(auth)
它给了我一个空的会话外的cakepp文件夹
<?php
session_name('CAKEPHP');
session_start();
print_r($_SESSION);
?>
谢谢你。
您正在使用session_name('CAKEPHP')
设置会话的名称这可能不是蛋糕所使用的名称。尝试删除该行,PHP将使用默认的session_name('PHPSESSID')
。
编辑您可能想查看Cake 之外的使用Cake会话
您将会话命名为什么$_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',
)
在蛋糕中,你可以访问它,如:
$this->Session->read('Name.item1')
它将返回
value1
因此,简单地调用$_SESSION['CAKEPHP']
是行不通的,除非您正在向CAKEPHP
写入。
您在使用php会话吗?如果您使用的是DB会话,您只需对会话进行mysql查询,并将其放入$_session
在将大型应用程序从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
我能识别你的症状。这是一个特别棘手的问题,当我经历这个问题时,我花了很多时间来追踪,但我最终还是解决了,我很高兴能与其他人分享我相信会是答案的东西。
Suhosin的Suhosin.session.cryptdocroot选项是问题的全部原因。使用phpinfo.php检查您的Web服务器,并查看是否启用了Suhosin。Suhosin根据子域名称在DocRoot中创建会话变量。对于两个或多个子域,会话变量无法看到彼此以及彼此的值,因为它们存储在单独的子文件夹中。疯了,是的。然而,有一个足够简单的解决方案,如下所示。
只需将这两行添加到php.ini文件中即可。
suhosin.session.cryptdocroot=Off
suhosin.cookie.cryptdocroot=Off
瞧!跨域的会话变量现在正常工作。
首先请从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/";
希望这样你就能很容易地找到根本原因。
检查此项,它可能会帮助您
//要在文件夹之间共享,请使用会话保存路径
session_save_path('/home/www/sessions');
session_start();
$_SESSION["CAKE_PHP"] = "my_name";