![微信小程序开发-服务端session值取不到;小程序res.header['Set-Cookie']隐藏的坑,第1张 微信小程序开发-服务端session值取不到;小程序res.header['Set-Cookie']隐藏的坑,第1张](/aiimages/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91-%E6%9C%8D%E5%8A%A1%E7%AB%AFsession%E5%80%BC%E5%8F%96%E4%B8%8D%E5%88%B0%EF%BC%9B%E5%B0%8F%E7%A8%8B%E5%BA%8Fres.header%5B%26%23039%3BSet-Cookie%26%23039%3B%5D%E9%9A%90%E8%97%8F%E7%9A%84%E5%9D%91.png)
根源:微信小程序不能保存Cookie,导致每次wx.request到服务端都会创建一个新的会话,从而当前会话不再是之前存验证码的那个会话,自然也就取不到session值了。
解决方法:(由于本人很懒,直接参考、引用大神的文章,文末有原文链接,原文板块比较好看一点。我这里重点在于记录微信小程序的另一个坑。)
普通的Web开发,都是把sessionid保存在cookie中传递的。
不管是java还是php,服务端的会在response的header中加上Set-Cookie
例如:
浏览器的请求也会在header中加上
例如:
通过这个sessionid就能使浏览器端和服务端保持会话,使浏览器端保持登录状态。但是,微信小程序不能保存Cookie,导致每次wx.request到服务端都会创建一个新的会话,小程序端就不能保持登录状态了。
一个比较简单的办法就是在小程序端把cookie保存到storage里,后续请求的时候再读storage,把cookie添加到请求头里,这样做的好处就是,服务端不用做任何改动
具体 *** 作如下:
1.把服务端response的Set-Cookie中的值保存到Storage中
2.wx.request再从Storage中取出Cookie,封装到header中
我在这里还遇到了另外一个问题,当服务器响应多个Set-Cookie时,小程序通过wx.request 回调取res.header['Set-Cookie']所取到的Set-Cookie值是把它们用逗号拼接在一起,从而产生的错误的Cookie,这样请求后台的时候还是取不到相应的session。而真正需要的是用分号拼接多个Set-Cookie值。例如:
服务器响应:
小程序通过res.header['Set-Cookie']取到的Set-Cookie值却是:
而真正正确的值应该是smallapp与session_name之间用分号隔开而不是逗号:
但坑终究是坑,寄人篱下,有坑也只得我们自己填。
填坑方法:在步骤2中的if判断中,自己重新拆分Storage中取出的Cookie,整理成后端需要的规范的cookie。再赋值给header.Cookie。
这个问题暂时没找到其他解决方案,也请知道的朋友指点一下。
原文引用: 微信小程序开发-保存服务端sessionid的方法
链接:https://www.jianshu.com/p/5c928e0df024【点击了解更多加盟项目】
为了保护用户数据安全,微信小程序在上线之初就强制要求小程序服务端必须使用HTTPS加密协议,通过HTTPS请求进行网络通信,不满足条件的域名和协议无法请求。HTTPS传输协议在HTTP的基础上加入了SSL/TLS协议,SSL/TLS协议具有身份验证、数据传输加密和数据完整性校验的功能。通过SSL/TLS协议建立HTTPS加密连接,对服务器与终端、服务器与服务器之间的传输数据进行加密,保护数据的机密性并验证数据的完整性;依靠SSL证书来验证服务器真实身份,确保数据传输到正确的通信方,防止虚假服务器钓鱼攻击,有效防止中间人攻击、流量劫持、数据篡改、钓鱼网站仿冒等安全问题。
微信小程序与第三方服务器通讯的域名必须满足以下条件:
1、一个已备案的域名,域名不能加端口
2、域名必须配置SSL证书,也就是能通过https://访问
3、HTTPS服务器必须支持TLS 1.2或以上版本
4、微信小程序后台加上合法域名设置。
以上条件全部满足,小程序才能正常通讯,为满足更广泛的兼容性,建议按最高要求配置HTTPS加密。
选定证书类型
HTTPS证书即SSL证书,是HTTP明文协议升级HTTPS加密协议必备的数字证书。为客户端(浏览器)与服务端(网站服务器)之间搭建一条安全的加密通道,对两者之间交换的信息进行加密。
SSL证书分为:EV SSL证书、OV SSL证书以及DV SSL证书三种类型,以及部分证书支持通配符和多域名的功能。开发者可根据自身情况选择不同类型的证书。
DV SSL证书(域名验证型):只验证域名所有适合个人网站、博客等站点使用;
OV SSL证书(企业验证型):验证网站所属单位身份,适合于中旬性企业级用户使用;
EV SSL证书(扩展验证型):扩展验证网站所属单位身份,适合高度信任的企业级用户使用。如金融行业的银行,电子商务平台。
是的,必须采取HTTPS协议。
具体步骤:
将确定需要HTTPS的域名准备好。
进入淘宝里面找到:Gworg,并且按照要求完成SSL证书认证。
获得SSL证书后配置到服务器就可以HTTPS请求,具体配置要让Gworg提供技术文档。
微信小程序对服务器要求满足:TLSv 1.2 协议、PFS(完全正向保密)ECDHE。
配置主要准备:服务器、SSL证书。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)