1. 什么是小程序 cookie
小程序 cookie是指小程序在用户登录授权后展开的调用第三方接口的过程中,维持持续授权的一种方式。cookie会在每次调用接口时带上,以表明用户是合法授权的状态,不需要每次都授权。
1.1 小程序 cookie 与普通网站 cookie 的区别
小程序 cookie 的作用与普通网站 cookie 类似,都是为了记录用户登录状态。但是二者的实现方式有所不同。
普通网站 cookie:
通过浏览器缓存或者硬盘文件记录,保存在用户的设备上。这样做的好处在于,用户不登录或者过期了也不影响其他用户的登录状态。但同时,这也意味着 cookie 有被其他人拦截和盗用的风险。
小程序 cookie:
是通过微信服务器维护的,将用户授权的状态保存在了微信的服务器上。在小程序发送请求时,会带上微信服务器返回的凭证(access_token)和传入 AppID&AppSecret ,微信会验证AppID&AppSecret的合法性并返回维持持续授权的凭证(即 access_token),这个凭证就是小程序 cookie。这种实现方式比存储在用户设备上更加安全,但也意味着小程序 cookie 会受到微信官方服务器的限制,如有效时间等等。
const url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='+APPID+'&secret='+SECRET
wx.request({
url: url,
success (res) {
console.log(res.data)
wx.request({
url: 'https://api.weixin.qq.com/cgi-bin/user/info?access_token=' + res.data.access_token +'&openid=' + OPENID,
success(res) {
console.log(res.data)
}
})
}
})
2.如何获取小程序的 cookie
获取小程序的 cookie,需要通过微信服务器验证身份后获取 access_token ,进而作为 cookies 进行调用
2.1获取 access_token
方法1:可以通过向微信服务器请求获取 access_token 的 API 接口来进行获取。以下演示代码:
let appId = 'xxxx' // 你的小程序的 appid
let appSecret = 'xxxx' // 你的小程序的 app od 的 appSecret
// 请求access_token
wx.request({
url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + appId + '&secret=' + appSecret,
success: res => {
// 小程序的 access_token
let access_token = res.data.access_token
// TODO: 进行你想要进行的操作
}
})
方法2:在小程序端使用 wx.login() 接口获取 Code,然后通过 Code 和 appid/appsecret 向微信服务器获取用户的 session_key 和 openid,进而进行接口调用。
wx.login({
success: res => {
let code = res.code
if (res.code) {
// 获取用户的openid以及session_key
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session',
data: {
appid: 'xxxx',
secret: 'xxxx',
js_code: res.code,
grant_type: 'authorization_code'
},
success: res => {
let openid = res.data.openid
// 小程序的 session_key,可作为 token 使用
let session_key = res.data.session_key
}
})
}
}
})
2.2 将 access_token 作为 cookie 进行调用
获取到 access_token 后,便可将其作为 cookie 进行小程序的接口调用。比如,获取用户基本信息,以及接口示例如下:
let appId = 'xxxx' // 你的小程序的 appid
let appSecret = 'xxxx' // 你的小程序的 app od 的 appSecret
let access_token = '' // 小程序的 access_token,由微信服务器返回的,作为 cookies 进行接口调用
wx.request({
url: 'https://api.weixin.qq.com/cgi-bin/user/info?access_token=' + access_token + '&openid='+openid+'&lang=zh_CN',
success: res => {
console.log(res.data)
},
fail: res => {
console.log(res)
}
})
3. 总结
本文介绍了小程序 cookie 的概念、其与普通网站 cookie 的区别以及如何获取并使用小程序的 cookie。小程序 cookie 会在用户授权后维持其持续授权的状态,与存储在用户设备上的 cookie 的实现方式不同。获取小程序 cookie 需要通过微信服务器进行验证,获取 access_token 后将其作为 cookie 进行小程序的接口调用。