首页  >  问答  >  正文

javascript - 用redis实现单点登陆

用户登陆后把用户信息存到redis中,同时生成一个token值,当用户点击其他界面时携带token值,显示登陆状态,代码怎么实现,我写的代码总是实现不了?

我想大声告诉你我想大声告诉你2706 天前827

全部回复(5)我来回复

  • 淡淡烟草味

    淡淡烟草味2017-05-24 11:32:41

    PC 端 相同一级域名下的单点登录,只需要操作 cookie 就行了
    当然,使用上 token 跟 cookie 是一样的,
    原理都差不多吧,不知道你实现不了是哪里出问题了,干脆看看,

    1、在新页面能不能获取 token
    2、根据 token 能不能在 redis 查到用户数据
    3、能查到用户数据的话,还有啥其他问题 ?

    回复
    0
  • 阿神

    阿神2017-05-24 11:32:41

    主要的问题是,你怎么让用户访问的时候带上token信息。
    使用Redis存储,然后和cookie的值进行验证就可以了。

    回复
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-24 11:32:41

    用户点击其他页面的时候带上用户的id,你生成token的时候用uid加盐或者更复杂的加密算法加密生成。接受到用户的id,用id去加密与token对比。一致就是登陆了。(这大概就是你想要实现的效果?)

    回复
    0
  • PHP中文网

    PHP中文网2017-05-24 11:32:41

    等等,单点登录除了考虑token的问题,你要考虑A站登录了,生成的信息,怎么在打开B站的时候直接获取到。事实上,不同站点的cookies、session不一样,没法获取。我看过ucenter的做法,A登录之后,会给所有他的兄弟站点,通过js发起http请求,也就相当于将token传给所有的站点,进行登录操作,每个站点都产生session跟cookies。

    回复
    0
  • PHP中文网

    PHP中文网2017-05-24 11:32:41

    token的作用其实代替密码 user_id=xxx&token=xxxx 通过用户id查询登陆信息 比对查询到的token是否与参数的token一致

    单点登陆的我想到的方案
    比如
    用户中心 passport.test.com
    支付中心 pay.test.com
    在 passport.test.com
    设置p3p header("P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");
    把用户的登陆信息 加密写入cookie

    在 pay.test.com 获取cookie信息传到passport.test.com 接口验证登陆信息

    回复
    0
  • 取消回复