当 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 应用程序?

跨子域访问会话(Rails 4)

Rails:如何在会话中存储数据?

Rails omniauth Google - 如何更新个人资料数据

如何在测试之间重复使用 Capybara 会话?

存在 appcache 时使用 AJAX 和 Rails 设置会话变量