小程序和ThinkPHP5结合实现登录状态(含代码)
本篇文章给大家带来的内容是关于小程序和ThinkPHP5结合实现登录状态(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
微信小程序中,一般会涉及三种登录方式:
1. 使用微信账号登录
2. 自有的账号注册和登录
3. 使用其他第三方平台账号登录
微信账号登录流程:
1. 小程序通过wx.login获取code,发往后台,后台以此向微信API换取session_key和openid;
2. 随机生成字符串作为sessionid(key),session_key和openid作为value,存入redis中,为了安全,
存入的时候还应设置一个超时的时间;
3. 客户端将返回的sessionid存入storage,调用那些需要登录后才有权限的访问的后台服务时,
你可以将保存在storage中的sessionid取出并携带在请求中,后台代码中获取到该sessionid后,
从redis中查找是否有该sessionid存在,存在的话,即确认该session是有效的,
继续后续的代码执行,否则进行错误处理。
本文采用的是自由的账号注册和登录,主要思路和流程如下:
1. 进入小程序首先通过wx.login获取code,通过后台接口发往后台,后台以此向微信API换取session_key和openid;
2. 判断数据库中有无该openid【唯一标识,需和账号(手机号)绑定】,
-- 如果数据库中没有该openid(说明没有该账号):
判断传过来的手机号是否为空(登录时会将手机号存到全局变量),如果不为空,则说明是刚登录过的,然后绑定openid及openid_time(当前时间),
如果手机号也为空,说明没登录过,则返回登录失败信息,使客户端跳转登录页;
-- 如果数据库中有该openid(说明数据库中有相对应的手机号),
判断openid_time距现在的时间是否大于4小时,如果大于,返回登录失败信息,使客户端跳转登录页;
如果小于,则更新openid_time为当前时间,然后返回登录成功信息及手机号。
3. 登录页面:判断数据库中该手机号是否存在,如果存在,则更新openid_time为当前时间,如果不存在,则添加该手机号用户。然后跳转首页执行wx.login方法,登录成功,保持登陆状态。
详细流程:
步骤1:进入小程序首先通过wx.login获取code,通过后台接口发往后台,后台以此向微信API换取session_key和openid;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
步骤2:判断数据库中有无该openid【唯一标识,需和账号(手机号)绑定】;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
|
步骤3:登录页面:登录成功后,跳转首页执行wx.login方法,然后登录成功,保持登陆状态。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
根据微信API获取sessionkey 和 openid的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
date_default_timezone_set('PRC'); $opts = array( CURLOPT_TIMEOUT => 30, CURLOPT_RETURNTRANSFER => 1, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_HTTPHEADER => $header, CURLOPT_COOKIESESSION => true, CURLOPT_FOLLOWLOCATION => 1, CURLOPT_COOKIE =>session_name().'='.session_id(), ); /* 根据请求类型设置特定参数 */ switch(strtoupper($method)){ case 'GET': // $opts[CURLOPT_URL] = $url . '?' . http_build_query($params); // 链接后拼接参数 & 非? $opts[CURLOPT_URL] = $url . '?' . http_build_query($params); break;
|
小程序和ThinkPHP5结合实现登录状态(含代码)的更多相关文章
- 小程序getUserInfo授权升级更新登录优化
小程序基础库2.0.7更新小程序组件 <button> 新增 open-type 属性有效值 openSetting,所以说,再也不能愉快的直接调用getUserInfo了.但是不想用官方 ...
- 「小程序JAVA实战」java-sesion的状态会话与无状态会话(38)
转自:https://idig8.com/2018/09/02/xiaochengxujavashizhanjava-sesiondezhuangtaihuihuayuwuzhuangtaihuihu ...
- 微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
目录 0.概述websocket 1.app.js写法 2.后台写法 0.概述websocket (1) 个人总结:后台设置了websocket地址,服务器开启后等待有人去连接它. 一个客户端一打开就 ...
- 微信小程序富文本渲染组件html2wxml及html2wxml代码块格式化在ios下字体过大问题
1.组件使用: 之前微信小程序的富文本渲染组件用的wxParse,对普通富文本确实可以,但是对于代码格式pre标签则无法使用. 下面这个html2wxml很不错,可以支持代码高亮. 详细文档:http ...
- 微信小程序-开心大转盘(圆盘指针)代码分析
大转盘是比较常见的抽奖活动 .以前做过h5的大转盘,最近小程序比较火,客户要求做小程序的大转盘.我们就来分析下代码.先上几个图: 界面效果还是很不错的. 做界面还是比较容易的,只要有前端基础没 ...
- 微信小程序实现即时通信聊天功能的实例代码
项目背景:小程序中实现实时聊天功能 一.服务器域名配置 配置流程 配置参考URL:https://developers.weixin.qq.com/miniprogram/dev/api/api-ne ...
- 微信小程序支付源码,后台服务端代码
作者:尹华南,来自原文地址 微信小程序支付绕坑指南 步骤 A:小程序向服务端发送商品详情.金额.openid B:服务端向微信统一下单 C:服务器收到返回信息二次签名发回给小程序 D:小程序发起支付 ...
- 微信小程序/支付宝小程序 WxParse解析富文本(html)代码
小程序本身并不太支持html代码,比如html的img.span.p这个时候改这么办呢?需要用到一个小插件WxParse来实现. 小程序高级交流群:336925436 微信小程序支持富文本编辑器代码 ...
- 【微信小程序】——实战开发之和风(含demo)
微信小程序之和风 序 凑了一把微信小程序的热闹!12月,小程序正式发布,很火,但随之而来的是各种冷水,唱衰之调随处可见.但作为一个小前端,岂能有新技术却弃之不顾之理,更何况是微信出品的?抱着学习和研究 ...
随机推荐
- Python 以指定宽度格式化输出
当对一组数据输出的时候,我们有时需要输出以指定宽度,来使数据更清晰.这时我们可以用format来进行约束 mat = "{:20}\t{:28}\t{:32}" print(mat ...
- django 接口编写的配置
一.修改settings文件 ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ 'corsheaders' ] #加入该app 安装django-cors-hea ...
- c++ 数组元素拷贝到容器(copy)
#include <iostream> // cout #include <algorithm> // copy #include <vector> // vect ...
- Could NOT find Bullet (missing: BULLET_DYNAMICS_LIBRARY BULLET_COLLISION_LIBRARY BULLET_MATH_LIBRARY BULLET_SOFTBODY_LIBRARY BULLET_INCLUDE_DIR)
rosdep where-defined bullet sudo apt-get install libbullet-dev
- API接口自动化之1 常见的http请求
常见的HTTP请求 就我所想到的,目前如果想做http/https请求接口自动户化,要处理的一些区别 get请求post请求 httphttps 单个值键值对键值对的搭配方式 POST请求体,后续讲一 ...
- HTML中常见的其它标签
HTML中常见的其它标签 一.头标签部分 1.<title>:指定浏览器的标题栏显示的内容. 2.<base>: href 属性:指定网页中所有的超链接的目录.可以是本地目录, ...
- Java基础八--构造函数
Java基础八--构造函数 一.子父类中构造函数的特点 1.1 为什么在子类构造对象时,发现,访问子类构造函数时,父类也运行了呢? 原因是:在子类的构造函数中第一行有一个默认的隐式语句. super( ...
- Ubuntu 16.04下docker ce的安装
卸载版本的docker sudo apt-get remove docker docker-engine docker.io 安装可选内核模块 从 Ubuntu 14.04 开始,一部分内核模块移到了 ...
- 通过IIS寄宿WCF服务
WCF全面解析一书中的例子S104,直接将Service目录部署到iis是无法得到服务相应的,需要在项目中新建一个web项目,删除掉自动生成的所有文件之后,把Service目录下的Calculator ...
- php--------合并2个数字键数组的值
开发中遇到了,数组合并并去除重复这个功能,查阅资料, 找到了一个方法,分享一下. <?php /** * PHP合并2个数字键数组的值 * * @param array $arr1 * @par ...