Laravel会话-don';我不想共享域和子域会话


Laravel session - don't want to share domain and sub domain session

我有一个域,并从主域创建了一个子域。域名是www.example.com和dev.example.com。www.example.com是生产域,dev.examplecom是开发环境。

然后,我从同一个repo中克隆了两个项目,但将它们放在不同的文件夹中。在www.example.com文件夹.env文件中,我已将域会话设置为example.com。这意味着在浏览器中,当我从www.example.com或example.com访问时,它将能够共享域。在dev.example.com中,我设置的session_domain是dev.example.com.

现在我面临的问题是,当我访问www.example.com时,它会生成一个laravel_session域名.example.com。前面的点似乎可以共享到子域。当我访问dev.example.com并使用facebook登录时,它似乎会查找.example.com域会话,而不是在dev.example.com.中创建的会话

如果我在www.example.com中删除laravel_session,我就可以在我的dev.example.com中使用facebook登录,或者我清除了所有cookie/sessions,我也可以在dev.example.com.中使用facebook登录

我需要做什么才能不让它在sub-domian中共享会话?如果我设置不共享,当用户在浏览器中键入example.com和www.example.com时,域是否可以共享?

当使用facebook登录时遇到invalidstateException时,可以通过清除所有cookie/会话来解决。但我认为要求用户自己清除cookie浏览器是不对的。有什么解决办法吗?

您只需要在dev.example.com中使用一个不同名称的会话cookie。

if ( $_SERVER['HTTP_HOST'] === 'dev.example.com' )
{
    //The default session name is PHPSESSID,
    //so if we use a different one, they don't collide.
    session_name('DEVSESSIONID');
}
session_start();