在Ruby和PHP之间共享会话

时间:2010-06-22 21:56:47

标签: php ruby single-sign-on subdomain

是否可以在子域上的PHP应用程序和我的其他子域上的Ruby应用程序之间共享会话?

我真的不知道从哪里拿这个。我知道我可以手动将域设置为根域,以便cookie对所有子域都有效,但是如何从/向会话获取/设置内容以便在子域之间共享?

我主要想用它来共享我的整个子域名的登录。

为了知识,如果这是一个错误的方法来处理问题,虽然这是一个可行的方法,但我想了解如何做到这一点,以及我为什么不这样做。

谢谢大家!

2 个答案:

答案 0 :(得分:6)

如果您想以这种方式共享会话(跨越PHP / Java / Ruby / etc),您需要从数据库中保存会话(并访问它们)。

请参阅:http://php.net/manual/en/function.session-set-save-handler.php

你需要在Ruby中使用相同的方法。

要跨域共享Cookie,您还需要将session.cookie_domain的PHP会话配置选项从默认的""(插入您的域名)更改为:".yourhost.com"(注意前缀期。)

答案 1 :(得分:2)

这可以通过共享相同数据库的应用程序以及一些cookie的帮助来解决。

  • 会话在php中打开
    • 创建一个包含随机字符串的cookie
    • 使用用户凭据和时间戳
    • 将字符串保存在数据库中
  • 会话转发给rails
    • 检查cookie是否存在
    • 以cookie形式搜索数据库中的字符串
    • 如果找到匹配,则接受会话并使用相同的用户凭据

存储工作站或浏览器的某种独特信息是明智的,这样就可以通过复制cookie来窃取会话。