【问题标题】:Laravel - How to share the session between two or more Web Application?Laravel - 如何在两个或多个 Web 应用程序之间共享会话?
【发布时间】:2022-11-05 03:43:01
【问题描述】:

我有两个网络应用程序。我将登录到一个 Web 应用程序,然后通过第一个应用程序的链接或重定向导航到另一个应用程序。最后,在完成应用程序二中的一些步骤后,我将被重定向到应用程序一。我该如何实施?

【问题讨论】:

  • 他们在同一个域和服务器上吗?或者可以访问同一个数据库服务器?
  • 他们在同一个域上,我在他们之间共享了用户,我想当我登录到 app1 时,我自动登录到 app2

标签: php laravel authentication session


【解决方案1】:

创建一个名为会话的新数据库。

Configure a connection profile 用于两个应用程序的应用程序主数据库的次要会话数据库。

然后他们应该同步存储会话数据,能够共享它们等......

配置/数据库.php

'app_main_database' => [
    'driver'    => env('DB_CONNECTION'),
    'host'      => env('DB_HOST'),
    'port'      => env('DB_PORT'),
    'database'  => env('DB_DATABASE'),
    'username'  => env('DB_USERNAME'),
    'password'  => env('DB_PASSWORD'),
],

'sessions_database' => [
    'driver'    => env('DB_CONNECTION_SESSION'),
    'host'      => env('DB_HOST_SESSION'),
    'port'      => env('DB_PORT_SESSION'),
    'database'  => env('DB_DATABASE_SESSION'),
    'username'  => env('DB_USERNAME_SESSION'),
    'password'  => env('DB_PASSWORD_SESSION'),
],

session.connection 配置为会话驱动程序的名称

配置/会话.php

<?php

use IlluminateSupportStr;

return [

    'driver' => env('SESSION_DRIVER', 'database'),

    'connection' => env('SESSION_CONNECTION', 'sessions_database'),

【讨论】:

    【解决方案2】:

    因此,我能够通过以下过程轻松而美观地完成这项工作: 确保两个安装的 .env 中的环境变量具有相同的设置:

    #APP_KEY is used to encrypt the session data so must be the same
    APP_KEY=base64:'YOUR KEY ' 
    #SESSION_COOKIE must be the same, this is normally not set and defaults to APP_NAME+"_session' which is a problem if your apps have different names
    SESSION_COOKIE=laravel_session
    #The SESSION_DOMAIN defaults to null which causes the CORS scope to limit to the subdomain level, in my testing must start with leading dot.
    SESSION_DOMAIN=.rootdomain.com
    

    就我而言,我还将硬编码的 config/session.php 变量更改为:

    'http_only'=>false,//not necessary but helpful in such applications
    'samesite'=>'lax',//newer laravel will allow you to set 'none' but beware of security issues
    

    现在唯一剩下的就是确保您的应用程序逻辑可以共享相同的用户群,我推荐以下之一:

    1. 共享同一个数据库表,如果您有权访问其他 aoolications 数据库,则可以将 Model/User.php 中的数据库连接设置为不同的数据库
    2. 如果可能,创建一个基于其他用户表生成表的 MySQL VIEW
    3. 如果上述方法不可行,您可以创建一个一对一的关系 app1.users.id=app2.app1 user_id

    【讨论】:

      猜你喜欢
      • 2012-12-24
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 2011-09-23
      • 2014-09-30
      • 2016-07-16
      • 1970-01-01
      • 2016-10-11
      相关资源
      最近更新 更多