保持登陆状态代码php,微信小程序登陆及登陆状态保持前后端php代码 缓存redis

微信小程序给出的demo并不是很详细,让人看起来很困惑,小编在此贴出代码供各位朋友参考。

小程序端代码

my.js

Page({

data: {

},

onLoad: function (options) {

var that = this

wx.checkSession({

success: function () {

console.log("登陆未过期")

wx.getStorage({

key: 'thirdsession',

success: function (res) {

console.log("客户端有缓存")

var sessionid = res.data

//console.log(sessionid)

wx.getUserInfo({

success: function (res) {

var encryptedData = res.encryptedData

var iv = res.iv

wx.request({

url: '你的域名/api/getuserinfo.php',

data: {

sessionid: sessionid,

encryptedData: encryptedData,

iv: iv

},

method: 'GET',

success: function (res) {

//console.log(res.data)

that.setData({

nickName: res.data.nickName,

avatarUrl: res.data.avatarUrl

})

//此处判断解密数据返回的状态码,如果为负数说明服务器端redis缓存失效,就需要重新走一遍登陆流程

if (res.data

//console.log("0")

wx.login({

success: function (res) {

var jcode = res.code

wx.request({

url: '你的域名/api/getsession.php',

data: {

jcode: jcode

},

method: 'GET',

success: function (res) {

//console.log(res)

var thirdsession = res.data.sessionid

wx.setStorage({

key: 'thirdsession',

data: thirdsession,

success: function () {

var sessionid = thirdsession

//console.log(sessionid)

wx.getUserInfo({

success: function (res) {

var encryptedData = res.encryptedData

var iv = res.iv

wx.request({

url: '你的域名/api/getuserinfo.php',

data: {

sessionid: sessionid,

encryptedData: encryptedData,

iv: iv

},

method: 'GET',

success: function (res) {

that.setData({

nickName: res.data.nickName,

avatarUrl: res.data.avatarUrl

})

}

})

}

})

}

})

}

})

}

})

} else {

//console.log("解密成功")

}

}

})

}

})

},

fail: function (res) {

console.log("客户端没有缓存")

wx.login({

success: function (res) {

//console.log(res.code)

var jcode = res.code

wx.request({

url: '你的域名/api/getsession.php',

data: {

jcode: jcode

},

method: 'GET',

success: function (res) {

//console.log(res.data)

var thirdsession = res.data.sessionid

wx.setStorage({

key: 'thirdsession',

data: thirdsession,

success: function () {

var sessionid = thirdsession

//console.log(sessionid)

wx.getUserInfo({

success: function (res) {

//console.log(res.iv)

var encryptedData = res.encryptedData

var iv = res.iv

wx.request({

url: '你的域名/api/getuserinfo.php',

data: {

sessionid: sessionid,

encryptedData: encryptedData,

iv: iv

},

method: 'GET',

success: function (res) {

that.setData({

nickName: res.data.nickName,

avatarUrl: res.data.avatarUrl

})

}

})

}

})

}

})

}

})

}

})

}

})

},

fail: function () {

console.log("登陆已过期")

}

})

},

})

my.wxml

{{nickName}}

getsession.php

$appid='你的appid';

$secret='你的secret';

$grant_type='authorization_code';

$jscode=$_GET['jcode'];

$url="https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$jscode&grant_type=$grant_type";

$fh= file_get_contents($url);

$array=json_decode($fh,true);

$openid=isset($array['openid'])?$array['openid']:$array['errcode'];

$session_key=$array['session_key'];

$expires_in=$array['expires_in'];

$sessionid= md5(uniqid(mt_rand()));

$response["result"] = 1;

$response["msg"] = "返回sessionid";

$response["sessionid"] = $sessionid;

echo json_encode($response);

$redis = new Redis();

$redis->connect('127.0.0.1', 6379);

$redis->set($sessionid,$openid.';'.$session_key, 7200);

?>

getuserinfo.php

include_once "wxBizDataCrypt.php";  //(wxBizDataCrypt.php下载微信小程序解密demo php版本即可获得)

$appid='你的appid';

$secret='你的secret';

$sessionid=$_GET['sessionid'];

$encryptedData=$_GET['encryptedData'];

$iv=$_GET['iv'];

$redis = new Redis();

$redis->connect('127.0.0.1', 6379);

$value=$redis->get($sessionid);

$arraylist=split(";",$value);

$openid=$arraylist[0];

$session_key=$arraylist[1];

$pc = new WXBizDataCrypt($appid, $session_key);

$errCode = $pc->decryptData($encryptedData, $iv, $data );

if ($errCode == 0) {

print($data . "\n");

} else {

print($errCode . "\n"); //解密失败的话返回码均为负数,在微信小程序客户端my.js要用到

}

?>

以上内容如有不明白的,可以添加1688源码 微信公众号,给我们留言,还可获取源码哦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 是一个用于构建企业级应用程序的开源框架,它简化了Java开发过程。JWT(JSON Web Token)是一种用于身份验证和授权的开放标准,它基于JSON格式并使用了JWT令牌来安全地传输用户声明信息。Redis 是一个开源的高性能内存数据库,它提供了快速的数据访问和存储功能。微信小程序是一种由微信官方提供的移动应用开发框架,它能够帮助开发者快速搭建小程序应用。 结合这三个技术,可以实现一个安全、高性能的微信小程序后端开发。具体的实现方式可以是使用Spring Boot作为后端框架,通过集成JWT来实现身份认证和授权的功能。当用户登录时,后端可以生成一个JWT令牌并返回给前端,在后续的请求中,前端会将该令牌携带在请求头中。后端可以通过验证JWT令牌来验证用户的身份和权限。 另外,可以使用Redis作为身份认证令牌的存储介质。当用户登录时,将JWT令牌存储到Redis中,并设置过期时间。在后续的请求中,后端可以通过查询Redis来验证JWT令牌的有效性,从而实现快速的身份认证。 总结来说,通过使用Spring Boot、JWT和Redis,可以构建一个安全、高性能的微信小程序后端。Spring Boot提供了强大的开发框架,JWT提供了身份认证和授权的功能,而Redis提供了快速的令牌存储和验证功能。这样的组合将能够为微信小程序用户提供安全、高效的服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值