会员登录后跳转到源地址的解决方案
2016-04-12 13:55
246 查看
情况1:从百度等站外链接点击访问网站(如在百度搜索网站,然后通过快照链接);
情况2:从手机短信里分享的链接点击访问网站(如从提醒短信里直接点击链接);
情况3:在网站内页面切换时访问网站(如从网站页面A链接到页面B);
情况4:从微信群或公众平台链接点击访问网站(如从微信群里的分享链接或公众平台的菜单链接)。
分析:
以上情况的共同点就是都需要通过登录后进行跳转到源地址。
解决:
以会员登录控制器为检查入口,引入一个from参数(人为),结合页面请求报头referer参数(HTTP协议自带),对于以上4种情况做判断,第一步判断from参数,第二步判断referer参数,这里之所以采用两步,是因为这样做方便我们处理比较特殊的跳转,如类似情况2的需求。
效果如:http://www.xxx.com/passport/login?from=登录需要跳转到的链接
对于情况1,百度等外站链接过来的访问,from参数肯定是不存在的(为空),对于外站链接过来的,在登录后不需要再跳转到外站,所以这里通过域名不一致性直接忽略跳转地址,如果判断referer参数也是外站的网址,也是直接忽略,这样的处理对于以上所有的情况都是通用的。
对于情况2,先判断是站内链接,然后再判断from参数,可能是空的(存在更好),referer参数如果为空,那么将from的参数值重置为当前链接。
对于情况3,处理是比较简单的,通过读取referer参数值,传递给from参数来记录,这样可以做到全站统一跟踪方式。
对于情况4,将自定义的from参数打包到微信登录授权认证的链接里(redirect_uri),让微信认证完成后带回我们的服务器,通过from参数来传递登录后需要跳转的地址。
以上四种情况,优先使用from参数的形式来做,referer参数为辅,基本可做到无错误跳转。
情况2:从手机短信里分享的链接点击访问网站(如从提醒短信里直接点击链接);
情况3:在网站内页面切换时访问网站(如从网站页面A链接到页面B);
情况4:从微信群或公众平台链接点击访问网站(如从微信群里的分享链接或公众平台的菜单链接)。
分析:
以上情况的共同点就是都需要通过登录后进行跳转到源地址。
解决:
以会员登录控制器为检查入口,引入一个from参数(人为),结合页面请求报头referer参数(HTTP协议自带),对于以上4种情况做判断,第一步判断from参数,第二步判断referer参数,这里之所以采用两步,是因为这样做方便我们处理比较特殊的跳转,如类似情况2的需求。
效果如:http://www.xxx.com/passport/login?from=登录需要跳转到的链接
对于情况1,百度等外站链接过来的访问,from参数肯定是不存在的(为空),对于外站链接过来的,在登录后不需要再跳转到外站,所以这里通过域名不一致性直接忽略跳转地址,如果判断referer参数也是外站的网址,也是直接忽略,这样的处理对于以上所有的情况都是通用的。
对于情况2,先判断是站内链接,然后再判断from参数,可能是空的(存在更好),referer参数如果为空,那么将from的参数值重置为当前链接。
对于情况3,处理是比较简单的,通过读取referer参数值,传递给from参数来记录,这样可以做到全站统一跟踪方式。
对于情况4,将自定义的from参数打包到微信登录授权认证的链接里(redirect_uri),让微信认证完成后带回我们的服务器,通过from参数来传递登录后需要跳转的地址。
以上四种情况,优先使用from参数的形式来做,referer参数为辅,基本可做到无错误跳转。
相关文章推荐
- zedboard初试嵌入xillinux桌面系统
- List去重复(List中存的是对象)
- swift throws 捕获异常
- HTML5中的服务器‘推送’技术 -Server-Sent Events
- HTML 5 拖放
- 为什么说写“安装指南”类博客的程序员是懒惰的
- asp.net 母版页使用详解
- eclipse如何修改dynamic web module version
- Cisco 使用SSH 登陆Cisco设备
- Android APP终极瘦身指南
- 2个腾讯百度的智力题
- PAT1070. Mooncake (25)
- JSP Workshop
- Activity的启动模式
- Android ViewPager使用详解
- web前端框架小结
- 64位 centos 6.4 linux系统配置 postfix 启用 smtp 认证
- 安卓004事件驱动机制
- Android性能优化总结
- 笔试题22. LeetCode OJ (9)