使用Symfony 3.0.7
简单地说:
我无法将任意数据设置并检索为匿名用户的会话。
换句话说..。
我通常从会话对象中检索数据,在任何带有以下几行行的控制器中:
public function dummyAction(Request $request)
{
# …
$session = $request->getSession();
$my_datas = $session->get('my_key');
# …
直到今天,在防火墙后面配置标准方式的urls上还需要(和工作),这意味着登录和login_check密钥以及用户提供者等等。
但
现在,我需要一个新的防火墙来保护一个新的区域:"/api/.+".
这个区域必须是无状态的,但是一个特殊的uniq "/api/signup"必须允许会话。
所以我创建了下面的防火墙
firewalls:
apisignup:
pattern: api/signup
anonymous: ~
api:
pattern: /api/
provider: usr
stateless: true
lexik_jwt: ~
我所需要的只是在访问者点击时将单个标量值( captcha解决方案)持久化到会话中。
GET http://192.168.0.5/app_dev.php/en/api/signup
然后,在发送到同一个url时,我需要检索值。
Notes
目前,无论我是通过GET还是POST点击这个url,服务器响应总是包含一个"set- cookie“头,就好像浏览器只是简单地删除了这个命令,而不是在下一个请求时传递cookie。
我使用以下代码片段进行了测试:
### SERVER SIDE
/**
* @Route( "/signup", name="api_signup")
* @Method( {"GET","POST"} )
*/
public function signupAction( Request $request )
{
$session = $this->get('session');
if ( $request->isMethod('POST') ) {
$datas = $request->request->all();
return new JsonResponse([
'received' => $datas['captcha']
,'captcha' => var_export($session->get('captcha'), true)
]);
}
$session->set('captcha','foobar');
return new JsonResponse(['challenge' => 'foobar']);
}
### CLIENT SIDE
$.ajax({
url:'http://192.168.0.100/app_dev.php/en/api/signup'
,method: 'get'
,success : function(datas){
// datas.challenge && $('#captcha').html(datas.challenge) &&
$.ajax({
url:'http://192.168.0.100/app_dev.php/en/api/signup'
,method: 'post'
,data: {
captcha: 'foobar' // prompt("Captcha ?")
// ...
}
});
}
});
POST JsonResponse
"captcha“值始终包含空。
你知不知道(“我错过了”)会导致这种行为?
谢谢。
发布于 2016-07-05 09:12:00
我打赌你是在发出来自另一个域名的请求。
在这种情况下,提醒CORS需要:
Access-control-allow_credentials
头设置为true。withCredentials
xhr属性设置为true。然后,您的XHTTP请求将使用该请求为该域推送任何可用的设置cookie。确保制定适当的限制政策以降低CSRF的风险
https://stackoverflow.com/questions/38206219
复制相似问题