[英]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;
}
}
这里需要注意的事情。
设置“安全”标志将意味着此 cookie 仅在 HTTPS 连接上传输。 在生产中不要忽视这一点。 您可能希望使用$request->getScheme() === 'https'
作为参数评估。
“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.