繁体   English   中英

前端在ReactJS,如何在Symfony设置发送Cookies?

[英]How to set and send Cookies in Symfony while the front-end is in ReactJS?

我正在编写一个应用程序,该应用程序在localhost:3001的前端使用 ReactJs,在后端localhost:3000使用 Symfony,为了启用跨源通信,我在 Symfony 使用“cors-bundle”。现在我想创建一个用户登录时的cookie,但它似乎没有被创建!

谢谢你的帮助,

这是用户登录时 Symfony 中的代码:

use Symfony\Component\HttpFoundation\Cookie;


$cookie = new Cookie( 'my_cookie', 1, strtotime('tomorrow') );
$res = new Response();
$res->headers->setCookie( $cookie );
return new JsonResponse($res);

这是我也试过的:

$res->headers->setCookie(Cookie::create('my_cookie', 1));
return new JsonResponse($res);

你需要的是:

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;

class YourClass extends AbstractController {

    public function yourMethod(Request $request) {
        $cookie = new Cookie(
                      "cookie_name_here",                      // Cookie name
                      1,                                       // Cookie content
                      (new DateTime('now'))->modify("+1 day"), // Expiration date
                      "/",                                     // Path
                      "localhost",                             // Domain
                      $request->getScheme() === 'https',       // Secure
                      false,                                   // HttpOnly
                      true,                                    // Raw
                      'Strict'                                 // SameSite policy
                  );
        $res = new JsonResponse();
        $res->headers->setCookie($cookie);
        return $res;
    }
}

这里需要注意的事情。

  1. 设置“安全”标志将意味着此 cookie 仅在 HTTPS 连接上传输。 在生产中不要忽视这一点。 您可能希望使用$request->getScheme() === 'https'作为参数评估。

  2. “HttpOnly”标志是为了安全并阻止 Javascipt 和浏览器扩展访问 cookie。 如果您正在使用 XHR 发出请求(例如,Axios)并包含“withCredentials”,那么可以将其设置为true并且无论如何都会发送。 如果您想读取React 中的值,请将其设置为false

它应该是

$res = new JsonResponse();

$res->headers->setCookie($cookie); 返回 $res;

我在执行此操作时与 Symfony 没有任何区别 2. 这已在此处得到解答: How to attach cookies to JSON Response in symfony2?

您是否检查过浏览器的开发人员工具以查看响应中是否包含 cookie? 具体查看网络选项卡并监视 AJAX 响应的标头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM