Sửa lỗi 'ERROR: Cookies are blocked or not supported by your browser' khi đăng nhập WordPress

intermediate📝 WordPress2026-06-11| WordPress 5.x–6.x, Apache/Nginx, PHP 7.4–8.3, mọi hệ điều hành (Linux/Windows/macOS), mọi trình duyệt

Error Message

ERROR: Cookies are blocked or not supported by your browser. You must enable cookies to use WordPress.
#wordpress#cookies#đăng nhập#trình duyệt#session

Chuyện gì đang xảy ra

Bạn mở yourdomain.com/wp-login.php, nhập đúng thông tin đăng nhập, nhưng thay vì vào được trang quản trị thì lại nhận được thông báo:

ERROR: Cookies are blocked or not supported by your browser. You must enable cookies to use WordPress.

Chín trong mười trường hợp, trình duyệt của bạn hoàn toàn bình thường. Thông báo lỗi này gây hiểu nhầm. Thủ phạm thực sự là sự không khớp URL — WordPress nghĩ nó đang chạy ở một địa chỉ trong khi trình duyệt của bạn lại truy cập vào địa chỉ khác. Cookie đăng nhập bị gán cho sai domain và bị loại bỏ ngay lập tức.

Nguyên nhân gốc rễ (xếp theo tần suất)

  • URL không khớp trong cơ sở dữ liệu — tùy chọn siteurl hoặc home trong wp_options trỏ đến scheme hoặc subdomain khác (ví dụ: lưu là http:// nhưng bạn đang truy cập qua https://, hoặc www. so với domain không có www).
  • COOKIE_DOMAIN sai trong wp-config.php — một hằng số cũ hoặc không chính xác ghi đè phạm vi cookie.
  • Reverse proxy / CDN không chuyển tiếp đúng header host — WordPress nhận được hostname khác với trình duyệt.
  • Plugin cache hoặc bảo mật bên thứ ba xóa header Set-Cookie.
  • Trình duyệt thực sự chặn cookie — hiếm gặp, nhưng là trường hợp nhanh nhất để loại trừ.

Bước 1 — Loại trừ vấn đề trình duyệt trong 60 giây

Mở cửa sổ riêng tư/ẩn danh (Ctrl+Shift+N trên Chrome/Edge, Ctrl+Shift+P trên Firefox). Đăng nhập từ đó. Nếu thành công thì vấn đề nằm ở cấp độ trình duyệt: một tiện ích mở rộng lỗi hoặc cài đặt cookie quá chặt. Xóa dữ liệu trang web cho domain của bạn:

  • Chrome: DevTools → Application → Storage → Clear site data.
  • Firefox: DevTools → Storage → Cookies → nhấp chuột phải vào domain → Delete All.

Chế độ ẩn danh cũng thất bại? Vấn đề nằm ở phía máy chủ. Tiếp tục Bước 2.

Bước 2 — Kiểm tra siteurl và home trong cơ sở dữ liệu

Chạy lệnh này trong phpMyAdmin hoặc qua WP-CLI:

# WP-CLI (nhanh nhất)
wp option get siteurl
wp option get home

Cả hai giá trị phải khớp chính xác với những gì hiển thị trên thanh địa chỉ trình duyệt — cùng scheme (https hay http), cùng subdomain (www hay không có). Chỉ cần sai một ký tự là cookie sẽ bị hỏng. Sửa sự không khớp bằng lệnh:

wp option update siteurl 'https://yourdomain.com'
wp option update home    'https://yourdomain.com'

Không vào được wp-admin? Ghi đè tạm thời các giá trị trong wp-config.php:

define( 'WP_SITEURL', 'https://yourdomain.com' );
define( 'WP_HOME',    'https://yourdomain.com' );

Lưu file và thử đăng nhập lại.

Bước 3 — Xóa hoặc sửa COOKIE_DOMAIN trong wp-config.php

Tìm kiếm trong wp-config.php bất kỳ hằng số nào sau đây:

grep -E 'COOKIE_DOMAIN|COOKIEPATH|SITECOOKIEPATH' /var/www/html/wp-config.php

Tìm thấy COOKIE_DOMAIN trỏ đến domain cũ? Hãy comment nó lại:

// define( 'COOKIE_DOMAIN', 'old-domain.com' );  // ← comment dòng này lại

WordPress tự động xác định domain cookie từ siteurl. Bạn chỉ cần COOKIE_DOMAIN trên các cài đặt multisite chia sẻ cookie giữa các subdomain:

// Với single site — không cần đặt COOKIE_DOMAIN.
// Với multisite chia sẻ cookie trên *.yourdomain.com:
define( 'COOKIE_DOMAIN', '.yourdomain.com' );  // lưu ý dấu chấm ở đầu

Bước 4 — Kiểm tra sự không khớp http/https phía sau proxy

Đây là trường hợp tinh tế. Máy chủ của bạn bắt buộc dùng HTTPS, nhưng siteurl của WordPress vẫn là http://. Load balancer kết thúc SSL trước khi PHP nhận được request. $_SERVER['HTTPS'] của PHP trả về rỗng, khiến WordPress bỏ qua cờ Secure trên cookie — hoặc gán cookie cho sai domain.

Thêm đoạn này vào wp-config.php để khắc phục:

// Báo cho WordPress biết HTTPS đang hoạt động dù PHP thấy HTTP
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) {
    $_SERVER['HTTPS'] = 'on';
}

Trên Nginx, đảm bảo block upstream thực sự truyền header đó:

proxy_set_header X-Forwarded-Proto $scheme;

Bước 5 — Vô hiệu hóa plugin qua hệ thống file

Vẫn bị kẹt? Một plugin bảo mật hoặc cache có thể đang xóa header Set-Cookie. Các thủ phạm phổ biến: Wordfence, WP Super Cache, W3 Total Cache, Cloudflare APO. Vô hiệu hóa tất cả cùng lúc mà không cần vào wp-admin:

# Đổi tên thư mục plugins để vô hiệu hóa tất cả cùng lúc
mv /var/www/html/wp-content/plugins /var/www/html/wp-content/plugins_disabled

Thử đăng nhập. Thành công? Đổi tên thư mục lại, rồi kích hoạt từng plugin một để tìm thủ phạm:

mv /var/www/html/wp-content/plugins_disabled /var/www/html/wp-content/plugins

Sau khi tìm ra plugin lỗi, tìm các cài đặt như "Cache logged-in users" hoặc "Remove cookies for anonymous users" và tắt chúng đi.

Bước 6 — Xác minh cookie có thực sự được thiết lập không

Mở DevTools (F12) → tab Network → gửi form đăng nhập → nhấp vào request POST wp-login.php → kiểm tra Response Headers. Bạn sẽ thấy nội dung như sau:

Set-Cookie: wordpress_sec_... ; path=/wp-content/plugins; secure; HttpOnly
Set-Cookie: wordpress_logged_in_... ; path=/; secure; HttpOnly

Header xuất hiện với đúng domain và path? WordPress đang hoạt động đúng — vấn đề nằm ở phía client (chính sách trình duyệt, tiện ích mở rộng, hoặc iframe). Hoàn toàn không có Set-Cookie? Proxy hoặc tầng cache của bạn đang xóa nó.

Với Nginx, thêm block riêng cho trang đăng nhập để bỏ qua cache hoàn toàn:

location = /wp-login.php {
    fastcgi_cache_bypass 1;
    fastcgi_no_cache     1;
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}

Xác minh

  • Xóa toàn bộ cookie trình duyệt cho domain của bạn.
  • Truy cập https://yourdomain.com/wp-login.php.
  • Nhập thông tin đăng nhập — bạn sẽ được chuyển đến /wp-admin/ mà không có thông báo lỗi.
  • Xác nhận bằng WP-CLI: wp option get siteurl phải trả về đúng URL bạn vừa đăng nhập.
  • Trong DevTools → Application → Cookies, xác nhận wordpress_logged_in_* tồn tại với đúng domain và cờ Secure được bật.

Tham khảo nhanh — cách sửa phổ biến theo triệu chứng

  • Đăng nhập được trong chế độ ẩn danh, thất bại ở trình duyệt thường → xóa cookie/cache, kiểm tra tiện ích mở rộng.
  • Thất bại trên cả phiên bản http:// lẫn https:// → URL không khớp trong wp_options (Bước 2).
  • Xảy ra sau khi chuyển sang host mới hoặc thêm SSLCOOKIE_DOMAIN không khớp hoặc thiếu X-Forwarded-Proto (Bước 3–4).
  • Xảy ra sau khi cài plugin → xung đột plugin (Bước 5).
  • Không có header Set-Cookie trong DevTools → proxy/cache đang xóa cookie (Bước 6).

Related Error Notes