我正在使用数据库会话驱动程序尝试在两个laravel应用程序之间共享会话。两个应用程序的会话cookie名称和加密密钥是否相同?过去几天我在这个问题上遇到了很多困难。任何帮助是极大的赞赏。谢谢!
答案 0 :(得分:11)
与会话相关的所有内容都应相同。基本上session.php
文件在两者之间应该是相同的,它们应该有一个公共数据库,密钥和密码类型应该是相同的。
如果他们拥有相同的域名(例如:server1.mydomain.com
,server2.mydomain.com
)但主机名/子域名不同,那么只要您正确设置域,Cookie仍然可以正常运行(ex { {1}})。如果它们位于同一服务器上,您仍然可以使用通用键值系统。如果它们位于不同的服务器上,则需要一个公共存储位置(如S3)或启用复制的键值系统(如Redis或Memcached)。如果你需要复制其他数据类型,你也可以使用MySQL,但它对于键值对非常重。
如果他们有完全不同的域名,那么Cookie将无效。在这种情况下,您需要通过.mydomain.com
查询字符串引用跨站点会话ID,并使用通用或复制系统或通过某些安全API在后端执行会话迁移。这是一个非常难以设置的系统,只有在使用站点中嵌入的链接在域之间移动时才有效。书签或手动地址输入将丢失会话数据。
现在有一种更好的方法可以使用JSON Web令牌( JWT )来处理这个问题。基本思想是,不是共享必须保持同步的会话ID数据库,而是共享用户数据库。用户数据库将需要更少的写入,因为大多数数据将是静态的,这反过来使得在多个应用程序之间复制或拆分更容易。 JWT以加密格式保存所有相关会话数据,以防止篡改。这允许前端客户端保留JWT并在请求时将其传递给后端客户端。然后,后端客户端仅负责检查JWT内的数据是否与其用户数据数据库匹配。如果匹配,则可以假定用户已经过身份验证。还有一点比我在这里解释的更多,但我建议您查看网站以获得完整的解释(https://jwt.io/)。
最好的部分是,开始在Laravel中使用起来非常容易。添加JWT-Auth依赖项,您就可以使用JWT了。
我要补充的一个警告是,如果您跨域请求,您可能会遇到与新浏览器的跨源资源共享(CORS)问题。如果碰到(Laravel-CORS),可以轻松修复。