我们都知道,移动Web端(M站环境下),很多时候,前端是无法判断用户的登录状态的,因为出于安全性考虑,与账号相关的cookie字段一般都是 http-only的。

如果前端想判断用户的登录状态,需要主动去调后台接口,根据后台接口返回的状态码来判断。

那么,我如果想实现下面这样一个场景,该怎么做呢?

移动Web端(M站环境下),游客点击商品的收藏按钮,登录完成,回来之后,如何自动收藏?

方式一:在url里加字段

具体步骤如下:

(1)游客点击收藏按钮,立即调用favCommAdd的接口(假设这个是收藏商品的接口)。如果接口返回未登录,就往重定向的url中加字段doFavor=true,然后去执行登录操作。比如:

var rurl = location.href + '&isLogin=true'
favCommAdd(skuId, rurl); //调用接口。参数一表示,给指定的sku添加收藏。参数二用于登录成功后的回跳

上面的这个rurl参数指的是用户登录成功后的回跳链接

(2)页面初始化的时候,做判断:如果当前页面的url中包含了doFavor=true字段(代表用户在上面的第一步中登录成功),就调用FavCommAdd的接口。收藏成功。

    var doFavor = url.getUrlParam('doFavor'); //这一行是伪代码,用于获取url中的指定参数
if(doFavor&&doFavor == 'true'){
console.log('登录成功了');
queryAskPermission();
}

总结:方式一的这种做法存在csrf安全问题,如果我把当前页面携带doFavor字段的url链接转发给别人(例如 smyhvae.com/item.shtml?sku=1234&doFavor=true),别人点进去之后,也会去调用FavCommAdd接口。

方式二:往cookie里加字段

具体步骤如下:

方式二和方式一是类似的。只不过,这次,我们是在 cookie 里加字段,而不是在 url 里加字段。

具体步骤如下:

(1)游客点击收藏按钮,立即调用FavCommAdd的接口。如果接口返回未登录,就往 cookie 里加doFavor字段,然后去执行登录操作。比如:

cookie.set('dofav','ok',1);   //这一行是伪代码,表示往cookie里加自定义的字段

(2)页面初始化的时候,做判断:如果当前页面的cookie中包含了doFavor字段(代表用户在上面的第一步中登录成功),就调用FavCommAdd的接口,同时删除这个cookie字段。收藏成功。比如:

        if (cookie.get('dofav')){  //这一行是伪代码,表示获取指定的cookie字段
cookie.del('dofav');
obj.fav();
}

总结

方式二比方式一更安全,如果把链接转发给他人,他人那里并未检测出cookie里的指定字段,自然也就无法调用FavCommAdd 接口。

但是,方式二依然避免不了csrf攻击(比如说,当黑客往cookie里写入字段的时候)。但总的来说,方式二还算比较通用。

当然,我们还可以在方式二的基础之上,往cookie中的字段中加md5码,并且要保证这个md5的时效性,那就更安全了。

如果还有其他更安全、更严谨的方式,欢迎交流。

移动Web前端,游客点击商品的收藏按钮,登录完成,回来之后,如何自动收藏的更多相关文章

  1. 皮皮家园干活~万元web前端系统班在线课程点击免费领取

    点击添加群聊 今天在整理百度云盘里的资源,这几年累计了不少软件和教程. 在这特殊的时期里,先给大家分享一波.图片里的文件夹就是目录, 加入群聊免费领取 好资源就是要大家一起共享, 你们也不用到处在网上 ...

  2. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  3. 【理论面试篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题

    ##2017.10.30收集 面试技巧 5.1 面试形式 1)        一般而言,小公司做笔试题:大公司面谈项目经验:做地图的一定考算法 2)        面试官喜欢什么样的人 ü  技术好. ...

  4. web 前端安全问题

    转载自:https://segmentfault.com/a/1190000006672214?utm_source=weekly&utm_medium=email&utm_campa ...

  5. 【Web前端Talk】“用数据说话,从埋点开始”-带你理解前端的三种埋点

    埋点到底是什么呢? 引用自百科的原话是,埋点分析网站分析的一种常用的数据采集方法.因此其本质是分析,但是靠什么分析呢?靠埋点得到的数据.通俗来讲,就是当我想要在某个产品上得到用户的一些行为数据用来分析 ...

  6. web前端分享JavaScript到底是什么?特点有哪些?

    web前端分享JavaScript到底是什么?特点有哪些?这也是成为web前端工程师必学的内容.今天为大家分享了这篇关于JavaScript的文章,我们一起来看看. 一.JavaScript是什么? ...

  7. 【Web前端HTML5&CSS3】03-字符实体与语义标签

    笔记来源:尚硅谷Web前端HTML5&CSS3初学者零基础入门全套完整版 目录 字符实体与语义标签 1. 字符实体 2. meta标签 3. 语义标签 4. 块元素与行内元素 块元素(bloc ...

  8. Web前端温故知新-CSS基础

    一.CSS定义与编写CSS 1.1 CSS的定义 全名:Cascading Style Sheets -> 层叠样式表 定义:CSS成为层叠样式表,它主要用于设置HTML页面中的文本内容(字体. ...

  9. 也许你需要点实用的-Web前端笔试题

    之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自己的东西,共勉. Web前端笔试题 Html+css 1.对WEB标准以及w ...

随机推荐

  1. deque源码4(deque元素操作:pop_back、pop_front、clear、erase、insert)

    deque源码1(deque概述.deque中的控制器) deque源码2(deque迭代器.deque的数据结构) deque源码3(deque的构造与内存.ctor.push_back.push_ ...

  2. Virtual Hosts

    虚拟主机就是一组资源,就是资源的一个逻辑分组 虚拟主机提供对资源的逻辑分组和隔离 虚拟主机有一个名字.当客户端连接到RabbitMQ的时候,客户端指定一个虚拟主机的名字来连接到它.如果认证成功,并且用 ...

  3. R语言命令汇总

    > qqplot(spear,fastrankweight)> qqplot(spear,fastrankweight,main="title")> qqplot ...

  4. 解决AssetBundle包加载预制体时,Shader显示异常的问题

    现象: 预制体上的粒子效果显示为紫色方块. 原因:shader在打成AB包后与指定平台产生相关性,Editor中无法正常读取. 解决办法: 遍历所有加载的对象,重新赋值Shader 代码: //修正s ...

  5. [NewLife.XCode]数据初始化

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...

  6. 记一次安装Ipython的流程

    这是一个悲伤的安装ipython的过程. 写下来留个教训吧. 也是希望对博友一些帮助吧. 注: 我也写了一篇window下安装bpython的文章(个人感觉bpython要比ipython强大的多), ...

  7. 【转载】uCOS2 关于进程调度的O(1)算法

    uCOS2唯一值得学习的一个地方就是关于进程调度的O(1)算法: 最简单也是最愚蠢的方法是维护一个链表List. 这种方法的问题是:当一个Thread就绪时,如果根据其优先级插入List,则算法的时间 ...

  8. MySQL+MGR 单主模式和多主模式的集群环境 - 部署手册 (Centos7.5)

    MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案.MGR是MySQL官方在5.7.17版本引进的一个数据库高可用与 ...

  9. html模板输头部出现"&#65279"

  10. 翻译:CREATE TRIGGER语句(已提交到MariaDB官方手册)

    本文为mariadb官方手册:CREATE TRIGGER的译文. 原文:https://mariadb.com/kb/en/create-trigger/我提交到MariaDB官方手册的译文:htt ...