无法获得会话变量值symfony

时间:2017-07-31 15:46:53

标签: php symfony session

我在控制器内的会话中保存一个值;

public function setSessionValue($key,$val){

   $session = $this->get('session');

   $session->set($key,$val);

   echo "Token is: ".$session->get('token');
}

获得回复;

令牌是:e129cb3b547b6017a9f69fe30a96efed

在另一个请求中,我正在使用另一种方法从会话中检索该标记值;

public function getSessionValue($key){

   $session = $this->get('session');

   echo "Token is: ".$session->get('token');
   return $session->get($key);
}

现在回复是:

令牌是:NULL

我的security.yml文件如下;

# To get started with security, check out the documentation:
# https://symfony.com/doc/current/security.html
security:

# https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
providers:
    in_memory:
        memory: ~

firewalls:
    # disables authentication for assets and the profiler, adapt it according to your needs
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    main:
        anonymous: ~
        # activate different ways to authenticate

        # https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
        #http_basic: ~

        # https://symfony.com/doc/current/security/form_login_setup.html
        #form_login: ~

我的完整控制器类如下:

<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Session\Session;

class BaseController extends Controller{

  public $request;

  public function setSessionValue($key,$val){

    $session = $this->get('session');

    $session->set($key,$val);

    echo "Token is: ".$session->get('token');
  }

  public function getSessionValue($key){

    $session = $this->get('session');

    echo "Token is: ".$session->get('token');
    return $session->get($key);
  }
}

然后我正在做类似的事情;

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Doctrine\ORM\EntityManagerInterface;

use AppBundle\Entity\UserData;
use AppBundle\Bl\LoginOperation;
use AppBundle\Controller\BaseController;

class LoginController extends BaseController
{
   /**
    * @Route("/login", name="loginpage")
    */
public function loginAction($request)
{
      /* more code */

      //storing token
      $this->setSessionValue('token',$obj->token);
      $this->setSessionValue('uid',$user->getUserId());
      $response = json_encode($obj);

      return new Response($response);
}
}

它可能是什么原因?我尝试了各种方式,但无法在第二次请求中检索该值。

任何想法对我都非常有帮助。

1 个答案:

答案 0 :(得分:0)

根据您的信息,我看到一个可能的案例:

在symfony中,您在一个防火墙下登录(请参阅app / config / security.yml文件)

import:    
    pattern:  ^/import$
                http_basic:
                    realm: "Secured Auth"
                provider: myprovider
main:
    pattern: ^/
    form_login:
        provider: fos_userbundle
        csrf_provider: form.csrf_provider
    logout:       true
    anonymous:    true

在此示例中,如果您在主防火墙下登录,则无法在导入防火墙下自动登录。因此,如果您在主防火墙路径下的会话中设置变量,则此变量不会在路径 / import

下可用

您提到了另一个请求,其中会话值(uid和令牌)不可用,但我没有在您的帖子中看到它。

Symfony在您未登录时创建匿名会话,因此您的值在此会话中。但是,如果您登录并尝试访问不会成为先前匿名会话的会话,但会创建一个新的已创建且已验证的会话(我猜测与已知用户相关)。 我希望我能清楚^^&#39;