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

哈鲁
  • 1.2k

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

回复
阅读 26.7k
5 个回答

用户将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.暂时是这么做的

你知道吗?

宣传栏