如何从其他站点访问一个站点的会话

时间:2010-10-05 06:40:59

标签: php ruby-on-rails authentication authlogic

我有使用auhtlogic进行身份验证的网站w1和PHP中的w2(比如说),我希望w2访问w2存储的会话信息并将用户登录到w2,并从会话中检索user_id。

3 个答案:

答案 0 :(得分:2)

默认情况下,Rack(Rails用于管理其会话)通过编组会话哈希(参见here)将会话信息存储在cookie中,这会产生特定于Ruby的字符串。使用PHP来反序列化这些信息是非常困难的。

如果你没有这样做,你将不得不自己处理会话序列化。我认为一个完整的解决方案超出了关于SO的单个问题的范围,但有一些指示:

  • 明智的做法是在cookie中只存储会话ID,然后将实际会话数据保存在可从PHP和Rails应用程序访问的数据库中。如果您确实希望将会话信息保存在cookie中(或者在memcached等其他地方,您还必须将其序列化),请查看跨语言的序列化策略,例如MessagePack

  • 您需要采取措施确保Cookie不会被用户篡改。 Rack使用HMAC,这是一个很好的解决方案。我从来没有使用PHP,但我确信他们也有一个库。

  • 您可能已经知道这一点,但以防万一:这是假设您的两个应用共享相同的域名。如果他们不是,那么您的用户的浏览器将不会在两个应用之间共享cookie,并且您无法做任何事情。例如,您可以在railsapp.yourdomain.com和phpapp.yourdomain.com之间共享会话,但不能在railsapp.com和phpapp.com之间共享。

祝你好运!

答案 1 :(得分:0)

我曾经试过一个解决方案,这个解决方案更像是一个黑客攻击,但是对于我的建议它是有效的。

登录后,我曾经将用户的cookie写在公共目录中的文件中,当这个用户试图访问他必须访问的其他服务器时,我在第二台服务器上的应用程序,只需“知道如何”访问“存储在第一台服务器中的远程文件,并将此内容作为cookie加载。那时我确实使用过CURL。

注意它引入了一些安全漏洞,可能您的安全性依赖于“默默无闻” - 例如,用于挂载存储cookie的文件名的算法以及如何访问它和任何外部网络服务器配置..说,我认为我们也可以考虑使用共享的memcached存储cookie ..

答案 2 :(得分:0)

您是否考虑过使用Open ID?