惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
O
OpenAI News
D
DataBreaches.Net
The Cloudflare Blog
L
LangChain Blog
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
Help Net Security
Help Net Security
Jina AI
Jina AI
T
The Blog of Author Tim Ferriss
T
The Exploit Database - CXSecurity.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - 叶小钗
The Last Watchdog
The Last Watchdog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
TaoSecurity Blog
TaoSecurity Blog
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏
C
Cyber Attacks, Cyber Crime and Cyber Security
A
Arctic Wolf
T
Tenable Blog
Know Your Adversary
Know Your Adversary
Google DeepMind News
Google DeepMind News
量子位
The Hacker News
The Hacker News
AWS News Blog
AWS News Blog
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
Hacker News: Ask HN
Hacker News: Ask HN
Scott Helme
Scott Helme
小众软件
小众软件
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
Threat Research - Cisco Blogs
G
GRAHAM CLULEY
H
Heimdal Security Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园_首页
B
Blog
GbyAI
GbyAI
P
Palo Alto Networks Blog
美团技术团队
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - Franky

人人都是产品经理

为什么你的产品找不到差异化?90%的失败都卡在第一步上(下) – 人人都是产品经理, 3年从30万到1300万用户、获2200万美元融资,这个AI教育产品用“抽卡”破解了获客难题 – 人人都是产品经理, 园区招商系统怎么做才能真正帮到去化?我加了这一个功能,推广链接转发400次阅读过万 – 人人都是产品经理, AI大事件:OpenAI发完网络安全模型又搞药物研发,小鹏汽车要抓”DeepSeek时刻” – 人人都是产品经理, 电商不是卖货,是一场更残酷的产品经理实战 – 人人都是产品经理, 没想到,活动营销又回来了! – 人人都是产品经理, 为何All-in海外KOC:一场关于AI时代窗口期的豪赌 – 人人都是产品经理, 重新理解企业的内部协作 – 人人都是产品经理, 苹果的 AI 战略到底是什么? – 人人都是产品经理, 医疗智能体·第2讲——合规护城河:等保、PIPL与HIPAA的架构实战 – 人人都是产品经理, 向量知识库五步法:从“答非所问”到“精准回复” – 人人都是产品经理, 鸿蒙PC三方库构建总指挥HPKBUILD(sha)库为例 – 人人都是产品经理, 何时该用LLM?AI产品经理的LLM设计指南 – 人人都是产品经理, 医疗信息领域的需求方、决策方、准入方以及关注点(二) – 人人都是产品经理, 即梦涨价:一场被误读的「傲慢」 – 人人都是产品经理, 面试AI PM必答题:Hermes和OpenClaw的区别,如何讲清楚业务价值 – 人人都是产品经理, AI的下一张船票:世界模型——AI产品经理必须理解的技术拐点 – 人人都是产品经理, 小红书做GEO,怎么让AI信你?记住这 3 个重要信息 – 人人都是产品经理, 5 家印度 AI 初创公司,看看印度 AI 再做什么 – 人人都是产品经理, AI项目跨团队协作:产品技术业务如何不打架 – 人人都是产品经理, Agentic Workflow(智能体工作流):让AI从”答案生成器”变成”数字员工” – 人人都是产品经理, lycium_plusplus 项目全景解读:OpenHarmony 三方库构建的“大管家” – 人人都是产品经理, 从爆单救火到前置履约:两套预采策略,把生鲜大促履约效率拉满 – 人人都是产品经理, 什么时候该补货?我用一轮数据做了一个决定 – 人人都是产品经理, 从“机械兜底”到“动态分流”:AI客服重复进线治理的4大底层逻辑 – 人人都是产品经理, 抖音拼效率,红书拼洞察 – 人人都是产品经理, 全民狂欢与退潮——为什么龙虾这波热潮冷却得如此之快? – 人人都是产品经理, Stripe押注!MPP重塑全球支付 – 人人都是产品经理, 小红书GEO:AI引用你的内容,不是因为你对,而是因为你看起来可信 – 人人都是产品经理, 前百度副总裁押注办公Agent,日韩付费爆发,Manus迎来强劲对手 – 人人都是产品经理, 企事业单位数字化的业务供需本质 – 人人都是产品经理, 医疗智能体·第1讲——医疗信息化重构:从“辅助软件”到“自主智能体”的范式转移 – 人人都是产品经理, 粉丝量就是空气!!! – 人人都是产品经理, 用户说“薯片碎了”,机器回“要买吗?”:意图识别的翻车与破局 – 人人都是产品经理, RAG召回准确率从75到90 我做对了这三件事 – 人人都是产品经理, AI大事件:Anthropic改收费、OpenAI发安全版、手术机器人纳入医保、阿里发布”秒悟” – 人人都是产品经理, Chrome 推出 Skills 新功能,Agent 重塑上网方式 – 人人都是产品经理, GitHub前创始人拿了a16z的1700万美元,做Agent时代的Git – 人人都是产品经理 拷贝或克隆其他 Flutter OH 项目到本地后无法运行 – 人人都是产品经理, 优惠券设计:优惠券创建 – 人人都是产品经理, 不用死磕文档!AI 助手 1 小时搞定飞书 CLI 安装 + 配置 + 知识库 – 人人都是产品经理, 用小龙虾做竞品分析报告:从2天到20分钟,我是怎么做到的 – 人人都是产品经理 用小龙虾做市场分析报告:搞懂这3个公式,市场规模不再靠猜 – 人人都是产品经理, 你早就在做 Harness 工程,只是不知道它叫这个名字 – 人人都是产品经理, Think Long就够?你可能想多了! – 人人都是产品经理, 货代SRM实战:供应商准入怎么做,才能让资源池不是通讯录而是可交付网络? – 人人都是产品经理, 如何做好用户调研?详解基本技巧 – 人人都是产品经理, 木鸟、途家、美团对打,平台春天行动开“卷” – 人人都是产品经理, 入职才发现公司不靠谱?小红书从业者求职避坑指南 – 人人都是产品经理, 美国 AI 三巨头联手封堵,中国 AI 突围之路在何方 – 人人都是产品经理, 小红书,放在需求对面的镜子 – 人人都是产品经理, AI 会带来大规模失业吗? – 人人都是产品经理, 从出单到补货前,我第一次犹豫:该不该放大? – 人人都是产品经理, Flutter 三方库鸿蒙化适配:5 种高效检查方式,快速判断是否需要适配 – 人人都是产品经理, 从做产品进阶拿结果:医美机构产品经理转岗科室运营经理 – 人人都是产品经理, 阿里HappyHorse,一场关于“Token经济”的阳谋 – 人人都是产品经理, To B AI:客户留存落地的观察与思考 – 人人都是产品经理, AI产品的“生命线”——数据采集、标注、清洗的产品化设计 – 人人都是产品经理, 谈谈AI Agent(二):当“孩子”能自己“体验世界”时,你该学什么? – 人人都是产品经理, UI/UX设计师的3层能力进阶,前两层让你活下来,第三层…才是真正的分水岭 – 人人都是产品经理, 2分钟 → 30秒,效率提升75%:B端产品经理如何用「规则枷锁」驯服AI幻觉? – 人人都是产品经理, 还没来得及学OpenClaw,来了个更猛的:Hermes Agent – 人人都是产品经理, AI日报:宇树机器人跑出10m/s刷新世界纪录 – 人人都是产品经理, 一文说透基金互金如何用情绪价值引导用户决策做转化 – 人人都是产品经理, 当浏览器开始替你”看”网页:AI 浏览器正在亲手拆掉它脚下的那张网 – 人人都是产品经理, 0代码,一天时间我Vibe Coding了个网站 – 人人都是产品经理, Hermes 和 OpenClaw 之争,Agent 的能力应该“装上去”还是“长出来”? – 人人都是产品经理 视频生成的“桌子”,字节Seedance 2掀完,阿里快乐马掀 – 人人都是产品经理, 从听不懂到完全信任:我的 Codex 深度产品体验 – 人人都是产品经理, 当虚拟偶像有了北京户口,与真人偶像还有什么区别? – 人人都是产品经理, 会说,远远比会做更重要 —— 对 SBTI 爆火现象的五层观察 – 人人都是产品经理, AI产品经理必看:当“搭环境”比“选模型”更重要,你的认知还在2024年吗? – 人人都是产品经理, 2026年AI产品商业化核心逻辑:从功能demo到规模化营收的3个必破卡点 – 人人都是产品经理, 京东围绕供应链,卷起裤腿下场的那些事儿 – 人人都是产品经理, SBTI一夜刷屏:它赢在了“太会说人话” – 人人都是产品经理, 折扣零售的真相:不是便宜,而是价值感! – 人人都是产品经理, 和甲方吵了一架,最后加钱做了——我学到的ToB产品经理生存法则 – 人人都是产品经理, 和几位小红书操盘手聊了8小时,干货全在这 – 人人都是产品经理, 智谱GLM-5.1登场,开源模型首超Opus4.6!!! – 人人都是产品经理 Anthropic收入凭什么反超OpenAI,终于有人把这事说清楚了 – 人人都是产品经理, 史上最有故事感的技术报告——Claude最强模型Mythos 7个极其精彩的细节 – 人人都是产品经理, 模型不是壁垒,Harness 也不是 – 人人都是产品经理, 抖音本地生活业务思考21 – 人人都是产品经理, Superpowers:145k Star的AI编码框架,到底是什么来头? Superpowers:145k Star的AI编码框架,到底是什么来头? – 人人都是产品经理, OpenAI 的路走错了,Anthropic Harness 解法启示:模型需要实践专科生 – 人人都是产品经理, 画原型图的前一步:设计站点地图 – 人人都是产品经理, 给 DeepSeek 的最后一封催更信 – 人人都是产品经理, 手把手教你用 Claude Code 搭建 AI 营销团队:5 个 Agent、12 项技能,独立完成研究、写作、设计全流程 – 人人都是产品经理, 你以为大模型在学语言?不,它在重新发明语言学 – 人人都是产品经理 所谓Skill,不过是AI时代的工业垃圾 – 人人都是产品经理, 聊一聊内容传播的几个方法 – 人人都是产品经理, 当平台开始吃掉生态:从 OpenClaw 被封杀,读懂 Anthropic 的这盘棋 – 人人都是产品经理, 你装了 10 个 AI 插件,Obsidian 还是一个文件夹 – 人人都是产品经理 关于AI智能体架构演进的系统性思考:从单体试水到多体协同的重构 – 人人都是产品经理, 当“人”变成Skill,我们又该何去何从? – 人人都是产品经理 Mythos 事件:前沿 AI 治理的意外实验 – 人人都是产品经理, 货代CRM:信用与风险管理怎么做,才能把坏账风险拦在放货之前? – 人人都是产品经理, 从HR收集自拍照到员工自助录入——我见证了园区人脸识别从”不可用”到”真好用”的全过程 – 人人都是产品经理 千问闯关AI混沌期:阿里画靶,吴嘉张弓,马云射箭? – 人人都是产品经理,
注册和登录功能常见的产品方案及技术原理
小风老师 · 2023-03-31 · via 人人都是产品经理

注册和登录几乎是所有产品的必备功能之一,本文作者以细节规则为例,讲解了注册、登录功能背后的设计原理,一起来看一下吧。

注册和登录功能几乎是所有产品的必备功能之一。对于用户,注册、登录后就可以生成唯一标识用户身份的信息,并基于此信息同步用户行为数据。对于平台或公司,用户注册时填写的有效信息可以有利于后期的精细化运营。

下面以细节规则为例讲解注册、登录功能背后的设计原理。

一、校验信息时的正则表达式

如图6-1所示,这是一款需要用户提供手机号和验证码进行注册、登录的App。在用户输入正确的手机号和验证码后,App服务器会校验该手机号是否已注册,若用户未注册就点击“登录”按钮,App会先帮用户完成注册,若用户已注册,则会成功登录。

再来对比两种情况。第一种情况,将手机断网并设为飞行模式。当手机号码输入框中没有任何内容时,发送验证码的按钮处于置灰状态且显示“请输入11位手机号码”的提示文案。当在手机号码输入框中输入了符合正常手机号码格式的手机号时,发送验证码的按钮处于可以点击的状态(颜色由灰变蓝)。

《产品经理技术手册》书籍节选之「注册和登录功能」

图6-1 登录页面手机号码校验示意图1

对照图6-2看看第二种情况。在手机号码输入框内输入了12位数字时,发送验证码的按钮再次处于置灰状态。将输入的数字调整为11位,并将首位数字改为2,即调整为不符合正常手机号码格式的情况,发送验证码的按钮也处于置灰状态。

《产品经理技术手册》书籍节选之「注册和登录功能」

图6-2 登录页面手机号校验示意图2

总结一下上面两种情况。在无网络情况下,App会对手机号码进行是否符合格式要求的校验。

那么如何校验呢?一般可以通过正则表达式。比如在上面的案例中,只要是1开头的11位数字就是符合要求的,可用正则表达式表示为 /^1[0-9]{10}$/。

二、怎么实现记住密码功能

为了方便用户下次登录,常见做法就是在用户第一次登录时,引导用户勾选类似记住密码的选项,当用户下次打开App时就可以直接登录App,如图6-3所示。

《产品经理技术手册》书籍节选之「注册和登录功能」

图6-3 登录时的记住密码功能

但登录时用户长期无须输入密码也存在一定的安全风险,部分平台在方便与安全之间做出了权衡,提供了多少天内免登录的选项。超出限制时间后,用户再打开App时依然需要输入密码。

在如图6-4所示的案例中,登录印象笔记网页版时,勾选了“30天内记住我”复选框,这样用户30天内均可自动登录印象笔记网页版,超出时间后才需要重新手动登录。

《产品经理技术手册》书籍节选之「注册和登录功能」

图6-4 登录时的“30天内记住我”功能

上述案例的核心技术原理分为两个方面,一个方面是如何记住密码,另一个方面是如何设置账号、密码的有效期。

1. 如何记住密码

账号和密码可以记录在本地。打开产品时,便将预先保存在本地的账号和密码取出,与服务器进行校验。这里的“本地”,对于Web产品来说就是在浏览器中,对于App来说则是在手机中。

常见的技术解决方案有哪些呢?

首先,是基于Cookie的方案。

Cookie是客户端向服务器发起请求后,服务器返回给客户端的信息之一,客户端会将Cookie保存下来并在后续接口中带上该信息,使服务器可以判断是哪个客户端发起的请求。

在自动登录场景下,用户首次登录后,账号和密码会被记录在Cookie中,后续登录时,客户端便从本地取出Cookie中的账号和密码发送给服务器验证,通过后登录成功,省去了用户手动重复输入账号和密码的过程。

在Web类型的产品中,则是利用localStorage来实现记住密码功能的。localStorage是HTML5标准中新加入的一种技术,该技术用于解决Cookie存储空间比较小的问题。与每条Cookie仅4Kb的容量大小相比,localStorage的容量大小一般会达到5Mb,具体容量大小在不同的浏览器中会存在差异。并且,保存在localStorage中的数据是永不过期的,除非进行了主动清空操作。

但把账号和密码信息保存在本地,存在账号密码被泄露及伪造的风险。所以,基于Token的方案便应运而生。大致过程与基于Cookie的方案类似,只是Token中无须保存账号和密码信息,从而提高了安全性。

2. 如何设置账号、密码的有效期

首先,依然是借助Cookie方案。在客户端向服务器发起请求之后,服务器给客户端返回Cookie时,直接设置好过期时间,一旦过期,客户端的Cookie信息就会被清除,后续登录则需要重新验证。

另外,就是借助Token方案。Token类似于Cookie,也可以设置过期时间。设定过程如下:首次登录时,客户端将账号和密码发送给服务器,服务器创建refresh token和token两个参数,将它们绑定,并设置不同的过期时间(一般可将token参数的过期时间设定得更早),后续登录只需带着Token即可校验。Token过期了以后,客户端就会向服务器重新申请Token,此时会先比对之前的refresh token,匹配后便生成新的token替换掉之前refresh token绑定的token,并将新的token返回给客户端,后续客户端发送请求时,带上新的token即可,于是用户的登录状态便是一直可用的,直到token和refresh token参数都过期后,用户才需要重新输入账号和密码。

三、单点登录

公司的产品数量不多时,用户注册账号登录,并结合记住密码功能,便可满足用户短期内均无须再次输入账号和密码的需求。

但公司产品数量增加后,依然会让用户感受到注册登录过程的烦琐。比如,腾讯、阿里这类大型公司旗下有众多产品,产品之间往往会产生关联,如果用户在使用其中某款产品时需要跳转到其他产品进行登录认证,一定会感到十分不便。对于产品设计者,也需要设计重复的登录认证逻辑。

解决这类问题的技术方案叫单点登录,英文全称是Single Sign On,缩写是SSO。这里有一个误区,因为很多产品经理一直以为,同一时间只允许一个账号在一台设备上登录的需求就是单点登录,但实际上单点登录是指产品中存在多套不同的系统,并且这些系统之间彼此是可信任的,只需让用户登录一次,后续便可直接登录产品中的任一系统。

目前市面上最主流的单点登录方案实现思路,要么是基于Cookie和Session自己搭建,要么是借助现成框架实现。

1. 直接基于Cookie与Session实现单点登录

一般公司的不同产品均位于同一个根域名下,但也不排除有些公司一条业务线或一个产品就占用一个单独的域名。举例说明,如果公司服务器域名为example.com,且存在两个系统对应的子域名为big.example.com及huge.example.com,在提供了登录功能的情况下,用户如果要打开这两个域名对应的系统页面,是需要分别登录的。那么怎样才能让用户在登录了其中一个系统后,打开另一个域名对应的系统时无须重复登录呢?

借助前面讲解过的Cookie知识,如果用户登录其中一个系统,在客户端本地记录下用户登录的Cookie信息,下次用户依然在同一端打开另一个系统登录,是不是可以将之前用户本地保存的Cookie信息拿过来直接用呢?遗憾的是,Cookie的使用不支持跨域,即不能直接拿Cookie中关于big.example.com域名的账号信息直接登录huge.example.com。那么,如何解决这个问题呢?好在设置Cookie时,除了可以设置当前域的信息,还可以设置对应的顶级域名,即example.com,在子域中又可以访问顶级域中的Cookie信息。

拿到登录账号信息还没完,还需要验证账号是否依然处于登录状态,此时就要借助Session来完成了。

用户在某个子域名登录后,服务器可在数据库中保存Session信息,其中就记录了登录状态。只要登录状态尚未结束,便可根据Cookie找到Session,保持之前的登录状态。具体如何根据Cookie找到Session呢?例如,用户在子域名big.example.com登录后,保存的是cookie1并生成对应的session1,然后在子域名huge.example.com登录,保存的是cookie2并生成对应的session2,两个独立的Session是无法知道彼此的登录状态的。为了解决这个问题,就需要借助Session共享技术。简单来讲,就是可将第一个子域名对应的系统与服务器会话时生成的Session共享给同一个根域名下的其他子域名使用,这样就可以解决有登录的Cookie信息,但没法确定登录状态,从而实现用户的免密登录。

2. 基于CAS方案实现单点登录

上面的方案已经能够解决不同产品归属同一顶级域名下情况的登录问题,但如果各个业务线域名都是独立的,那怎样实现单点登录呢?下面介绍市面上比较成熟的开源解决方案CAS。

在实现CAS这套方案时,除了需要提供正常的业务系统,还需要一个专门负责认证用户的系统,用于存储登录用户的标识。用户在登录其他系统时,借助已存储的标识进行验证,这时用户无须再次登录。在整套CAS方案中,认证系统被称为CAS Server,业务系统被称为CAS Client。

实现过程大致可以分为两个环节,一是初次登录,二是后续登录。

下面通过案例进行说明。假定某个集团公司叫小风科技集团,旗下的子公司分别叫中风科技发展有限公司和大风科技发展有限公司。中风科技发展有限公司主营业务是线上社交类电商,大风科技发展有限公司主营业务是线上医疗。两家公司原本独立运营,产品研发分离,域名也是独立申请的。因为战略方向上的调整,两家子公司的业务需要产生关联,需要进行产品整合,整合任务之一就是实现系统的单点登录。

先说初次登录。用户在使用子公司中风科技发展有限公司的产品时,之前登录时会直接请求服务器,改造为CAS模式后,则会变成先去请求CAS Server,若无法找到Cookie信息,则判定为初次登录,然后提示用户输入账号和密码进行登录。完成后,CAS Server便将登录信息(包括登录状态)一并写入服务器Session中,并记录下登录的Cookie信息。此外,它还会在登录成功后,生成一个叫作ST(Service Ticket)的内容,ST会在CAS Server和业务系统之间做来回的双向验证,双方确认无误后,首次登录就成功了。

再说后续登录。用户想要访问其他业务系统时,也会先将登录信息提交给CAS Server,待找到匹配的Cookie和Session信息,并经历ST的双向验证通过,就可以实现后续用户登录其他业务系统时,无须再次输入账号和密码便能直接登录的需求。

3. 基于OAuth方案实现单点登录

OAuth实际上是一种开放协议。通过这种协议,可以让第三方应用获取到用户在某一个平台存储的与个人信息相关的资源,并且在获取这些信息时,不需要用户提供账号和密码。

在讲解怎么样借助OAuth方案实现单点登录前,先讲讲OAuth协议的授权。

如图6-5所示,登录京东网页版时,选择使用微信等第三方账号授权登录,会展示让微信用户授权的二维码,在用户扫码同意授权以后,微信开放平台便会验证用户身份是否正确,如果正确,会生成一个临时的凭证给用户,用户再拿着这个临时凭证去微信开放平台换取access_token(注意这里的access_token是OAuth 2.0协议中客户端访问资源服务器时需要带上的令牌,有了这个令牌说明用户已经同意授权了)。到这一步后,基本上就已经完成了授权登录的过程。当然,后面还需要通过从微信获取到的用户信息来生成会话。

《产品经理技术手册》书籍节选之「注册和登录功能」

图6-5 京东网页版登录功能

在整个交互流程上,OAuth协议中涉及4个不同的角色,分别是resource owner(资源拥有者)、resource server(资源服务器)、client(客户端)、authorization server(授权服务器),不同的角色会起到不同的作用。资源拥有者代表用户信息归属于谁,在上面的案例中资源拥有者就是微信用户。资源服务器是存储授权后访问网页的用户信息的服务器,比如微信服务器。客户端即发起访问的客户端。授权服务器则是专门用于处理认证授权的服务器,在上面的案例中微信开放平台提供的认证服务器便充当了这个角色。上面的角色还可以继续简化,但至少需要保留客户端和授权服务器。

四、多终端设备的用户互踢

同一时间只允许一个账号在一台设备上登录,很多产品这样做是为了避免出现账号被他人使用但用户无法察觉的情况。针对这类需求,由于终端的差异,因此存在着不同的实现方式。

下面先来梳理场景。既然是端对端的访问过程,假定用户小风使用A账号在某个浏览器或App中登录,此时向服务器发起请求,服务器就会创建一个Session用于保持与客户端之间的会话状态。与此同时,服务器会基于客户端传来的一些参数(比如UUID、MAC地址等设备唯一标识)来生成Token,并将该Token与账号绑定,保存在服务器。另一个用户大风,这时也使用同样的账号A在不同的设备中登录,也同样会向服务器发起请求,服务器则会根据客户端提交的账号进行查询,发现Token已经存在,说明该账号还处于登录状态,但由于大风也向服务器发起了请求,所以为了确保大风能正常登录,便会生成一个新Token并将之前的Token信息删除。

在用户登录后,服务器还需要通知前面登录的用户被挤出登录的事实。

结合前面所学的网络请求相关知识,无论是移动端还是Web端,在与服务器交互的过程中,均为客户端发起请求,服务器响应并返回信息给客户端。采用这种方式意味着,虽然前面登录的用户明明已经被后面登录的用户“挤”了下去,但还是得通过某个特定的操作,向服务器发起请求,服务器查询到新用户使用同一个账号登录,才会为前面的用户注销登录。于是,就会出现在一段时间内,存在两个用户同时登录的状态。

因此,服务器如果能主动向客户端推送消息,就可以解决上面的问题,下面介绍两类解决方案。

1. 轮询与长轮询

轮询,可以被理解为在客户端,通过定时任务,定时向服务器发起请求,服务器收到请求后根据请求的信息进行响应。采用这种方式,有利有弊,优点是技术实现方便,缺点是会产生大量无效请求,加重网络负载,甚至还会造成服务器性能的浪费。

为了减少不必要的请求,便出现了长轮询。长轮询与轮询的不同之处在于,轮询时服务器收到客户端的请求后会立即响应,长轮询时服务器收到客户端的请求后不立即响应,而是会暂时保持发起请求后的连接状态,直到服务器得到客户端想要的结果后才通知客户端,从而减少向服务器发起请求的次数。

2. WebSocket

无论是轮询还是长轮询,都基于HTTP协议,该协议最大的缺点是无法做到服务器向客户端主动推送消息。为了克服这一缺点,下面将引出WebSocket方案。

WebSocket也是一种网络通信协议,但WebSocket协议与HTTP协议不同,其服务器与客户端之间可以双向互推消息。它最常见的应用场景便是即时通信、视频网站弹幕、在线协同文档等。

WebSocket方案的实现原理大致如下:客户端发起HTTP协议请求到服务器,并在请求头中附加Upgrade: WebSocket信息来表明将协议升级为WebSocket,服务器收到请求后返回允许客户端切换协议的响应信息 switching,此时双方便以WebSocket方式开启了通信管道,直到任意一方决定主动关闭。

五、离线登录是怎么一回事

离线登录指没有网络或服务器出现故障时,用户依然可以正常登录并使用产品。比如,对于随手记记账产品,用户在注册登录后,可记录自己的消费情况,进而形成好的理财习惯。为了兼顾用户体验及技术实现,一般会设计为在无网情况下,用户可以通过离线模式将数据记录在本地,待网络恢复后,再将数据上传至服务器。

想要实现离线登录,最好用户曾经采用联网的方式登录过产品,确保客户端本地保存了用户的Cookie信息,甚至还可以缓存一部分软件使用过程中的数据(比如刚才的记账信息),也就是通过本地数据持久化的方式进行实现,Cookie信息便是其中一种数据持久化方式。除此之外,将账号信息加密后以文件方式保存在本地也是可行的。

本文节选自作者新书《产品经理技术手册》,本书定位于让不懂技术的产品经理从产品经理的工作和思考方式切入了解应该掌握的技术原理。

作者:小风,产品经理;公众号:村上风

本文由 @小风老师 原创发布于人人都是产品经理。未经许可,禁止转载。

题图来自Unsplash,基于CC0协议。

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。