我正在使用 cakephp 运行应用程序作为我们公司的公共(public)网站,老板要求我为他们创建另一个应用程序,以使用相同的用户帐户及其权限来管理办公室事件。
在本地开发 PC 上,该项目位于 D:/wamp/www/blackstone
我刚刚复制了 D:/wamp/www/blackstone/app
并将其粘贴到同一位置,并将其命名为 office
。
应用程序文件夹路径是:
D:/wamp/www/blackstone/app
D:/wamp/www/blackstone/office
我已在“office”appController 中提交了“isAutorized”、“Auth”和“Session”组件,以防止检查登录。正在使用以下 URL 访问应用程序:
localhost/blackstone
localhost/blackstone/office
我想访问 office
中 blackstone
的“ session ”。我还没有找到解决办法。
目前我在 blackstone
中有 core.php
为:
Configure::write('Session', array(
'defaults' => 'cake',
'cookie' => 'my_app',
'timeout' => 500, // 8 hours + 20 min,
'cookie_path' => '/',
)
);
core.php
在 office
应用程序中为:
Configure::write('Session', array(
'defaults' => 'cake',
'cookie' => 'my_app',
'timeout' => 500, // 8 hours + 20 min,
'cookie_path' => '../',
)
);
这导致了更多的变化。
我可以尝试改变什么?
最佳答案
在调试此类内容时,最好尝试设置最简单、最愚蠢、最不容易出错的参数,以确保您可以首先使其正常工作 - 然后慢慢增加您想要在生产中使用的复杂性(例如,更安全)以准确地了解哪里可能会出现问题。
首先,确保在 core.php 中确保在两个应用程序中设置 Security.level = "low"。否则,应用程序会进行 session 引用检查(如果“中”),甚至重新生成 session ID(如果“高”),这肯定会阻止共享。
我看到的两个复杂点是“defaults”=>“cake”和相应的“cookie_path”值。 As the CakePHP manual says ,将其设置为“cake”会将服务器 session cookie 放置在与该应用程序相关的目录中。
您应该注释掉 cookie_path 行,然后设置 'defaults' => 'php'。这样您就知道 PHP 至少会将 session cookie 放置在您的开发计算机上的一个固定目录中。
如果您必须切换回“cake”,请确保您的“cookie_path”参数实际上将服务器 cookie 文件写入单个共享目录中。当您在浏览器中访问这两个应用程序时,实际查看写入预期目录的文件。如果两个应用程序将 session cookie 写入不同的目录,那么您必须修复 cookie_path 参数以匹配,因为应用程序显然没有共享。另外,根据您的 CakePHP 版本,您可能需要按以下方式编写此参数,而不是如何使用它才能使其生效: 'ini' => array('session.cookie_path' => '/app/目录')
最后,仔细检查站点域、“cookie 路径”和所有其他 session cookie 参数是否完全相同。 (您可以在 Chrome Web 检查器中检查客户端 Cake session Cookie。)如果有任何不匹配的情况,则应用程序将无法共享。
关于session - cakephp 多个应用程序具有相同的蛋糕库和共享 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892178/