前端开发案例——COOKIE/SESSION机制(一)

来源:互联网 发布:淘宝店铺修改发货地址 编辑:程序博客网 时间:2024/06/10 20:06

**

场景

**
联合登录(自己独立账号体系登陆以后,去其他业务系统联合登录):
新开一个独立账号体系,给企业用户使用,登录名为企业名称。每一个企业用户绑定一位会员ID,用于复用会员系统的功能(下单、支付…)。因此,在企业用户登陆的同时,要去会员系统做联合登录。会员系统提供的登陆方式为302跳转(页面跳转链接)。

开发模型前后台分离:
前台页面+php;后台java

当前页面为:http://www.test.com/login
联合登录提供跳转方式:http://www.remotetest.com/memberLogin?redirect=http://www.test.com/hello&err=http://www.test.com/error;(redirect为成功情况下回跳链接,err为失败情况下回跳链接)

当联合登陆成功时,会往浏览器写入cookie,用于下单、登出等操作。此时遇到一个问题,如果cookie的生存周期为session,即同一次会话中有效,则通过302跳转到http://www.test.com/hello时,在浏览器端找不到对应的cookie。(原因是通过跳转过来的链接,浏览器会认为是另外一个会话,而不是之前的会话了)

为了恢复联合登录写在浏览器的cookie,解决方法如下:
1.将cookie写入浏览器local_storage暂存区中,uuid生成一个key,value为跳转前客户端cookie信息;
2.在跳转链接后面添加参数–>http://www.test.com/hello?cookie=*
3.跳转完毕后,在跳转页面onload时,先读取local_storage,将cookie拿出来恢复。

此方法可以解决上述问题,但是有缺陷:
首先,local_storage需要HTML5以后才支持,并不能排除个别用户使用不了的情况。
参考链接:http://www.cnblogs.com/st-leslie/p/5617130.html

其次,读写local_storage的本质是IO操作,这种解决方案是冗余的IO。

优化方案:
在跳转链接页面onload时,快速刷新一次,使浏览器认为的会话切换回当前用户,则会重新加载对应的cookie(有点抽象),我的js如下:

    function  fresh()      {      if(location.href.indexOf("reload=true")<0)       {        location.href+="&reload=true";       }      }      window.onload = function(){        fresh();    };
0 0