在 2 个 laravel 应用程序之间共享会话

Posted

技术标签:

【中文标题】在 2 个 laravel 应用程序之间共享会话【英文标题】:Sharing a session between 2 laravel applications 【发布时间】:2014-09-30 00:56:59 【问题描述】:

我正在使用数据库会话驱动程序来尝试在两个 laravel 应用程序之间共享会话。两个应用程序的会话 cookie 名称和加密密钥是否应该相同?在过去的几天里,我很难解决这个问题。任何帮助是极大的赞赏。谢谢!

【问题讨论】:

见medium.com/@zsolt.gyure96/… 【参考方案1】:

与会话相关的所有内容都应该相同。基本上session.php文件在两者之间应该是相同的,它们应该有一个共同的数据库,并且密钥和密码类型应该是相同的。

如果它们具有相同的域名(例如:server1.mydomain.comserver2.mydomain.com)但主机名/子域名不同,那么只要您正确设置域(例如 .mydomain.com),cookie 应该仍然可以正常工作。如果它们在同一台服务器上,您仍然可以使用通用的键值系统。如果它们位于不同的服务器上,您要么需要一个公共存储位置(如 S3),要么需要一个支持复制的键值系统,如 Redis 或 Memcached。如果您需要复制其他数据类型,您也可以使用 mysql,但对于键值对来说它非常繁重。

如果他们有完全不同的域,那么 cookie 将不起作用。在这种情况下,您需要通过 GET 查询字符串引用跨站点会话 ID,并使用通用或复制系统或通过某些安全 API 在后端执行会话迁移。这是一个非常难以设置的系统,并且仅当您使用嵌入在站点中的链接在域之间移动时才有效。书签或手动输入地址会丢失会话数据。


更新:2016 年 2 月 4 日

现在使用 JSON Web 令牌 (JWT) 可以更好地处理此问题。基本思想是,与其共享一个必须保持同步的会话 ID 数据库,不如共享一个用户数据库。用户数据库将需要显着减少的写入,因为大多数数据将是静态的,这反过来使得在多个应用程序之间复制或拆分变得更容易。 JWT 以防止篡改的加密格式保存所有相关的会话数据。这允许前端客户端保留 JWT 并在请求时将其传递给后端客户端。然后,后端客户端仅负责检查 JWT 中的数据是否与其用户数据数据库匹配。如果匹配,则可以假定用户已通过身份验证。它比我在这里解释的要多一些,但我建议您查看网站以获得完整的解释 (https://jwt.io/)。

最好的部分是,在 Laravel 中开始使用它非常容易。添加 JWT-Auth 依赖项,即可使用 JWT 运行。

我要补充的一个警告是,如果您进行跨域请求,您可能会在较新的浏览器中遇到跨域资源共享 (CORS) 问题。如果遇到这种情况,可以轻松解决 (Laravel-CORS)。

【讨论】:

请不要使用 JWT 进行会话 - 请参阅 cryto.net/%7Ejoepie91/blog/2016/06/19/…

以上是关于在 2 个 laravel 应用程序之间共享会话的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:在多个域上共享会话数据

在多个客户端之间共享 Jabber 聊天会话

无法使用 Laravel 4 与子域共享会话

会话在选项卡之间共享

不同的会话驱动程序取决于 Laravel 中的路线

来自同一浏览器的 laravel 和多会话