当 Rails 中的同一域上存在会话时,如何在 PHP 中创建会话?
Posted
技术标签:
【中文标题】当 Rails 中的同一域上存在会话时,如何在 PHP 中创建会话?【英文标题】:How to create a session in PHP when there is a session on the same domain in Rails? 【发布时间】:2010-06-02 12:09:45 【问题描述】:我在一个子域 - xyz.domain.com 上有一个 Rails 应用程序,在另一个子域 - abc.domain.com 上有一个 php 应用程序
当用户登录到 Rails 应用程序时,我想给他们一个会话,以便我可以在 PHP 应用程序中记录有关该用户的某些事件,但在 Rails 应用程序的同一数据库中。我基本上只是公开一个需要身份验证的 API。
解决此问题的最佳方法是什么?我没有将会话存储在数据库中
更新 我应该提到,目标是允许从 PHP 站点对迄今为止仅由 Rails 应用程序使用的数据库进行身份验证访问。如果用户登录到 Rails 应用程序,我希望能够跟踪 PHP 站点上发生的任何事件并将它们与用户相关联。
【问题讨论】:
【参考方案1】:我会回复,对 Rails 不太了解。
你可以在 php.ini 中customize the cookie name。在会话名称和正确的 cookie 域之间,您可以创建一个由两个应用程序共享的 cookie。
PHP 术语中的“会话”只是意味着一个 cookie,其值指向会话存储中保存的某些数据集。例如,如果 PHP(使用默认配置)看到一个 cookie PHPSESSID=2b00042f7481c7b056c4b410d28f33cf
,它将寻找一个像 /tmp/sess_2b00042f7481c7b056c4b410d28f33cf
这样的会话文件。该文件只包含serialize($_SESSION)
的输出。
因此,共享会话将共享此 cookie 值,但本质上不会共享其他任何内容。如果 PHP 要插入日志记录,您必须决定如何共享其他值。一些选项:
-
如果 PHP 会话为空,请在 Rails 应用程序中查询提供登录用户名和其他会话详细信息的 URL。确保 URL 只能从 localhost 访问。
将会话 ID 等同于数据库中的用户名/ID,以便 PHP 进行查找。
【讨论】:
好的。我刚刚添加了有关我的最终目标的信息。我认为共享 cookie 会起作用,但我不确定该事务的流程是什么样的。【参考方案2】:我认为会话是不可能的。如果它们可以在子域之间共享相同的数据库,则可以使用数据库来存储身份验证。
【讨论】:
以上是关于当 Rails 中的同一域上存在会话时,如何在 PHP 中创建会话?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在同一个域上运行 Rails 应用程序和 React 应用程序?