首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Symfony将任意数据设置为匿名访问者会话。

Symfony将任意数据设置为匿名访问者会话。
EN

Stack Overflow用户
提问于 2016-07-05 14:36:46
回答 1查看 172关注 0票数 1

使用Symfony 3.0.7

简单地说:

我无法将任意数据设置并检索为匿名用户的会话。

换句话说..。

我通常从会话对象中检索数据,在任何带有以下几行行的控制器中:

代码语言:javascript
代码运行次数:0
运行
复制
public function dummyAction(Request $request)
{
    # …
    $session = $request->getSession();
    $my_datas = $session->get('my_key');
    # …

直到今天,在防火墙后面配置标准方式的urls上还需要(和工作),这意味着登录和login_check密钥以及用户提供者等等。

现在,我需要一个新的防火墙来保护一个新的区域:"/api/.+".

这个区域必须是无状态的,但是一个特殊的uniq "/api/signup"必须允许会话。

所以我创建了下面的防火墙

代码语言:javascript
代码运行次数:0
运行
复制
firewalls:
    apisignup:
        pattern: api/signup
        anonymous: ~
    api:
        pattern: /api/
        provider: usr
        stateless: true
        lexik_jwt: ~

我所需要的只是在访问者点击时将单个标量值( captcha解决方案)持久化到会话中。

代码语言:javascript
代码运行次数:0
运行
复制
GET http://192.168.0.5/app_dev.php/en/api/signup

然后,在发送到同一个url时,我需要检索值。

Notes

目前,无论我是通过GET还是POST点击这个url,服务器响应总是包含一个"set- cookie“头,就好像浏览器只是简单地删除了这个命令,而不是在下一个请求时传递cookie。

我使用以下代码片段进行了测试:

代码语言:javascript
代码运行次数:0
运行
复制
### 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“值始终包含

你知不知道(“我错过了”)会导致这种行为?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-05 17:12:00

我打赌你是在发出来自另一个域名的请求。

在这种情况下,提醒CORS需要:

  1. 服务器端,必须将Access-control-allow_credentials 设置为true。
  2. 客户端,必须将withCredentials xhr属性设置为true。

然后,您的XHTTP请求将使用该请求为该域推送任何可用的设置cookie。确保制定适当的限制政策以降低CSRF的风险

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38206219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档