Hướng dẫn set samesite cookie php - thiết lập php cookie samesite

1. Đối với PHP> = V7.3

Bạn có thể sử dụng mảng $options để đặt giá trị

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
0, ví dụ:

setcookie($name, $value, [
    'expires' => time() + 86400,
    'path' => '/',
    'domain' => 'domain.example',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'None',
]);

Giá trị của phần tử Samesite phải là

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
1,
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
2 hoặc
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
3.

Đọc thêm trong trang hướng dẫn.

2. Đối với PHP

Bạn có thể sử dụng một trong các giải pháp/cách giải quyết sau đây tùy thuộc vào cơ sở mã/nhu cầu của bạn

Bạn có thể thêm dòng sau vào cấu hình Apache của mình

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"

Và điều này sẽ cập nhật tất cả các cookie của bạn bằng cờ

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
4

Xem thêm tại đây: https://blog.giantgeek.com/?p=1872

location / {
    # your usual config ...
    # hack, set all cookies to secure, httponly and samesite (strict or lax)
    proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}

Tương tự ở đây, điều này cũng sẽ cập nhật tất cả các cookie của bạn bằng cờ

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
4

Xem thêm tại đây: https://serverfault.com/questions/849888/add-samesite-to-cookies-using-ninx-as-rerse

Như chúng ta biết cookie chỉ là một tiêu đề trong yêu cầu HTTP với cấu trúc sau

Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax

Vì vậy, chúng tôi chỉ có thể đặt cookie bằng phương pháp

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
6

header("Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax");

Trên thực tế, Symfony không chờ đợi Php 7.3 và đã làm điều đó dưới mui xe, xem tại đây

Bạn cũng có thể sử dụng tương tự ở Laravel vì Laravel dưới mui xe bằng lớp

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
8 của Symfony

setcookie('cookie-name', '1', 0, '/; samesite=strict');

Hãy cẩn thận với điều này, đó là một lỗi đã biết trong phương pháp PHP

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
9 và đã được giải quyết trong phiên bản PHP7.3, xem tại đây - https://github.com/php/php-src/commit/5cb825df7251aEb28b297

  • PHP.Watch
  • Bài viết

Php 7.3 Cookies cùng trang web

Php 7.3 hiện đã được phát hành chính thức và nó đi kèm với hỗ trợ cho cờ Cookie Samesite!

Cookie cùng một trang web, được hỗ trợ trong Chrome (51+), Firefox (60+), nhưng chưa ở cạnh/IE (không có gì đáng ngạc nhiên), là một lá cờ mà bạn có thể đặt cho cookie. Cờ này sẽ đánh dấu xem cookie có nên được gửi cho các yêu cầu chéo. Có ba giá trị,

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
2 và
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
3,
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
1, rằng bạn có thể quyết định cách bạn muốn trình duyệt thực thi nó.

Không có

Nếu cờ

location / {
    # your usual config ...
    # hack, set all cookies to secure, httponly and samesite (strict or lax)
    proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}
4 được đặt, các trình duyệt sẽ không thực thi các quy tắc Samesite. Ngay cả khi các trình duyệt bắt đầu xử lý cookie mà không có cờ này là
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
2 (đó là trường hợp của Chrome 80 trở lên), việc đặt
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
1 sẽ vô hiệu hóa sự bảo vệ này.

Lỏng lẻo

Khi một cookie được đánh dấu

location / {
    # your usual config ...
    # hack, set all cookies to secure, httponly and samesite (strict or lax)
    proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}
7, cookie đó sẽ không được thông qua cho bất kỳ yêu cầu tên miền nào trừ khi đó là liên kết thông thường điều hướng người dùng đến trang web đích. Các phương thức yêu cầu khác (chẳng hạn như
location / {
    # your usual config ...
    # hack, set all cookies to secure, httponly and samesite (strict or lax)
    proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}
8 và
location / {
    # your usual config ...
    # hack, set all cookies to secure, httponly and samesite (strict or lax)
    proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}
9) và các yêu cầu XHR sẽ không chứa cookie này.

Nghiêm khắc

Nếu bạn đánh dấu một cookie là

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
3, cookie đó sẽ không được gửi cho bất kỳ yêu cầu nào trong miền. Ngay cả khi người dùng chỉ cần điều hướng đến trang web đích với một liên kết thông thường, cookie sẽ không được gửi. Điều này có thể dẫn đến một số trải nghiệm người dùng khó hiểu hoặc hết sức không thực tế, vì vậy hãy cẩn thận nếu bạn sử dụng cookie
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
3.Even if the user simply navigates to the target site with a regular link, the cookie will not be sent. This might lead to some confusing or downright impractical user experiences, so be careful if you use
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
3 cookies.

Php 7.3 cung cấp một chỉ thị

Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax
2 mới để buộc PHP gửi cờ
Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax
3 khi gửi cookie phiên. Chỉnh sửa tệp
Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax
2 của bạn và thêm dòng bên dưới:

session.cookie_samesite=Lax

Bạn có thể thay đổi giá trị

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
2 thành
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
3 cho cookie
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
3.

Đối với cookie phiên

Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax
8 rõ ràng, cài đặt PHP nên được sử dụng với các trích dẫn. Điều này là do trong Ini,
Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax
9 được hiểu là
header("Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax");
0.

session.cookie_samesite="None"

Đó là tùy thuộc vào các trình duyệt để giả định một giá trị mặc định. Đáng chú ý nhất, Chrome 80 trở đi sẽ giả định

location / {
    # your usual config ...
    # hack, set all cookies to secure, httponly and samesite (strict or lax)
    proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}
7 trong trường hợp đó.

Php 7.3 có chữ ký chức năng mới cho setCookie (), trong đó bạn đặt cookie SameTeite tương tự như ví dụ dưới đây:

setcookie('NAME_OF_A_SESNSISITVE_COOKIE',   'cookie_value', ['samesite' => 'Lax']);
setcookie('NAME_OF_A_SUPER_SECURE_COOKIE',  'cookie_value', ['samesite' => 'Strict']);
setcookie('NAME_OF_A_MEH_COOKIE',           'cookie_value', ['samesite' => 'None']);

Plugin WordPress

Nếu bạn đang sử dụng WordPress, tôi đã kết hợp một plugin WordPress tối thiểu: trang plugin ở đây và git repo ở đây.

Các bài viết gần đây về Php.Watch

Hướng dẫn set samesite cookie php - thiết lập php cookie samesite

Laragon: Môi trường máy chủ phát triển hiện đại đơn giản, linh hoạt và hiện đại cho Windows

Laragon là một môi trường phát triển Windows hiện đại, đơn giản và linh hoạt, cung cấp hỗ trợ cho nhiều phiên bản PHP, Apache và MySQL, với thiết lập HTTPS nhanh, các mẫu ứng dụng nhanh, trình soạn thảo, NPM, và nhiều hơn nữa

16 tháng 9 năm 2022