同一浏览器上的多个会话用于一个 Web 应用程序
Multiple sessions on the same browser for one single webapp
只要在身份验证过程中添加另一个字段(电子邮件、密码和[=37=,同一用户是否可以在同一浏览器中对同一应用进行多个会话] website_id)?
我正在构建一个允许创建多个单页网站的 PHP 应用程序。每个网站都应该作为独立的网站,内容不同,但后端都相同。每个网站都有一组单独的 users/customers。用户可以在任何网站上注册,但这些网站不一定共享用户群。这意味着用户可以去 site1.domain.com 并注册,然后如果他们想访问 site2.domain.com 就必须重新注册。
他们可能会使用相同的电子邮件地址进行注册,因此我的用户 table 允许使用重复的电子邮件地址,只要他们不在同一网站中即可。
这是一种非常简单的 CMS。 有点像 magento 在同一实例下对多个网站所做的工作 运行。他们还允许每个单独的站点拥有自己的客户群。
我打算在这个项目中使用 Laravel。我目前的做法是:
修改提供的用户身份验证功能以添加 site_id 字段。这意味着用户可以在多个站点使用相同的电子邮件地址注册,也可以分别登录所有这些站点。如果他们登录到 site1 并访问 site2,他们必须再次登录并有两个单独的会话,这在他们看来是两个不同的应用程序,但实际上只是一个。
理论上这对我来说似乎是可能的。一旦他们登录,就会为每个单独的子域创建一个 cookie,这不适用于不同的子域。我觉得我错过了一些重要的东西,我从来没有做过类似的事情并且总是依赖 Laravel 来为我处理所有的会话内容。如果不对 Laravel 代码库进行大量黑客攻击,这是否可能?
更新
这些是我的约束条件:
- 期望的效果是每个网站看起来都是一个单独的应用程序,与其他网站完全不相关,但都绑定到相同的后端并具有相同的 routing/views。
- 用户库和用户会话不能在站点之间共享。我可以让用户注册一次并可以登录到每个站点,但我不希望那样。用户应该能够分别访问每个网站。
- 每个网站都有不同的子域,或者在相同的情况下,都有不同的域。
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
。您可以根据您的应用需求调整模型和字段。
您可以使用该模型为每个应用程序自定义登录页面,每个应用程序都有独立的会话。
我也听说过关于 Landlord package 的好消息。您使用中间件根据 url 定义用户是哪个 Site
。设置完成后,所有 eloquent 查询将根据数据库中的 site_id
自动确定范围。因此 User::all()
只会 return 当前站点的用户。
只要在身份验证过程中添加另一个字段(电子邮件、密码和[=37=,同一用户是否可以在同一浏览器中对同一应用进行多个会话] website_id)?
我正在构建一个允许创建多个单页网站的 PHP 应用程序。每个网站都应该作为独立的网站,内容不同,但后端都相同。每个网站都有一组单独的 users/customers。用户可以在任何网站上注册,但这些网站不一定共享用户群。这意味着用户可以去 site1.domain.com 并注册,然后如果他们想访问 site2.domain.com 就必须重新注册。
他们可能会使用相同的电子邮件地址进行注册,因此我的用户 table 允许使用重复的电子邮件地址,只要他们不在同一网站中即可。
这是一种非常简单的 CMS。 有点像 magento 在同一实例下对多个网站所做的工作 运行。他们还允许每个单独的站点拥有自己的客户群。
我打算在这个项目中使用 Laravel。我目前的做法是:
修改提供的用户身份验证功能以添加 site_id 字段。这意味着用户可以在多个站点使用相同的电子邮件地址注册,也可以分别登录所有这些站点。如果他们登录到 site1 并访问 site2,他们必须再次登录并有两个单独的会话,这在他们看来是两个不同的应用程序,但实际上只是一个。
理论上这对我来说似乎是可能的。一旦他们登录,就会为每个单独的子域创建一个 cookie,这不适用于不同的子域。我觉得我错过了一些重要的东西,我从来没有做过类似的事情并且总是依赖 Laravel 来为我处理所有的会话内容。如果不对 Laravel 代码库进行大量黑客攻击,这是否可能?
更新
这些是我的约束条件:
- 期望的效果是每个网站看起来都是一个单独的应用程序,与其他网站完全不相关,但都绑定到相同的后端并具有相同的 routing/views。
- 用户库和用户会话不能在站点之间共享。我可以让用户注册一次并可以登录到每个站点,但我不希望那样。用户应该能够分别访问每个网站。
- 每个网站都有不同的子域,或者在相同的情况下,都有不同的域。
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
。您可以根据您的应用需求调整模型和字段。
您可以使用该模型为每个应用程序自定义登录页面,每个应用程序都有独立的会话。
我也听说过关于 Landlord package 的好消息。您使用中间件根据 url 定义用户是哪个 Site
。设置完成后,所有 eloquent 查询将根据数据库中的 site_id
自动确定范围。因此 User::all()
只会 return 当前站点的用户。