我在控制器内的会话中保存一个值;
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);
}
}
它可能是什么原因?我尝试了各种方式,但无法在第二次请求中检索该值。
任何想法对我都非常有帮助。
答案 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;