小程序 session 丢失问题记录

本文分析了在提交表单时由于每次请求创建新会话导致Session失效的问题。解决方案是确保两次请求属于同一次会话。通过检查RequestHeaders中的Cookie是否存在以及ResponseHeaders中的Set-Cookie来判断。对于小程序,可以通过设置wx.request的header来传递和更新session_id。
摘要由CSDN通过智能技术生成

场景一:通过接口获取短信验证码,提交表单时进行检查验证码是否正确,这时候发现session失效。

分析:上面发生了两次请求,可以发现每一次,响应头都有Set-Cookie,这也就说明了每一次都是创建一个新的会话,所以导致了session丢失的问题。

解决方案:只要保证这两次请求是同一次会话即可

如何区分请求是不是同一次会话,检查Request Headers 和 Response Headers,如果Request Header中的cookie为空,说明是已继承了上一次的请求的同一个会话;如果Response Headers中有Set-Cookie那么说明本次会话是一次新的会话请求。

Response Headers

HTTP/1.1 200 OK
Server: nginx/1.15.11
Date: Tue, 14 Dec 2021 06:44:36 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/7.2.9
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
for-weapp-devtools: {"Server":["nginx/1.15.11"],"Date":["Tue, 14 Dec 2021 06:44:36 GMT"],"Content-Type":["text/html; charset=utf-8"],"Transfer-Encoding":["chunked"],"Connection":["keep-alive"],"X-Powered-By":["PHP/7.2.9"],"Expires":["Thu, 19 Nov 1981 08:52:00 GMT"],"Cache-Control":["no-store, no-cache, must-revalidate"],"Pragma":["no-cache"]}

Request Headers
Accept: */*
Accept-Encoding: gzip, deflate
aud: https://www.mainweb.cc
Connection: keep-alive
content-type: application/json
cookie:
Host: 10.0.0.33
Referer: https://servicewechat.com/wxc48fd9f1e0de18a7/devtools/page-frame.html
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1 wechatdevtools/1.05.2111051 MicroMessenger/8.0.5 Language/zh_CN webview/

  小程序解决方案:

wx.request(
 {
     url,
     method, 
     data,
     header: {cookie:wx.getStorageSync('session_id')},
     success(res) {
        if(res.header['Set-Cookie']){
              wx.setStorageSync('session_id', res.header['Set-Cookie']);
           }  
        },
     fail(err) {}
 })

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值