微信小程序支持 cookie的代码实现

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 进行小程序的接口调用。