点击Gmail链接时Session与Cookie丢失,该现象是否正常?
问题原因与解决方案
核心原因
你遇到的情况完全是SameSite=Strict配置导致的正常浏览器行为。
当Cookie的SameSite设为Strict时,浏览器只会在同站请求场景下发送该Cookie——比如直接在地址栏输入网址、当前域名内点击链接跳转。如果是从Gmail、anyotherdomain.com这类外部域名点击链接跳转至你的网站,浏览器会直接拒绝携带这个Cookie,服务器因为收不到原有Session ID,就会生成新的Session;至于原login.php标签页的Session丢失,大概率是代码逻辑或Session存储机制的额外问题,正常同站请求下Strict模式的Cookie应该会正常保留。
SameSite属性说明
Cookie的SameSite属性有三个可选值,对应不同的跨站Cookie发送规则:
- Strict:最严格的限制,仅同站请求发送Cookie,任何跨站跳转都不会携带。
- Lax:浏览器默认值(Chrome 80及以上版本),允许部分跨站场景发送Cookie,比如外部域名的GET链接跳转,但POST请求、iframe嵌入等场景仍会限制。
- None:允许所有跨站场景发送Cookie,但必须同时设置
secure: true(仅HTTPS环境生效),适合第三方登录这类需要跨站共享Cookie的业务。
解决方案
根据你的业务需求调整配置:
- 若仅需本域名内操作保留Session,
Strict配置没问题,但需接受外部链接跳转丢失Session的情况。 - 若希望外部链接点击跳转后仍能保留Session,将
SameSite修改为Lax:$myCookieSessionOptions = array( 'lifetime' => (time() + 60*60*24*363), 'path' => "/", 'domain' => "." . "mydomain.com", 'secure' => true, 'httponly' => true, 'samesite' => 'Lax' // 修改此处 ); session_set_cookie_params($myCookieSessionOptions); session_name("mySessionName"); session_start(); - 若需要支持跨站POST请求或其他复杂跨场景携带Cookie,可设置
SameSite='None',确保网站已启用HTTPS(你当前的secure: true配置已满足要求)。
额外排查建议
针对原login.php标签页Session丢失的问题,可检查服务器端Session存储(比如文件目录、Redis),确认旧Session ID对应的存储数据是否被意外覆盖;同时排查代码中是否存在未校验Session ID就重置Session数据的逻辑。
内容的提问来源于stack exchange,提问作者AVRajan
相关产品推荐
相关产品推荐

