一个网络应用程序在同一浏览器上的多个会话


Multiple sessions on the same browser for one single webapp

只要在身份验证过程中添加了另一个字段(电子邮件、密码website_id(,同一用户是否可以在同一浏览器中对同一应用程序进行多个会话

我正在构建一个允许创建多个单页网站的PHP应用程序。每个网站都应该作为独立的网站,具有不同的内容,但它们都有相同的后端。每个网站都有一组单独的用户/客户。用户可以在任何网站上注册,但这些网站不一定共享用户群。这意味着用户可以访问site1.domain.com并注册,如果他们想访问site2.domain.com.,则必须再次注册

他们可能会使用相同的电子邮件地址注册,所以我的用户表允许重复的电子邮件地址,只要他们不在同一个网站上。

这是一个非常简单的CMS有点像magento对在同一实例下运行的多个网站所做的那样。他们还允许每个独立的网站都有自己的客户群。

我计划在这个项目中使用Laravel。我目前的做法是:

修改提供的用户身份验证功能以添加site_id字段。这意味着用户可以在多个网站中使用相同的电子邮件地址注册,也可以单独登录所有这些网站。如果他们登录到站点1并访问站点2,他们必须再次登录,并有两个单独的会话,在他们看来这是两个不同的应用程序,但这只是一个。

理论上,这对我来说似乎是可能的。一旦他们登录,就会为每个单独的子域创建一个cookie,这在不同的子域上是不起作用的。不过,我觉得我错过了一些大事,我从来没有做过类似的事情,总是依靠Laravel来为我处理所有的会话内容。如果没有对Laravel代码库的大量黑客攻击,这可能吗?

更新

这些是我的限制:

  • 所希望的效果是,每个网站看起来都是一个单独的应用程序,与其他网站完全无关,但都绑定到同一后端,并具有相同的路由/视图
  • 用户基础和用户会话不能在站点之间共享。我可以让用户注册一次,可以登录到每个网站,但我不想这样。用户应该能够单独访问每个网站
  • 每个网站都会有一个不同的子域,或者在相同的情况下,有一个完全不同的域

PHP会话与域名绑定,因此它们将自动为每个应用程序提供不同的会话。您可以使用具有自定义解析的路由模型绑定来基于域确定应用程序。

routes.php

Route::group(array('domain' => '{site}.com'), function() {
  //routes go here
});

RouteServiceProvider(在boot方法中(

$router->bind('site', function ($value) {
  return App'Site::where('custom_domain', $value)->first();
});

这是基于这样一个假设,即您有一个Site模型,该模型在数据库中有一个名为custom_domain的字段。组内所有可用的路由都可以使用依赖项注入访问Site。您可以根据应用程序的需要调整模型和字段。

您可以使用该模型自定义每个应用程序的登录页面,每个应用程序都有独立的会话。

我也听说了关于房东套餐的好消息。您可以使用中间件根据url定义用户是哪个Site。一旦设置好,所有有说服力的查询都将根据数据库中的site_id自动确定范围。因此User::all()将只返回当前站点的用户。