search

Home  >  Q&A  >  body text

php - 如何实现多个域名 共享session

场景

项目公用一套代码,现在的需求是把其中的几个大功能分别用指定的二级域名进行访问:

例如:

项目代码都在 website 这个目录下,且是单一入口文件架构方式。

现在的服务器配置是 (nginx)的配置方式是

ServerName www.project.com, a.project.com, b.project.com

Root 都指向 website 目录

现在是可以实现基本需求,几个功能模块都可以以二级域名的形式进行访问。

问题来了

怎样实现session的共享呢?

搜了下,网上的其中的一个解决方案是将session_id 放到cookie 里面, 然后在session_start 之前取出cookie中的session_id,手动设置session_id。

还有说,使用 session_get_cookie_params 方法,设置 domain 为 .project.com

这种方法尝试了下,发现时可以的,但是问题是对应的 管理后台的 management.project.com 的登录出现了问题,即使正确登录也无法登录成功!

那么

像这种的架构方式一般都是怎样实现的呢?

更新

现在采用的session存储方式是使用数据库,

巴扎黑巴扎黑2894 days ago945

reply all(12)I'll reply

  • 高洛峰

    高洛峰2017-04-10 15:25:35

    相同顶级域名的话是可以通过设置实现的,如果顶级域名也不相同的话,很遗憾无法实现。但你可以通过auth实现,做一个接口接收传递过来的参数进行验证,通过后为用户生成session就像用户通过正常的登陆实现一样

    reply
    0
  • 黄舟

    黄舟2017-04-10 15:25:35

    http://fuweiyi.com/others/2013/03/08/a-domain-pan-resolve-rewrite-cross-session.html
    是根据这个实现吗?

    JSESSIONID FC33C9C32AB81A8FDD5D815A77FD442E demo.dadaping.com
    JSESSIONID FC33C9C32AB81A8FDD5D815A77FD442E test.dadaping.com
    JSESSIONID FC33C9C32AB81A8FDD5D815A77FD442E maps.dadaping.com

    要实现上面的方式,但是在服务器端,如果遇到域名不同,jsession的值就重新生成了。

    reply
    0
  • Cancelreply