微信授权登录丢失 session

2018-04-07 22:54:07 +08:00
 choice4

现在想将用户登录时的 openId 获取到,然后放到 session 中(其他地方用的比较多,一直要验证 openId),但是微信的授权登录时候,访问回调地址时 request 和自己登录前的 request 不在同一个 session 中 如果拿到 openId 后就把 openId 放到 session 中,以后用户在 session 中拿这个 openId 是拿不到的(空指针),打印过两个 session 的 sessionId 确实是不一样,现在解决就是搞了个静态 map,来将用户发起第一次请求时的 session 保存在 map 中,然后保存 openId 时,去这个 map 中拿 session,但是这样的话,当多用户操作到这个 map。。。不敢想象,,问下大家有没有什么解决思路,,学生小项目,redis 做缓存有点过分了。。guava 怎么样,,或者说大哥们还有更好的方法,csdn 搜到了一个帖子跟我这个问题一模一样。。解决思路都一样。。不过回答区好多 redis..问下大哥们有没有这方面的经验

6350 次点击
所在节点    Java
12 条回复
choice4
2018-04-07 23:16:00 +08:00
又想一个,在回调后把 openId 放到 cookie 里 下一个接口拿到这个 cookie 再把 cookie 的值放回 session 怎么样。。明天测试。。大哥们也给点意见。。
liuzhedash
2018-04-07 23:21:05 +08:00
听起来这似乎是单点登录相关的问题,可以参考:
https://www.cnblogs.com/ywlaker/p/6113927.html
zhantss
2018-04-07 23:22:02 +08:00
学生小项目,guava 就行,设置个若干个单位的 LRU 缓存,存储放数据库就可以
zhantss
2018-04-07 23:22:49 +08:00
guava 只是缓存实现,和存储无关,想放哪就放哪
torbrowserbridge
2018-04-07 23:23:31 +08:00
访问回调地址时 request 和自己登录前的 request 不在同一个 session 中 。

这句不对吧。
paicha
2018-04-07 23:34:19 +08:00
JWT 了解一下
choice4
2018-04-08 08:07:14 +08:00
@torbrowserbridge 嗯。。这个怎么表达呢,想着就是应该去请求了微信的 web 服务器,他那边保存的会话跟我这 tomcat 的不是同一个会话,我的 openid 应该是保存在微信回调时候那边的 session 里了,但是在我这拿不到那个 session
choice4
2018-04-08 08:07:38 +08:00
多谢大哥们。。
Sypher
2018-04-08 09:11:22 +08:00
以前用过。可以分析一下几个请求是不是同源,要想 session 一致,就不要跨域,比如 java 后台,设置 cookie.setPath("/"),response.addCookie(cookie),可以使得请求再次发起时用的同一个 sessionId。
仅供参考
choice4
2018-04-08 09:30:13 +08:00
@Sypher 没明白所得啥,直接用的 servlet, 一个 servlet 就是负责一个授权登录(此时的 request.getSession().getId() = 1(假设)),重定向到微信给的授权登录 url 后(这个 url 中有一个参数还是一个 url(这个就是回调的了)),然后应该是微信方吧去请求那个回调(这块又是一个 servlet,此时的 doGet 或者 doPost 方法参数的 request.getSession().getId() == 2(反正就是不一个 session 了。。)),大哥你说的这个是在 cookie 中存什么?SessionId ?
honeycomb
2018-04-08 12:56:19 +08:00
@choice4 缓存也可以用 caffeine (相当于 guava cache 的一个改进版),还可以直接搭 spring 全家桶
zeayes
2018-04-09 23:08:27 +08:00
对称加密存 cookie

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/444926

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX