对微信小程序的登录状态的控制进行了深入的分析

对微信小程序的登录状态的控制进行了深入的分析
对微信小程序登录状态的控制进行了深入的分析

近日,微信终于开了一个小的个人登记程序,我当然不能浪费炫技的好机会,飞迈日历小程序,是推,敬请期待。

在登录控件中,尝试一段时间来共享。

一、提出的微信登录状态控制
解释uff1a
1)通过在小程序的wx.login接口获取代码

2)把代码为背景,展开对OpenID的背景中的微信服务器的HTTPS请求,session_key

3)后台生成一个自己的3rd_session(保留核心价值的OpenID和session_key)并返回到前端。

PS:WeChat的OpenID和session_key没有返回到前端程序
4)小程序保存本地区经3rd_session

5)的一个小程序,要求在登录界面处,检查登录状态通过wx.checksession,未能如果失败,回到上面的登录过程,否则,它会等待3rd_session去登录和验证背景。

二、不能接受其建议

我不反对,但是我的微信小程序不需要什么私人数据,没有session_key,只需要一个OpenID,微信强调,为自己的应用程序的安全性,session_key不应该在网络上传播,不能说如果我能传递OpenID,OpenID将直接返回到小该程序前,会方便很多吗下面我们来具体分析一下:

永不过期的OpenID:
你知道,session_key已过期的时间必须被检索,并为每一个小程序,OpenID不仅可以识别用户是否过期,只有当用户第一次登录到OpenID请求通过的背景下,一个小程序到本地缓存,每个请求的OpenID是不盈利的唯一证据后。

事实上,上述方法忽略了一个致命的问题,手机可以切换微信账号,如果手机我原来的登录帐户已经挽救了OpenID用户,那天我切换到B账户的手机,一个小程序来检测OpenID的存在,而不是重新获取OpenID,然后B的帐户请求的数据,造成数据的混乱

在登录状态终止后,OpenID是检索。
上述问题并不能打消我使用OpenID登录凭据的想法,只是一个小小的改进,数据不是猖獗:每次通过wx.checksession登录失败检测输入的小程序,未能获取OpenID如果,你知道,手机切换登录账户,登录状态将要到期了,虽然不是那么丰厚,但足以担心。

这个时候应该有但是,永不过期的OpenID登录凭据,并不是一个明智之举,一旦被截获,没有机会,同时保持第三届,至少有一个有效的,这增加了安全性在很大的程度上。现在,不需要使用session_key,并不意味着未来,保持了系统的可扩展性,以坚定的

结果我还是应该接受它的建议。

三。基于Redis的3rd_session维修

维护3rd_session需要一个内存数据库,这里我选择redis

维护会话状态是场景数据库的一个典型应用,毕竟体积小,速度快,所以应用程序很小,而且还可以处理自己在内存中维护的对象进行ID的会话,但很难按照成熟的系统进行比较。

没有代码,它似乎是一个句子的概括。它产生了一个独特的随机字符串的SessionID,这是关键,OpenID和WeChat的session_key存储在redis值和sessionID发送回客户端。

然而,一直寻找小程序的正式文件,除了说wx.checksession是透明的开发商,并没有具体的解释时,小程序的登录状态后,我们如何能同步前后时段的截止日期

四。前后会话同步时间同步

开始时,我试图找到小程序的登录状态。
{session_key …
在返回的数据从code2session界面,有一个可疑的领域expires_in。它的值是7200。看来,使用SessionID设置可以同步到7200。但实践的结果再次令人失望,无论是7200或60×60×24(一天),有一次小程序仍然有效,但服务器的会话已过期,这直接导致了一个SessionID缓存向服务器请求界面的小程序,还没有记录

只有知道wx.checksession小程序,当会话过期,所以作战计划重新做了调整,如果wx.checksession检测会话失败,然后把已缓存在本地的SessionID(如果有的话),重新发起注册请求,请求获得新的结果从code2session,随机SessionID的新一代和Reid,和旧的SessionID删除(如果有的话)

当然,没有去除不会带来任何功能影响,但有两个问题。首先,喜欢用open_id作为登录凭据,旧的SessionID永不过期。其次,无用的会话数据占用redis资源,这将拖累访问性能

五。扶贫致富指数统计

我给小程序用户提供了一个高名称的穷富指数,纯娱乐,不一定是真的。

统计的小程序,使用用户数,为表保存用户数据的需要,背景为小程序的用户数据到一个注册操作界面,当然你可以把这个功能进入登录界面,每次你登录为带的一个小程序前微信的用户数据,如果数据库中没有找到,用户信息存储操作

不难发现,当你只需要用户第一次登录登记一次就行了,所以该方法简单,但浪费带宽,所以它应该提供一个额外的登录界面,登录界面只需要返回一个标志是否是注册用户,让用户决定是否获得用户信息登记操作(当然,背景会不会做出同样的用户重复存储)

于是问题就变成了如何判断用户是第一次登录:
1)判断登录请求,有一个SessionID如果没有的话,就必须先登录;如果你已经登录的用户吗不,别忘了,就像我之前说的,用户可以切换账户在同一设备上,所以它有可能带来别人的SessionID在登录界面。这并不意味着用户曾经登录过。
2)获取OpenID从Redis通过SessionID长大,与OpenID的新要求是code2session比较,如果是一致的,它可以证明用户已经登录,否则,它仍然需要用户登记。

总结

时间是一个很大的浪费,但是当你想到它时,代码必须更加完整。

谢谢你的阅读。我希望你能帮助你,谢谢你对这个站的支持
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部