Home >Backend Development >PHP Tutorial >javascript - 微信公众号开发,如何使用户保持登录状态

javascript - 微信公众号开发,如何使用户保持登录状态

WBOY
WBOYOriginal
2016-06-06 20:21:112217browse

用户将openid与业务帐号绑定一次,如何实现用户一直处于登录状态?更换手机后?
用于网页授权用户信息的access_token是怎么缓存和维护的?存储在seesion吗?
微信中session会话什么时候会失效?(比如PC端关闭浏览器)

回复内容:

用户将openid与业务帐号绑定一次,如何实现用户一直处于登录状态?更换手机后?
用于网页授权用户信息的access_token是怎么缓存和维护的?存储在seesion吗?
微信中session会话什么时候会失效?(比如PC端关闭浏览器)

用户将openid与业务帐号绑定一次,如何实现用户一直处于登录状态?更换手机后?

  • 方法1:将微信号认证一下,使用OAuth接口,每次进入之前通过接口获取到用户的openid,然后再从你的数据库去读取关系,写入用户登录状态。

  • 方法2:用户点击菜单或者发送关键词是可以获取到用户的openid的,此时返回一个链接或图文消息,用户点击之后用get方式获取到openid,然后再从你的数据库去读取关系,写入用户登录状态。

商业产品正式使用推荐方法1。
个人做着玩玩的话推荐方法2。

用于网页授权用户信息的access_token是怎么缓存和维护的?存储在seesion吗?

用于网页授权用户信息的access_token是必须要进行缓存的,这个每日有接口频率限制,所以你必须缓存这个。
存在Memcache或redis等缓存服务,或者……你存到某个文件也行。
session一般是用来做用户会话,放到这里不保证可用,或者说这么做很奇怪。其他朋友补充下吧。

微信中session会话什么时候会失效?(比如PC端关闭浏览器)

微信的session和PC没关系啊。。
session什么时候过期这个说不来,和你服务器设置和微信自己都有关系吧我觉得。
cookie的话微信有一种很奇怪的过期方式,在很久以前的旧版本里很无厘头,经常是关了窗口就关了。

以上。

第1个问题:openid与业务账号绑定,这个和用户是否一直处理登录状态有什么关联吗?openid账号与每个微信公众号是唯一对应关系的,哪怕你取消关注后,再次关注,这个用户的微信号与你的公众号之间的openid也是不变的。
第2个问题:access_token有很多种方式可以缓存和维护,我通常会优先使用memcache(例如sinaapp开发,为key设置一个过期时间,小于微信的7200),或是xml文件,甚至有些网站会使用数据库。
第3个问题:微信公众号接口是无状态的会话,不存在session状态。如果是指自己开发的网站在微信中打开的session,失效就是你关闭网页时。
但这种情况会因为你手机对微信驻留后台的允许或禁止影响,例如你本来未关闭网页,但是你将微信窗口缩到后台,结果被安全软件把进程清理了,这时候也会失效。

其实楼主是想问用户绑定账号以后,让用户一直处于登录状态。

这里好像没有好的办法的。会话是无状态的,如果想让用户感觉着是一直登录状态,中间还得于微信系统进行一次交互才可以,在自定义菜单上可以通过自动回复关键字来实现这一点,其它没有找到好的解决办法,不交互你是根本无法知道用户是谁的

微信登录(所有的第三方登录)都不存在登录状态,获取用户信息都是要通过接口传递openid。(具体可以看看auth2.0)。
access_token 要保存到数据库,而不是session。可以用refresh_token 来刷新access_token(授权成功只会会同时给access_token 和refresh_token)。
你先需要理清楚登录的流程。

通过网页授权接口取到code,换取openid,然后由后端传给前端,存储在本地。每次用户访问带着openid去访问后端接口,如何判定到该openid已经绑定业务帐号,就默认处于登录状态。如果前端取不到openid,就再次走网页授权接口最终获取到openid.暂时是这么做的

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn