2010-10-05 39 views
0

我有网站w1使用auhtlogic进行身份验证,在PHP中使用w2(比如说),我想让w2访问由w2存储的会话信息并将用户登录到w2,并检索来自会话的user_id。如何从其他站点访问一个站点的会话

+0

我想你的意思是你想让w2访问w1存储的会话信息。 – Shreyas 2010-10-05 06:49:51

+0

@shreyas是的!我想让w2访问由w1 – 2010-10-05 08:56:38

回答

2

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

如果你不这样做,你将不得不自己处理会话序列化。我认为,一个完整的解决方案是SO一个问题的范围,但有几个指针:

  • 这将是明智的,只存储会话ID在cookie中,然后保持实际的会话数据一个可以从PHP和Rails应用程序访问的数据库。如果您真的想将会话信息保存在cookie中(或者在memcached之类的其他位置,也需要将其序列化),请查看跨语言的序列化策略,如MessagePack

  • 你会想做些事情来确保cookie不会被用户篡改。机架使用HMAC,这是一个很好的解决方案。我从来没有使用PHP,但我相信他们也有一个库。

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

祝你好运!

0

我前段时间尝试过一种解决方案,那更像是一种黑客行为,但对于我的建议来说它工作得很好。

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

注意,它引入一些安全漏洞,很可能你的安全将依赖于“朦胧” - 例如,算法来挂接cookie将被存储在文件名以及如何访问它和任何外部Web服务器配置..说,我认为我们也可以考虑使用共享memcached来存储cookie。

0

你有没有考虑过使用Open ID?

+0

保存的会话信息!但我不想更喜欢这个选项 – 2010-10-05 14:51:29

相关问题