Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Symfony中设置和发送Cookie,而前端在ReactJS中?_Php_Reactjs_Symfony_Cookies_Setcookie - Fatal编程技术网

Php 如何在Symfony中设置和发送Cookie,而前端在ReactJS中?

Php 如何在Symfony中设置和发送Cookie,而前端在ReactJS中?,php,reactjs,symfony,cookies,setcookie,Php,Reactjs,Symfony,Cookies,Setcookie,我正在编写一个应用程序,该应用程序在localhost:3001中使用ReactJs作为前端,在localhost:3000中使用Symfony作为后端,为了实现跨源通信,我在Symfony中使用“cors bundle”。 现在我想在用户登录时创建一个Cookie,但它似乎没有被创建 谢谢你的帮助 这是用户登录时Symfony中的代码: use Symfony\Component\HttpFoundation\Cookie; $cookie = new Cookie( 'my_cookie

我正在编写一个应用程序,该应用程序在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);
应该是

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

应该是

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

从Symfony 2开始,我没有体验到任何不同。这里已经回答了这个问题:


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

我在Symfony 2中没有体验到任何不同。这里已经回答了这个问题:

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

您需要的是:

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

  • 您需要的是:

    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


  • 配置的值是多少?@msg我尝试了true和false,都不起作用。配置的值是多少?@msg我尝试了true和false,都不起作用。