Php 跨文件夹共享会话

Php 跨文件夹共享会话,php,session,cakephp,Php,Session,Cakephp,我在CakePHP中的文件夹之间共享会话时遇到问题,并在此处找到了解决方案: 它在cakephp文件夹外为我提供了一个空会话 <?php session_name('CAKEPHP'); session_start(); print_r($_SESSION); ?> 谢谢你。你给这次会议起什么名字$_会话['CAKEPHP']在放置到CAKEPHP应用程序中时也将返回空。确保您能够阅读的最好方法是知道您想要阅读的内容,然后在您正在编写的CakePHP应用程序中正确命名 $th

我在CakePHP中的文件夹之间共享会话时遇到问题,并在此处找到了解决方案:

它在cakephp文件夹外为我提供了一个空会话

<?php
session_name('CAKEPHP');
session_start();
print_r($_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',
)
value1
在cake中,您可以通过以下方式访问:

$this->Session->read('Name.item1')
它会回来的

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

因此,简单地调用
$\u SESSION['CAKEPHP']
将不起作用,除非您正在向
CAKEPHP
写入,您正在使用
SESSION\u name('CAKEPHP')
设置会话的名称,这可能不是cake使用的。尝试删除该行,PHP将使用默认的
会话名称('PHPSESSID')

编辑
您可能想查看您是否正在使用php会话?如果您使用DB会话,您只需对会话执行mysql查询并将其放入$\u session

在将大型应用程序从CakePHP逐控制器迁移到Yii controller的过程中,我们遇到了相同的需求,我相信您所缺少的只是设置正确的session.save\u路径,而这(至少在我的情况下)不仅仅是/tmp/,而是%CAKE\u PATH%/tmp/sessions/

ini_set('session.save_path', TMP . 'sessions');
该行和所有其他cakephp会话配置设置可以在cake/libs/cake_session.php中找到(至少对于1.3.10)。从这里开始,设置相同的名称并执行会话_start()就足够了

干杯,
shean

检查此项,它可能会帮助您

//要在文件夹之间共享,请使用会话保存路径

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

我认识你的症状。这是一个特别令人讨厌的问题,当我经历这一点时,我花了很多时间追踪,但我最终解决了它,我很高兴与其他人分享我认为有信心的答案

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/";

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

似乎没问题,请尝试删除缓存它根本不起作用,cakephp不允许我登录。Configure::write('Session.cookie','CAKEPHP');配置文件中是否有我尝试了你的链接。它在文件夹外启动了一个新会话。我可以从数据库中获取它,但是我如何将它放入会话中?我如何使用数据库对用户进行身份验证?