Laravel多个跨域子会话共享

时间:2018-03-12 09:44:08

标签: php laravel authentication laravel-5 subdomain

我的项目有以下4个子域:

www.mysite.com - 公共网站,已发布pages等。

my.mysite.com - 普通用户登录此域以创建pages和其他内容

company.mysite.com - Company hasMany Employees登录此子域以管理其pages和其他内容

admin.mysite.com - 网站的Admin登录此处以管理所有内容

-

通常,我希望将所有4个子域分开。因此,登录到my.的用户除非他们也登录,否则无法查看company.。我设法通过创建以下中间件来实现此目的:

auth:my

auth:company

auth:admin

使用上面的内容我有不同的登录视图/路由等,以便不同类型的用户正常工作。

-

我需要一种在子域之间共享会话的方法,因为当用户在Page上创建my.时,他们可以发布它并在公开www.上显示www.mysite.com/my-page {{1} 1}})

我需要的是,当User拥有Page并登录到my.时,访问www.子域中的自己的页面, Edit按钮显示。

我设法通过进行以下更改在我的子域之间共享会话来实现此目的:

config/session.php

domain => env('SESSION_DOMAIN', '.mysite.com')

-

但是,这会混淆company.admin.的登录信息,因为当User登录my.时,会话将在子域之间共享。

如何跨子域共享会话,但将其分组如下:

domain => [
    ['www.mysite.com', 'my.mysite.com'], 
    ['www.mysite.com', 'company.mysite.com'], 
    ['www.mysite.com', 'admin.mysite.com'], 
]

1 个答案:

答案 0 :(得分:0)

会话是共享的,因为它基本上是相同的应用程序,您可能使用driver = filedatabase

要解决此问题,您可以为每个子域设置多个会话表。

  1. 更改您的config/session.php文件,并确保您使用的是database驱动程序。
  2. 创建sessions表的多个副本,并将其称为company_sessionsadmin_sessions等。
  3. 更新您的代码(即config/session.php文件),以便会话table基于子域。例如。创建if-else语句,查找$_SERVER['HTTP_HOST']并检查它是否为特定子域。 if ( $_SERVER['HTTP_HOST'] == 'admin.mysite.com' ) { $config['table'] = 'admin_sessions'; } 可能需要更改config/session.php的布局以适应覆盖表并返回正确的值。
  4. 看看它是否有效!
  5. 还有其他方法可以实现这一目标,但这可能是最简单的。

    它可能无法正常运行,因为您尝试共享会话并且不希望同时共享所有会话。你我必须在功能上妥协,并坚持使用共享会话。