为什么打开新选项卡会导致在对每个请求使用 session_regenerate_id() 时之前选项卡中的页面被注销?

Why does opening a new tab causes the pages in the previous tabs to get logged out when use session_regenerate_id() with every request?

我正在读 "PHP and MySQL novice to ninja" 一本书,它说:

In fact, it would be very secure to change the user’s session ID on every page load. However, doing so causes several practical problems. If someone has different pages open in different tabs, or the website uses a technology called Ajax, they effectively get logged out of one tab when they open another!

我无法理解幕后发生的事情以及为什么用户在打开另一个选项卡时会退出前一个选项卡。通过生成新的会话 ID,将向浏览器发送包含新会话 ID 的新 cookie。

因此,当我打开另一个选项卡时,会话 ID 会发生变化,并且会向浏览器发送一个新的 cookie。 为什么浏览器不使用新的 cookie 继续登录以及页面被注销到底发生了什么?

如果同一站点已在同一浏览器中打开,则打开新标签页不会启动新会话。浏览器尝试使用现有会话。您甚至可以在这个网站上自己观察这种行为 - 如果您打开一个新选项卡(以及您正在阅读本文的选项卡)并转到 Whosebug,您不会被要求再次登录。

但是,如果每个请求都生成一个新会话,那么它将使来自该站点的所有已打开选项卡的共享会话无效,因为它们将依赖后台的旧 cookie。