微信小程序设置cookie
微信对wx.request这个API做了修改,小程序发起的请求并不是直接请求我们的后台服务器,而是先通过微信的服务器再发送到我们的后台服务器,既然请求都是要通过微信的服务器发送到我们的服务器,那么我们的服务器也就无从识别请求的发起者了。因此,cookie在微信小程序的后台开发中是无法使用的
因为小程序不支持cookie,所以不能直接使用后台语言的session,那么解决这种情况的办法有两种:
1. 在登录请求后读取 返回值的, header的cookie,并本地存储
//登录请求回来之后,读取res的header的cookie
//cookie是个唯一标识
wx.setStorageSync("cookie", res.header["Set-Cookie"])
在下一次请求的时候设置header,并写入cookie
//创建header
var header;
header = {
'content-type': 'application/json',
'cookie':wx.getStorageSync("cookie")//读取cookie
};
//进行请求,一般外层都有一个封装,然后放在公共类里边
wx.request({
url: URL,
method: method,
header: header,//传在请求的header里
data: datas,
success(res) {
//请求成功的处理
}
)}
2. 使用第三方库weapp-cookie
这个库可以为你的小程序实现 Cookie 机制,以保证基于 cookie 的服务会话不会失效,与 web 端共用会话机制
-
Install
npm install weapp-cookie --save # 将 npm 包复制到 vendor 文件夹,避免小程序可能不能找到文件(tips:使用 wepy/mpvue 等框架无需此步) cp -rf ./node_modules/ ./vendor/
-
Usage
// app.js import './vendor/weapp-cookie/index' // tips: 使用 wepy/mpvue 可以直接在入口 js 引入 weapp-cookie 模块 // import 'weapp-cookie' App({ onLaunch: function () { } // ... })
原来的 wx.request 调用方式保持不变,引入后 weapp-cookie 会在底层自动代理 wx.request 的接口访问,以支持 cookie 存储和发送
// pages/index/index.js Page({ onLoad: function () { wx.request({ url: 'https://example.com/login', data: { username: 'admin', password: '123456' }, success: function (res) { /* * 接口调用成功后 weapp-cookie 会自动保存后端发送的所有Cookie(比如:SessionID) * 并在后续的所有请求中带上,以保证基于 cookie 的服务器会话机制不会失效, * 实现与 web 端共用会话机制(无需再手动维护 3rd_session_key) */ } }) } })