Rails 如何让 Session 在 Rails 项目和 PHP 项目间共享?

eva · 2013年05月14日 · 最后由 small_fish__ 回复于 2013年05月15日 · 4393 次阅读

同一台服务器上有一个 rails 项目(使用类似 projects.example.com 子域名)和 php 项目(使用 www.example.com 域名),目前用户信息都在 rails 项目里,有没有可能让 session 在这两个项目间共享?如何实现呢?

这个问题无解,用数据库吧或者接口,比 session 简单多了

为何不放在一个文件夹当中,session id 就是文件名 而内容就是 session 了 两边都可以访问? 或者是 memcached 实现,天然实现 expiration 功能?

通过 cookie 呢?

用数据库吧,给用户表加一个 remember token 存在 cookies , 然后跟 PHP 项目共享就挺容易了。

通过 cookie 不知道 php 是如何解析成 session 的 ,除非你自己用 php 把 rails 的解析过程实现了

写 Cookie 就好了,用同一个域

用 cookie 就和@huacnlee 说的一样

#6 楼 @huacnlee #7 楼 @tumayun 多谢各位,我现在是用@huacnlee 的方式保存主域名及 remember_token 在 cookie 里:

def sign_in(user)
  cookies[:remember_token] = {
    value: user.remember_token,
    expires: 20.year.from_now,
    domain: "example.com"
  }
  self.current_user = user
end

然后当前 user 为:

def current_user
  @current_user ||= User.find_by_remember_token(cookies[:remember_token])
end

这样就可以通过 cookie 找到当前的 user.

那我如何在另外一个项目里通过 cookie 来找到当前的 user 呢?两个项目的数据库及 user 模型必须要是一样的么?

#8 楼 @eva 提供 API 来获取

#9 楼 @huacnlee 能详细点不?

#10 楼 @eva

  1. Rails 登录以后,Cookie 为加密的 user_id,和 token ( user_id + 私密字符串 的 MD5 值 )
  2. PHP 从 Cookie 里面取出 user_idtoken 取出,并把 user_id + 私密字符串 做 MD5 后与 token 对比,验证 user_id 是否被暴力修改过;
  3. 根据刚才的 user_id 调用 Rails 这边提供的 JSON 接口(比如 /users/:id.json)获得到用户的信息

#11 楼 @huacnlee Lz 的意思不是 session 共享么??

I think it's a AB problem, however, what's your real problem, LZ?

原谅我这个 rails 新手及 php 盲没有把问题说清楚吧,来说说我现在在的情况: 我有一个 rails 项目,里面已经有很多用户及数据了,然后现在有一个新的项目例如是 wordpress(别问我为什么是 wp! 暂时规定),我希望用户在登陆了 rails 项目后就自动登陆了 wp 项目,在 wp 项目里就可以提交信息留言等,如何实现?(所以我后面问@huacnlee如何在 wp 里获得 rails 项目里的登陆用户信息,目前正在看 json 中,如果谁不嫌累可以给我讲的更清楚些哈!)

看看现有单点登陆方案是否能解决////

需要 登录 后方可回复, 如果你还没有账号请 注册新账号