PHP能否在首次页面加载时获取已存在的Cookie?
核心疑问
- 此前会话中已设置的Cookie(过期日期远在未来、未标记HttpOnly、路径为
/、标记为secure),能否在后续首次页面加载时被PHP获取? - 电商网站在用户未注册时仍能识别购物车商品,具体是如何实现的?
- 在客户端-服务器-客户端的请求流程中,Cookie何时对PHP可用?
尝试过的解决方式
- 多次搜索相关技术内容
- 查阅Stack Overflow线程,但多数内容仅围绕
setcookie()展开,未涉及首次加载时获取已有Cookie的方法 - 在PHP中检测目标Cookie是否存在,若不存在则跳转至
https://my.example.com/load-the-cookie.html,该页面通过JavaScript跳转回原站点,期望PHP能识别到Cookie
初始PHP脚本(已通过.htaccess配置让PHP引擎解析.html文件)
/** * Set the Timezone */ if( !isset( $_COOKIE['timezone'] ) && !isset( $_GET['reload'] ) ) { header( 'Location: https://my.example.com/load-the-cookie.html' ); exit(); } elseif( !isset( $_COOKIE['timezone'] ) ) { date_default_timezone_set( DEFAULT_TIMEZONE ); // 设置服务器时区为应用默认值 } else { date_default_timezone_set( $_COOKIE['timezone'] ); // 设置服务器时区为用户本地时区 }
跳转页面代码
<!DOCTYPE html> <html> <head> <meta name="robots" content="noindex, nofollow"> <script> //const ck = document.cookies; //alert("* "+ck+" *"); window.location.href = "https://my.example.com"; </script> </head> <body> </body> </html>
预期目标
让PHP脚本在首次页面加载时就能获取到已存在的Cookie,同时明确Cookie在请求流程中对PHP的可用时机。
最终解决方案
问题出在Cookie过期日期的格式不符合HTTP规范,修改JavaScript中设置过期日期的代码即可解决:
删除原代码:const cookieExpires = new Date('2025-03-01');
替换为符合规范的格式:const cookieExpires = 'Sat, 1 Mar 2025 12:00:00 UTC';
内容的提问来源于stack exchange,提问作者dott
相关产品推荐
相关产品推荐

