MissHu

杂记

  • 首页
  • 微语
  • 登录
    • 网站会员跨域同步登录解决方法概略

      网站会员跨域同步登录解决方法概略

      问题描述:两个或多个网站使用相同的会员资料,实现多个网站的同步登录。

        网上看到一篇关于搜狐解决这个问题的方法,登录新浪通行证会同时登录17173.com、chinaren.com、focus.cn、sohu.com等多个网站。由于passport.sohu.com的登录界面使用了iframe隐藏提交。所以页面没有看到刷新。服务器看到成功登录的Cookie后。在服务器端计算出一个加密后的17173.com的登录Url,并Redirect到这个Url。估计这个方案是由于搜狐的数据库结构决定的,网站数量比较多的话,服务器压力会比较大。

        另外介绍的一种方法,属于轻量级的解决方案,登录成功的同时在登录网页中使用JS调用,把加密后的参数传过去,这个不需要页面刷新。在Firefox下可以直接实现跨域的COOKIE读写,但IE和Safari浏览器会因为安全问题,不被信任而拒绝读写。如需要写入需要在页面头部加入下面这个声明,Ucenter使用就是这种方法实现同步登录。

      header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

        在实际测试当中,发现当在IE浏览器中写入的COOKIE值非空时,可以正常读写;但是当设置为空的时候会发生无法写入的情况。我测试的DISCUZ 7.2版以及7.0版都存在这个问题,跨域在IE中无法实现同步登录,后来发现是由于无法跨域清空COOKIE造成的。于是把原本跨域清空的地方,设置为写入0这个值,成功实现同步登录。

        在DISCUZ 7 实现同步登录使用的是api目录中的uc.php文件。同步登录使用的是synlogin函数,同步登出使用的是synlogout函数。下面是同步登录函数的修改。

      synlogin函数修改前的代码

      大小: 51.84 K 尺寸: 500 x 148 浏览: 0 次 点击浏览全图

      ?

      synlogin函数修改后的代码

      大小: 52.19 K 尺寸: 500 x 150 浏览: 0 次 点击浏览全图

      ?

        同步登出修改方式类似,写入非空的值即可。使用IFRAME调用跨域网页时候,COOKIE也存在这个问题。不能写入空值具体原因不详,但修改后在IE下成功实现跨域同步登录和登出。若阁下有好的见解可以留言讨论。

      自由转载,转载请注明: 转载自WEB开发笔记 www.chhua.com

      « 白巧克力 | 详解HTML中的window对象和document对象»

      标签: 会员跨域同步登录

      分类:代码      日期:30 Jun 2021

      MissHu 0 1198
    • 日历

    • 存档

      • 2022年4月(1)
      • 2021年7月(2)
      • 2021年6月(1)
      • 2020年6月(3)
      • 2020年3月(3)
      • 2020年1月(1)
    • 链接

浙ICP备15002971号 MissHu @ 2020