跨文件夹共享会话


sharing session across folder

我在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";