CakePHP通过AJAX设置会话

时间:2013-12-30 21:13:48

标签: php ajax session cakephp cakephp-2.0

我在使用CakePHP会话和AJAX时遇到了很多麻烦。我有一个使用Auth->login()的AJAX登录,然后我使用Session->write()添加一些额外的参数。

$this->Auth->login();
$this->Session->write('Auth.User.id', $user_grab['User']['id']);
$this->Session->write('Auth.User.auth_level', $user_grab['User']['auth_level']);
$this->Session->write('Auth.User.successful', 3);

上午根据我已阅读的一些建议使用Configure::write('Session.checkAgent', false);

问题是我在这个AJAX中设置的任何时候,它都不会在任何其他页面加载时出现:即使我在写完之后再次执行AJAX,只是执行read(),read( )将是空的。它好像完全忽略了AJAX。但如果我:

 ...    

 $this->Session->write('Auth.User.successful', 3);

 print_r($this->Session->read());

我会看到会议中应该是什么,它只是赢得了真正的拯救。我可以在应用程序的非ajax部分中保存其他任何地方,甚至只需在站点索引上设置测试会话数据。它仍然存在。

我完全卡住了。这似乎与使用Auth-> login()无关。我在AppController中使用Session和Auth。

预期的行为能够在AJAX中使用Session-> write()并让我写的内容可以在其他地方使用。为了测试,我使用了一个简单的调试($ _ SESSION)和调试($ this-> Session-> read())的测试操作。

1 个答案:

答案 0 :(得分:0)

这是愚蠢的事。我想在这里记录其他人的参考:

它与www子域名有关。我碰巧在整个过程中将它留在了各个地方,包括AJAX请求本身,这保证了只能通过www访问的新会话。这不是Cake独有的,但我认为这是一个重要的因素,值得注意的是任何人都会遇到类似的东西,而这些东西在本地机器上不易复制。

仅供参考,您可以通过.htaccess:

强制整个域名使用www
<IfModule mod_rewrite.c>
   RewriteEngine on

   RewriteCond %{HTTPS} off
   RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
   RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

   RewriteCond %{HTTPS} on
   RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
   RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>