具有相同数据库的不同服务器和不同域上的会话管理

时间:2016-09-25 21:08:46

标签: laravel

我正在Laravel 5中构建一个站点,我需要管理会话,如下所示: 例如。我在服务器X上有一个站点x@x.com,在服务器Y上有一个y@y.com托管以及数据库,(两个服务器都是不同国家)我需要为这两个站点使用相同的数据库但是会话管理是我在x@x.com上的典型任务,因为数据库是在y@y.com上托管的。我在laravel中使用Auth进行身份验证如何实现这一点请帮助 - 。

2 个答案:

答案 0 :(得分:0)

Laravel提供数据库会话,用于在数据库中存储会话,以便您可以为应用程序使用多个服务器。看看https://laravel.com/docs/5.3/session#database-sessions

答案 1 :(得分:0)

您应该在两台服务器上使用相同的数据库连接。您可以为会话管理创建一个小的第三个服务器,也可以简单地告诉X服务器连接到Y服务器数据库。首先,您可以将环境变量SESSION_DRIVER或配置属性session.driver设置为:databaseredis,具体取决于您使用的内容。然后在database.php属性下创建配置文件connections,如果它是RDBMS,或者在redis下创建一个连接,如果它是re​​dis数据库。

'connections' => [
    // ...
    'session' => [
        'driver'    => 'mysql',
        'host'      => env('SESSION_DB_HOST'),
        'database'  => env('SESSION_DB_NAME'),
        'username'  => env('SESSION_DB_USERNAME'),
        'password'  => env('SESSION_DB_PASSWORD'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ]
]
// Or
'redis' => [

    // ...

    'session' => [
        'host'     => env('SESSION_REDIS_HOST'),
        'port'     => env('SESSION_REDIS_PORT', 6379),
        'database' => 0,
    ],

]

然后在文件session.php中,将connection的值更改为您想要的连接名称,在这种情况下为session

请注意,您需要打开所需的端口并执行一些授权过程并在主机服务器上采取安全措施(Y服务器,因为它有数据库)。

----回答评论

会话驱动程序是laravel用于管理会话的机制。它可以是文件,数据库,redis ...因此,当您在其配置文件中选择会话驱动程序并且驱动程序是数据库时,您将为其指定数据库连接,否则它将使用默认数据库连接。因此,如果您创建第三个服务器并且想要将Redis用作数据库,则可以打开端口6379(如果您使用的是默认的redis配置),则可以在Laravel安装中创建连接。 database.php中的连接将如此:

'redis' => [

    // ...

    'my_session' => [
        'host'     => env('SESSION_REDIS_HOST'),
        'port'     => env('SESSION_REDIS_PORT', 6379),
        'database' => 0,
    ],
]

然后在您的环境或.env添加:

SESSION_REDIS_HOST=xx.xx.xx.xx // the ip address  or domain of the third server
SESSION_REDIS_PORT= 6379
SESSION_DRIVER=redis

最后,在session.php配置中,您可以设置以下值:

//...
'connection' => 'my_session',

您可以在要连接到同一会话数据库的所有Laravel安装上执行此操作。