让我给你一个场景。我有一个调用 /auth 的 AJAX 调用 - 该页面依次检查用户是否经过身份验证并设置了几个会话变量(下面的代码)。
$session = $this->getRequest()->getSession();
$session->set('fbid', $fbid);
$session->set('name', $name);
// not sure if this is even needed - get the same with or without
//$session->save();
现在,如果我转到另一个页面并尝试访问该会话,它会返回为空。
如果我在常规页面上设置这些会话(不是通过 XMLHttpRequest/AJAX 访问的页面),它工作正常。
这是我的会话设置config.yml
:
session:
cookie_lifetime: 3600
cookie_httponly: false
我以为问题可能是httponly
,但事实并非如此。
有什么建议么?我错过了什么吗?
* 更新 *
这是我的安全/防火墙设置:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/demo/secured/login$
security: false
secured_area:
pattern: ^/demo/secured/
form_login:
check_path: /demo/secured/login_check
login_path: /demo/secured/login
logout:
path: /demo/secured/logout
target: /demo/
我根本没有更改防火墙设置,据我所知,它不应该影响/auth
通过 XMLHttpRequest 的调用。
* 更新 2 *
我最终$session->shutdown()
在 2 组之后添加(是的,我知道 shutdown 不是 Session 对象方法)。它最终得到了一个错误,但正因为如此它开始工作并且它实际上将它保存到 $_SESSION。因此,如果该错误迫使它保存到 $_SESSION,则必须有一个实际的方法来强制保存。真是奇葩。。