我已经将CakePHP安装到子目录中,它们似乎运行良好!它们都有不同的 database.php 配置文件,并访问不同的数据库。
示例:
我使用http://www.example.com/cakephp1/和http://www.example.com/cakephp2/分别访问它们,这一切似乎都很好。
当我登录其中一个时出现问题(使用CakePHP标准Auth
/ Session
组件),当我翻到另一个安装时,它也认为我已经登录了! / p>
如何防止这种情况?什么是推荐的解决方案?如果我在每次安装中更改salt
值会有帮助吗?
修改
嗨,Martin,我刚刚尝试了更改core.php的方法来使用“cake”会话处理并指定cookie路径。所以现在在每个应用程序中我都有不同的core.php文件:
cakephp1的core.php
Configure::write('Session', array(
'defaults' => 'cake',
'ini' => array(
'session.cookie_path' => '/cakephp1'
)
));
cakephp2的core.php
Configure::write('Session', array(
'defaults' => 'cake',
'ini' => array(
'session.cookie_path' => '/cakephp2'
)
));
但仍然无效,两个安装似乎仍然共享同一个会话。我应该在哪里查看是否真的创建了cookie?我检查了每个/ cakephp1和/ cakephp2下的文件夹tmp / sessions,但该文件夹始终为空。
编辑:修改AppController:
马丁,请帮我提一下建议的地方。我跟着你的代码如下:
以下是我的/ demo /安装的代码(驻留在public_html / demo /) 您能告诉我在哪里可以找到应该使用您的代码创建的Cookie吗?
如果它应该在public_html / demo / app / tmp / sessions中,我甚至在登录后都看不到任何内容。在public_html / demo /下,除了标准的CakePHP文件夹之外,也没有任何内容。
这是来自我的AppController的/ demo /安装,可以通过http://www.example.com/demo/访问,而不是http://www.example.com/tst/
的其他安装public $components = array(
//'DebugKit.Toolbar',
'Cookie',
'Session',
'Auth'=>array(
//Stuff
)
}
public function beforeFilter() {
//Logic placed here will run before the action is run
parent::beforeFilter();
$this->Cookie->path = '/demo/';
}
将core.php设置为默认值:
Configure::write('Session', array(
'defaults' => 'php'
));
答案 0 :(得分:2)
您需要将每个应用程序中的cookie限制在各自的子目录中。例如,在 AppController.php 中,您可以在beforeFilter()
操作中执行此操作:
<?php
class AppController extends Controller {
public $components = array(
'Cookie',
);
public function beforeFilter() {
parent::beforeFilter();
$this->Cookie->path = '/cakephp1/';
}
}
有关详细信息,请参阅http://book.cakephp.org/2.0/en/core-libraries/components/cookie.html#controller-setup。
答案 1 :(得分:2)
我有类似的问题。
在core.php / bootstrap.php
中使用以下代码进行第一个cakephp应用程序配置::写('Security.cookie','cakephp1');
而在第二个cakephp应用程序中使用core.php / bootstrap.php中的以下代码
配置::写('Security.cookie','cakephp2');
答案 2 :(得分:1)
最后解决了我的问题。
我的代码中有一个session_start()php命令覆盖了所有的core.php配置,基本上它恢复了php.ini会话管理设置。
CakePHP Session being written to /tmp/ and not /app/tmp/sessions/
答案 3 :(得分:0)
虽然有些答案谈论cookie,但没有提及使用Cake自己的会话或PHP会话。所以,我认为分享一种记录在案的方式是很好的。
CakePHP(至少2.x)默认使用php
中的php.ini
会话设置。
该设置可在/app/Config/core.php
中找到,并在那里有详细记录:
Configure::write('Session', array(
'defaults' => 'php' // possible values: php, cake, database, cache
));
对于拥有cake installation directory的应用,只需将上述值更改为cake
即可告诉应用使用app/tmp/sessions
保存会话文件。必须提到可能需要为每个安装使用不同的cookie名称:
Configure::write('Session', array(
'defaults' => 'cake'
'cookie' => 'myApp1' // something like 'myApp2' for other app
));
Cookbook提供了与会话相关的所有设置的良好文档。