我们公司的多点登录一直没实现,今天早上公司的 JAVA 找我说,让我前端来实现用户的多点登录,只要把 sessionID 和 token 存下来就行了,我特么喵也是醉了,是我技术水平不够么?我怎么有点懵逼呢?用户多点登录居然让前端来做??
![]() | 1 Yuicon 2019-02-22 09:25:43 +08:00 熟悉的前后端分锅现场 |
![]() | 2 qping 2019-02-22 09:25:46 +08:00 多点登陆还是单点登陆? |
3 momuou 2019-02-22 09:25:54 +08:00 --只是存而已吧。。可能是想让你前端放在缓存上,让他后端能拿到不用通过 URL 带过来吧 |
![]() | 4 wrq 2019-02-22 09:26:30 +08:00 你开始了 |
![]() | 5 DonaldY 2019-02-22 09:27:15 +08:00 什么是多点登录。。。 |
![]() | 6 keepeye 2019-02-22 09:28:40 +08:00 多点登录是什么? |
![]() | 7 liuxu 2019-02-22 09:29:51 +08:00 单点登录是故意限制的啊。。默认不开发单点登录就是多点登录 |
8 stormwu 2019-02-22 09:30:06 +08:00 单点登陆吧 |
9 myhot21 2019-02-22 09:30:44 +08:00 这和我们的实现做法一样,没有错。 |
10 RoyL 2019-02-22 09:31:04 +08:00 ....多点登陆,可能确实是你技术不够吧 |
![]() | 11 litujin1123 2019-02-22 09:31:06 +08:00 多点登录是啥? |
12 zhangjinglongi 2019-02-22 09:31:32 +08:00 你前端不做难道让后端拿取登录状态 session cookie ? |
![]() | 13 Raisu 2019-02-22 09:33:14 +08:00 我水平不够啊,怎么看不懂啊 |
14 kx5d62Jn1J9MjoXP 2019-02-22 09:34:56 +08:00 ![]() 一瞬间我以为多点已经这么牛了,都出第三方登录系统了 |
![]() | 15 MineDog 2019-02-22 09:35:39 +08:00 via Android sso 吗? |
![]() | 16 pudgedoor 2019-02-22 09:38:05 +08:00 via Android 我们公司就是前端做的单点 |
![]() | 17 xutao881 OP 不知道为啥没法 append,我说的有问题,不是多点登录,是多账号同时登录,因为现在的登录是多标签页登录多个用户只有最后一个用户的登录状态有效,我们想做的是多标签页,支持多用户登录。 |
![]() | 18 szpShang 2019-02-22 09:40:09 +08:00 ![]() 如果下属以这个理由回怼回来。我想知道上面的领导要怎么做呢? 1.耐心跟前端讲解 http 协议等一大堆前端知识。更甚者跟他说把信息存 cookie 里面。 2.换个其他有能力的同事做。 3.直接开人。 |
![]() | 19 bridgeca0 2019-02-22 09:40:15 +08:00 怀疑你们说的单点登录是不是我理解的单点登录 |
![]() | 20 xzg 2019-02-22 09:40:53 +08:00 对哦 多点登录就不用开发吧(手动滑稽) |
21 arrow8899 2019-02-22 09:42:08 +08:00 ![]() litujin1123 就是用户在同一个浏览器里打开多个不同的系统(不同域名),可以共享登录状态。 由于浏览器的跨域限制,不同域之间没法共享 cookie 和 localstorage 等。所以需要新增一个统一登录入口(认证系统),当用户访问一个新系统,系统检测到未登录时,就重定向到认证系统,如果用户已经登录过了,那么认证系统里面是有 cookie 的,然后重定向到新系统并带上 set-cookie header,这样就不用重复登陆了 |
22 muzhidianzi 2019-02-22 09:42:44 +08:00 via Android @ssynhtn 哈哈 |
23 hellormrfool 2019-02-22 09:43:07 +08:00 pm 比较骚 什么业务啊想开开眼界 @xutao881 |
![]() | 24 dr1q65MfKFKHnJr6 2019-02-22 09:43:49 +08:00 emmmmm |
![]() | 25 2033009565 2019-02-22 09:43:50 +08:00 楼主的意思是同时登陆多个账号 |
26 arrow8899 2019-02-22 09:44:07 +08:00 @xutao881 多账号,这个就没办法用 cookie 了吧,只能把 token 放全局变量里面,每次请求的时候手动带上去。。 |
![]() | 27 wweir 2019-02-22 09:44:26 +08:00 via Android 弱弱问下,基于 jwt 的方案,怎么优雅地实现单点登录 |
28 javaWeber 2019-02-22 09:44:53 +08:00 |
![]() | 29 dr1q65MfKFKHnJr6 2019-02-22 09:45:18 +08:00 单点登录多点登录,这个不说,java 同学,可能只是想让你配合他实现这个功能,你这里只是很小一部分。 |
30 v2chou 2019-02-22 09:46:31 +08:00 |
![]() | 31 lanterboy 2019-02-22 09:46:39 +08:00 我一个 JAVA 的,看得也有点懵 |
![]() | 32 murmur 2019-02-22 09:46:58 +08:00 多点登录就是拿到 session 然后前端在 iframe 里偷偷把所有接口都访问一遍创建 cookies 啊 |
33 cqu1980 2019-02-22 09:47:53 +08:00 @xutao881 你们后端说得没错,可以你保存,前提是登录完成后,把 sessionID 和 token 返还给你,你在每个 query 操作的时候带上给他...因为如果使用 cookie 来保存的话,由于 key 值一样,所以 value 值会被覆盖成最后一个... |
34 cqu1980 2019-02-22 09:50:12 +08:00 @lanterboy sessionID 一般是使用 cookie 保存的,如果不使用 cookie 保存的话,一般可以通过 url 地址或者隐藏表单文本框的方式来实现,道理是一样的。他这里如果使用 cookie,会导致被覆盖,所以不能使用 cookie |
![]() | 39 VoidChen 2019-02-22 09:53:27 +08:00 所以后端并没有骚操作= = |
![]() | 40 qping 2019-02-22 09:56:35 +08:00 我觉得吧,还是前端需要学点后端的东西,后端需要学点前端的东西。不然沟通起来费劲~ 你看最早的程序员不都是自己学电路,焊主板么 |
![]() | 43 murmur 2019-02-22 09:59:21 +08:00 @DonaldY 我理解就是比如我登录了 login.example.com ,那么 biz.example.com 、biz.example-mirror.com ,biz.example-nb.com ,这一系列网站都登录了 |
44 hellowes 2019-02-22 09:59:50 +08:00 对,是你技术水平有问题 |
45 notreami 2019-02-22 10:00:08 +08:00 好无聊,前端会什么总喜欢拿 百度就知道的事情拐弯抹角说后端呢? |
![]() | 47 szpShang 2019-02-22 10:01:47 +08:00 @cqu1980 不用 cookie 很容易被注入的。那这个登录弄好全是漏洞,有什么意义。只要有人想办法弄到 sessionId,就能登录这个用户。 |
![]() | 48 Hazurt 2019-02-22 10:03:21 +08:00 @murmur #43 这是单点登录,用户只需要登录一次就可以访问所有相互信任的应用系统,Single Sign On 简称 SSO。 |
![]() | 49 metamask 2019-02-22 10:07:38 +08:00 |
![]() | 50 Hazurt 2019-02-22 10:07:41 +08:00 楼主的需求我是在 Header 里面加额外属性实现的。 |
52 ThreeBody 2019-02-22 10:09:55 +08:00 看你的评论,感觉可能你技术不够吧,这不就是前端来做的? |
![]() | 53 dany813 2019-02-22 10:10:33 +08:00 求解多点登陆 |
54 Banxiaozhuan 2019-02-22 10:12:50 +08:00 这中用 token 作多点登录的,有个专门的协议的,你可以去找找。 我记得大概有三种实现方式。 确实有前端存 token 的实现,还有就是用一个公共的地服务存 token。 |
![]() | 56 xmge 2019-02-22 10:14:25 +08:00 额。。。。。用 cookie 就 ok 啊,可以不用前端 |
![]() | 57 Marstin 2019-02-22 10:15:14 +08:00 ![]() 多标签登录这特么就是前端去做的啊,前端的持久化可选项里,只有变量的生命周期仅在标签页内,后台怎么知道你是哪个标签。 不管什么登录,sessionID / token 必须要存在前端 PS:现在前端工资真好拿 |
![]() | 58 iyangyuan 2019-02-22 10:16:54 +08:00 ![]() 多账号登录实现起来也不难,最简单的方案:不同的账号使用不同的根路径(可以直接使用账号唯一 id),然后把 cookie 写到每个账号具体的 path 下,这样多账号之间就互不影响了。对于旧系统的改造,凭空多出一个根路径可能影响原有系统,很容易解决,加一层代理,用代理去掉这层虚拟的根路径,即可实现原有系统 0 改动。 本回复仅仅是指导性建议,需要具体业务具体分析,仅供参考! |
![]() | 59 index90 2019-02-22 10:17:52 +08:00 什么是多点登录?! |
![]() | 61 Hazurt 2019-02-22 10:18:32 +08:00 @freakxx #51 恩,那样也可以,这边有个额外需求,直接在 Apache 里面配置好,访问指定 URL 就是登陆状态(内网)。 |
64 Toninie 2019-02-22 10:19:03 +08:00 前端无论是存 cookie 还是 localstorage 之类,因为 key 总是固定的,打开多个标签页时,会被覆盖,但是如果不存,也会有问题,你页面刷新以后这些用户 id 和 token 都没了,所以还是楼上说无痕模式最好实现这种需求 |
65 saberlove 2019-02-22 10:19:19 +08:00 这个需求太牛逼了 好羡慕 |
67 wc951 2019-02-22 10:22:55 +08:00 via Android 没懂什么意思,是说新开一个标签页就要重新登录一次吗 |
68 whileFalse 2019-02-22 10:30:39 +08:00 @iyangyuan 这位仁兄说的是最优雅的。 多问一句,你们前端有 node 服务器吗,还是只能控制 http 和 js ? |
![]() | 69 metamask 2019-02-22 10:31:07 +08:00 @Marstin 多标签页应该要借标志,或者前端有办法获取当前标签页的唯一信息,也是可以。 标签页 1 登陆用户 a(随意生成一个 key,存到 cookie), {"a": token_1} ?uid=a 数据发送的时候,带上 token_1 标签页 2 用户切换为 b(随意生成一个 key,存到 cookie), {"b": token_2} ?uid=b 数据发送的时候,带上 token_2 |
![]() | 70 dearxe2v 2019-02-22 10:33:05 +08:00 涉及到登录嘛(坏笑 还是前端的锅多些,登录核心的用户操作和数据都在浏览器端维持着,是吧,跟服务器几乎没一毛钱关系 就算是单点登录,别的域要获取 token 也是前端的锅多些是吧 另:多点登录 也许可以翻译成:多个登录入口点(登录页面)进行登录。约等于:每个站点需单独登录。就是:普通登录。 |
![]() | 71 clecho 2019-02-22 10:35:17 +08:00 单用户登陆,后台的 session 也是存在前端的 cookie 里的,多用户同时登陆,也就是多开,那就不能存在 cookie 里了,会覆盖掉,所以让你前端存起来,前端不是也有 localStorage 和 sessionStrong 吗?每次请求带上这个 session 或者 token 就行了 |
72 q4336431 2019-02-22 10:35:26 +08:00 你的意思是,一个账号,可以同时被多个用户登录吧。 |
73 zzzzzzZ 2019-02-22 10:36:45 +08:00 这个事不是你分内的?现在前端这么好混? |
![]() | 74 aniua 2019-02-22 10:39:45 +08:00 Google 已经为你们开发好了无痕模式,用就是了。 |
![]() | 75 66beta 2019-02-22 10:41:38 +08:00 via Android ![]() 需求没说清楚,我就先不加入战斗了 喷子的水平也是厉害,能靠想象喷 |
![]() | 76 lovedebug 2019-02-22 10:43:04 +08:00 前后端之间用 node 架设中间件管理 session 或者 token 呀 |
77 sstfy 2019-02-22 10:44:07 +08:00 只知道统一认证、单点登陆。。 |
![]() | 78 litujin1123 2019-02-22 10:44:57 +08:00 @arrow8899 这个是单点登陆 sso 吧 |
79 fengmenggaokao 2019-02-22 11:14:24 +08:00 这样也能实现,准确说最简单的实现了,如果后端优秀点,可以参考 https://www.apereo.org/projects/cas,总而言之,这个 javaer 让你这样维护应该没啥太大问题的 |
80 DesmondLiu90 2019-02-22 11:15:56 +08:00 单点登录吧 ,java 没有什么开源的框架吗? 自己写也没什么吧, 只要把单点登录搞明白就行 |
![]() | td width="10" valign="top"> 81 passerbytiny 2019-02-22 11:16:33 +08:00 @xutao881 #15 多标签页多账户同时登录,能弄出这需求,感觉不是后端骚,是产品骚。后端抛给你了“只要把 sessionID 和 token 存下来就行了”,据此推测,后端已经被产品弄崩溃了。多账户同时登录(并且不用来回切换账号)这种事,Windows、Chrome、Firefox 都没有完善解决的方案。 标准 HTML 的 session、cookie、localStorage、sessionStrong 机制,以及标准的 sessionID、token 技术,是都实现不了你这需求的。你需要的是浏览器的黑科技,比如 Firefox 的多账户容器;或者像 @iyangyuan #52 提到的 URL 黑科技。 |
![]() | 82 wolfie 2019-02-22 11:20:57 +08:00 |
![]() | 83 wolfie 2019-02-22 11:22:41 +08:00 ![]() append #81 人后端没让你做,多个标签页一个会话,后端应该怎么区分。 |
84 caomu 2019-02-22 11:22:47 +08:00 via Android google 账号是在 url 里面加上 /u/0 /u/1 等等区分 |
![]() | 85 xingyue 2019-02-22 11:27:24 +08:00 @iyangyuan #58 emmmmm 我觉得 cookie 里面改下数据结构应该就行了,如下图: ![]() 每个 tab 页面登陆成功的时候,从后端获取 userid(如果 username 是唯一的直接存 username 更省事),对应的 session 和 token 以及过期日期 lastdate,然后 userid 在每个页面通过 js 变量维护,就可以多个 tab 页面多个用户了,页面切换登陆用户的时候,遍历 userid,找到 lastdate 没过期的,然后通过 userid 得到 username 显示给用户选择就好了~ |
![]() | 86 Marstin 2019-02-22 11:33:06 +08:00 ![]() @freakxx 是的,难点只在于标签页标识的识别与存储,解决了这个问题,和普通登录就没什么差别了。 哈哈,不能理解以上那么多扯些乱七八糟的,真的服。 几个顶 #58 的,真的误导人,前端持久化多个用户信息从来不是问题,问题在于没法识别标签页和哪个用户的绑定连系。前端持久化,都是以域名为单位,从来不是以标签为单位。 这傻吊需求做出来之后,岂不是不能用 “在新标签页中打开链接” 了 |
![]() | 87 xiangyuecn 2019-02-22 11:34:30 +08:00 #17 如果是要实现这种的话,确实是前端的事情。cookie、storage 之类的如果仅单独使用就不用考虑了,那些是共享的。不同标签下只有地址栏不是共享的,并且很多产品的管理后台就是按这种方式实现的,在 url 中来区分不同的产品 /用户。见#84 这种。 |
![]() | 89 DRcoding 2019-02-22 11:49:24 +08:00 一个浏览器保持多个登录用户吧,用 spring session 就行了 |
90 TimLang 2019-02-22 11:49:40 +08:00 很早以前的天猫登录用的是嵌入淘宝的登录页,然后用 jsonp 做的。。当年我就是抄天猫的。。 |
![]() | 91 Zzdex 2019-02-22 11:55:20 +08:00 via iPhone 现在都流行 不自己商量解决 来 v2 解决的吗 |
92 zxcvsh 2019-02-22 11:58:40 +08:00 via iPhone 别人都搞单点,你这来多点... |
![]() | 93 passerbytiny 2019-02-22 12:01:05 +08:00 @wolfie #72 建议你先去了解一下啥是 session_id。 |
94 lizhuoli 2019-02-22 12:07:43 +08:00 via iPhone 这 TM 是 SSO,我看了半天才理解,为什么叫做”多点登录” |
![]() | 95 lzhnull 2019-02-22 12:09:48 +08:00 via Android 没有错,可以前端实现 |
96 wangxiaoaer 2019-02-22 12:10:44 +08:00 via Android @arrow8899 大哥,这个学名叫 单点登陆。 |
97 karllynn 2019-02-22 12:12:47 +08:00 不就是点一下就登录的单点登录么 |
![]() | 98 youngxhui 2019-02-22 12:22:39 +08:00 via Android 多点登录还需要故意实现? |
![]() | 99 luoway 2019-02-22 12:33:29 +08:00 只有“单点登录”的概念,难怪“多点登陆”概念有不同理解。 也就是“非单点登录”。 |
![]() | 100 dmjob2015222 2019-02-22 12:35:11 +08:00 开始你的表演给老板看! |