开发一个h5,要用到微信授权认证,取到openId。
实现方式是先从session中取openId,如果有openId,则直接返回OpenId,如果没有openId,则去微信认证,得到code,通过code取到openId,然后将openId保存在session中。代码实现如下:
session的过期时间是根据我们自己定义的,在cookie中的sessionId和session存活时间内的都会获取到相同的openId。本来cookie中sessionId的默认的expires是Session(-1),就意味着关闭浏览器或者session过期就失效。但是微信浏览器并不是,在关闭了微信浏览器之后,cookie中的sessionId还是存在,就导致只要在session有效期内,都是可以获取到相同的openId。
我分别在手机和电脑微信上做了测试。先用一个微信帐号在手机端访问该链接,得到openId A,在session过期时间内都能拿到A。然后切换账号,在访问该链接,得到OpenId B,在session过期时间内都能拿到B。接着在微信PC端重试,发现切换账号B后,获取到的还是openId A。说明切换账号之后,PC端cookie中的sessionId还是存在,而手机端的就不存在了。
这说明将用户信息缓存在session中,手机端切换账号可以得到最新的用户信息,而PC端则还是取到旧的信息。