我的项目有以下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'],
]
答案 0 :(得分:0)
会话是共享的,因为它基本上是相同的应用程序,您可能使用driver
= file
或database
。
要解决此问题,您可以为每个子域设置多个会话表。
config/session.php
文件,并确保您使用的是database
驱动程序。sessions
表的多个副本,并将其称为company_sessions
,admin_sessions
等。config/session.php
文件),以便会话table
基于子域。例如。创建if-else
语句,查找$_SERVER['HTTP_HOST']
并检查它是否为特定子域。
if ( $_SERVER['HTTP_HOST'] == 'admin.mysite.com' ) {
$config['table'] = 'admin_sessions';
}
可能需要更改config/session.php
的布局以适应覆盖表并返回正确的值。还有其他方法可以实现这一目标,但这可能是最简单的。
它可能无法正常运行,因为您尝试共享会话并且不希望同时共享所有会话。你我必须在功能上妥协,并坚持使用共享会话。