无法在本地主机上设置Cookie:3000

时间:2020-07-31 03:13:04

标签: php cookies

我正在localhost:3000上运行React应用。我向默认XAMPP本地主机上的后端发出了axios请求,以设置cookie。在以前的尝试中,如果前端在默认的XAMPP本地主机中,则可以设置cookie。但是自从切换到react dev服务器后,localhost:3000。我无法设置Cookie。

这是我的php文件:

header("Access-Control-Allow-Origin: *");
require __DIR__ . './vendor/autoload.php';
use \Firebase\JWT\JWT;

if(isset($_POST)){
    //grab secret key from .env file, remember to exclude from gitignore.
    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();
    $key = $_ENV['SECRET_KEY'];

    //access post data to for jwt creation
    $data = json_decode(file_get_contents("php://input"), true);
    $timezone = new DateTimeZone('Asia/Kuching');
    $expiry = new DateTime();
    $expiry->setTimezone($timezone);
    $expiry->modify("+2 days");
    
    $date = $expiry->format("Y-m-d H:i:s.v");
    $payload = array(
        "ttl"=>$date,
        "data"=>$data['tokenValue']
        
    );
    $jwt = JWT::encode($payload,$key);
    setcookie("accessToken",$jwt,[
        'expires'=>$date,
        'path'=>'/',
        'domain'=>'localhost',
        'secure'=>false,
        'httponly'=>true,
        'samesite'=>'None'
    ]);
    
}

可能是什么问题?我确实将域从“ localhost”更改为“ localhost:3000”,但是仍然无法正常工作。

1 个答案:

答案 0 :(得分:0)

找到了基于此question的解决方案。

首先在react应用程序上的axios方法中,执行以下操作:

axios
  .post(url, JSON.stringify(payload), {
    withCredentials: true,
}).then(....)

您需要在请求标头中添加凭据true标头。在php文件中执行相同的操作。

在文件开头执行此操作,

header("Access-Control-Allow-Origin: http://localhost:3000");
header("Access-Control-Allow-Credentials: true");

之前,access-control-allow-origin设置为*。但是,为了为localhost:3000设置cookie,我们这样做。还包括allow-credentials,因为我们将axios请求发送为trueCredentials。

现在应该可以工作。