不同的网站如何共享cookies?

比如百度的账号登陆以后,去奇艺也自动显示登陆了 貌似共享了cookies,这是怎么做到的?服务端共享了cookies id?

阅读 27.8k
3 个回答
  • 首先纠正一个观点:不同域名是无法共享浏览器端本地信息,包括cookies,这即是跨域问题。
  • 其次,你所列举的例子即是典型SSO单点登录。下面简单说一下SSO单点登录的技术实现机制:
    1、需要一个统一处理用户登录的单点系统UserCenter。该系统集中处理用户信息,包括用户信息加密存储,用户注册,用户登录验证,SSO接入等;
    2、需要接入SSO单点登录的系统(例如业务系统A)不处理任何用户登录信息,服务器端在用户第一次提交请求时,跳转到SSO系统验证是否登陆,如未登录,则一般重定向SSO系统的登录页面,用户登录成功以后,再回跳到业务系统A原来的页面,业务系统A与此同时写入由SSO带回来的用户信息到session中,后续的交互过程中,业务系统A就一直保持有用户的登录信息了。
    3、假如用户由上述登录过的业务系统A跳转访问到同样接入到SSO单点登录系统UserCenter的业务系统B,此时业务系统B没有用户登录信息,同样会跳转SSO单点登录系统验证是否登录,SSO检测到用户之前已登录,又重定向到业务系统B,此时系统B从SSO带回登录信息并写入到session,这样用户就做到了,一处登录多处保持登录信息,即完成了SSO单点登录。
  • 需要特别说明的是:在这个SSO单点登录过程中,上述SSO系统UserCenter、业务系统A和业务系统B都会在客户端写入标志登录状态的cookies,其中有且仅有SSO系统保存有用户密码等私密信息,业务系统A和B仅只可访问到用户标识信息,这样也很好地保证了用户信息的安全性。
    PS:在移动互联网大行其道的今天,SSO提供多种登录验证方式也很重要,除了传统的HTTP、API接入,现在也会提供手机动态验证码、手机二维码、硬件密码令牌等多种新型登录验证方式。

提供一个Ucenter的思路。

首先要有一个中心系统U,然后我有三个网站A、B、C需要同步登录。用户在A站登录后,通知U,由U去通知B和C同步登录(B和C可以分别生成自己的cookies)。三个网站不需要共享cookies,并且跨域也不能共享cookies

如果楼主想了解更多的技术实现,可以去了解下SSO单点登录

新手上路,请多包涵

可以简单的举个例子:A、B、C三个网站,A站用来存储用户登陆信息,B、C两个站都嵌套A站的登陆API,不管在B站还是在C站登陆都由A站存储登陆信息,那么不管是B站或者C站都可以调用A站的登陆信息,从而实现跨域互通。这样说,应该能理解吧。实际架构中,可以有很多种实现方法,视具体需求而定,核心逻辑就是以上了。

宣传栏