如何为WordPress网站的所有Cookie设置Secure标志
你添加的代码仅会影响PHP原生会话(SESSIONID)的Cookie属性,对WordPress自身生成的各类Cookie(如wp-auth、wp-settings等)不起作用,所以才没看到全量效果。下面给你几个可行的解决方案:
方法一:修改wp-config.php定义常量
直接在wp-config.php中添加以下常量定义,覆盖WordPress的Cookie默认设置:
// 强制后台和登录页面使用HTTPS define('FORCE_SSL_ADMIN', true); define('FORCE_SSL_LOGIN', true); // 给WordPress核心Cookie开启Secure和HttpOnly define('COOKIE_SECURE', true); define('COOKIE_HTTPONLY', true); // 给PHP会话Cookie开启Secure和HttpOnly define('SESSION_COOKIE_SECURE', true); define('SESSION_COOKIE_HTTPONLY', true);
添加位置建议放在/* That's all, stop editing! Happy publishing. */这行之前。
方法二:使用主题functions.php添加钩子
通过WordPress的过滤器钩子统一修改Cookie参数,在当前主题的functions.php中添加:
add_filter('wp_cookie_params', 'enable_secure_httponly_cookies'); function enable_secure_httponly_cookies($cookie_params) { $cookie_params['secure'] = true; $cookie_params['httponly'] = true; return $cookie_params; } // 额外处理评论相关Cookie(如果需要) add_action('set_comment_cookies', 'secure_comment_cookies'); function secure_comment_cookies($comment_id, $comment) { setcookie('comment_author_' . COOKIEHASH, $comment->comment_author, time() + 30 * DAY_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, true, true); setcookie('comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + 30 * DAY_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, true, true); setcookie('comment_author_url_' . COOKIEHASH, esc_url($comment->comment_author_url), time() + 30 * DAY_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, true, true); }
方法三:服务器层面全局设置(最彻底)
如果有权限修改服务器配置,这种方法能覆盖所有生成的Cookie(包括PHP、WordPress及其他脚本的Cookie):
Apache服务器(修改.htaccess)
在网站根目录的.htaccess文件中添加:
<IfModule mod_headers.c> Header edit Set-Cookie ^(.*)$ $1;Secure;HttpOnly </IfModule>
Nginx服务器(修改配置文件)
在对应站点的server配置块中添加:
# 代理场景下调整Cookie属性 proxy_cookie_path / "/; secure; HttpOnly"; # 非代理场景直接修改响应头 add_header Set-Cookie "$sent_http_set_cookie; secure; HttpOnly" always;
修改后记得重启服务器生效。
内容的提问来源于stack exchange,提问作者Slowrockdev
相关产品推荐
相关产品推荐

