首页 > 编程语言 >支付宝小程序 Session会话保持

支付宝小程序 Session会话保持

时间:2022-09-29 15:25:50浏览次数:48  
标签:支付宝 请求 程序 会话 sessionid Session cookie 服务端

支付宝小程序 Session会话保持

官方给出的答案:小程序不支持使用 cookie,不支持 session。推荐使用小程序缓存。

image-20220929135706923

但是在my.request 的常见问题中有发现如下question

A:小程序针对服务端回设的 cookie 不会禁用掉,会设置到小程序进程中,下次小程序进行请求会自动将已有的 cookie 带入到服务端请求中。前端获取不到 cookie,也不会对 cookie 做任何操作。

image-20220929135916444

对于这句话:小程序针对服务端回设的 cookie 不会禁用掉,会设置到小程序进程中,下次小程序进行请求会自动将已有的 cookie 带入到服务端请求中。前端获取不到 cookie,也不会对 cookie 做任何操作。

其实和微信小程序是有区别的,微信小程序如果想要和后台以session的方式来保持会话的连接,必须在每次请求的请求头中自己设置cookie(内容主要是sessionid),服务端识别有效的sessionid会继续保持会话

而支付宝小程序相当于是直接处理了这一过程

通常在第一次与后台服务端建立连接时,服务端会response的cookie中返回一个会话的sessionid来标识一次会话连接

而小程序的my.request的请求线程在接收到请求的结果后会检测请求返回的cookie中是否有值(猜测还会判断如果有值是否和之前的一致,改成新的,测试过程中发现的),如果有则会保存到进程的某个位置去,在之后的请求中会带着这个cookie进行请求,这样也就和后端保持住了会话连接

测试的过程

第一次请求

第一次请求中,请求头中是没有sessionid保持在cookie中的

第一次请求,响应头中会设置本次会话的sessionid在cookie中

image-20220929143422882

  • 支付宝小程序前台打印请求结果

image-20220929143610611

第一次请求之后的后续请求

请求头中会带有cookie,里面保存了会话的sessionid,这个有my.requset的请求线程处理

有效的会话id,响应头中不会再返回一个sessionid在cookie中返回

image-20220929144033573

  • 支付宝小程序前台打印请求结果

image-20220929144143931

改变会话的sessionid进行测试

image-20220929144642014

  • 支付宝小程序前台打印

image-20220929144824970

服务端sessionid发送变化后的第一次请求

image-20220929145232667

image-20220929145320291

测试代码

            var mm = Request;
            string reqCookid = "";//请求中的cookie
            if (Request.Cookies.Count > 0)
            {
                reqCookid = Request.Cookies[0].Value;
            }
            var nowSessionId = Session.SessionID; //当前Sessionid
            //Response.Headers.Add("session", $"ASP.NET_SessionId={nowSessionId}");
            //HttpCookie httpCookie = new HttpCookie("ASP.NET_SessionId");
            //httpCookie.Value = nowSessionId + "1";//"ypix4tmwknv1bp2xcojyrt5h";
            //Response.Cookies.Add(httpCookie);

            var ii = Response;
            string resCookid = "";//响应中的cookie
            if (Response.Cookies.Count > 0)
            {
                resCookid = Response.Cookies[0].Value;
            }

结论

小程序针对服务端回设的 cookie 不会禁用掉,会设置到小程序进程中,下次小程序进行请求会自动将已有的 cookie 带入到服务端请求中。前端获取不到 cookie,也不会对 cookie 做任何操作。

相当于:支付宝小程序当服务端设置cookie后,自己帮你设置了一个cookie在线程中

如果有用过axios可以发现,支付宝小程序前台相当于交了请求和响应的过滤类在里面

在请求过滤类中,添加服务端设置的cookie

在响应过滤类中,对cookie进行过滤并对cookie的内容变化进行判断和处理

以上为猜测,不过这个想法可以应用到一些其他的项目处理里面去

标签:支付宝,请求,程序,会话,sessionid,Session,cookie,服务端
From: https://www.cnblogs.com/STRSong/p/16741662.html

相关文章

  • 通过sessionStorage来根据屏幕宽度变化来跳转不同的html页面
    因为开发的需要,PC端口和移动端要分开两个使用,在不使用框架的情况下如何通过判定屏幕的大小将页面进行跳转?通过搜索查询到如下方法,现将作者的方法转载: 因为项目需要,分别......
  • Flask学习笔记(七)-Flask之Cookie和Session
    一、前言概述为什么要说Cookie和Session呢?答:因为http请求是无状态的,怎么理解呢?当你访问博客园站时,如果你没有Cookie或者Session,博客园就认为你是一个没有登录的用户。如果......
  • session和cookie的区别
    一·概念理解首先呢,要了解session和cookie的区别先要了解以下几个概念:1、无状态的HTTP协议:协议,是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则......
  • localStorage和sessionStorage的区别和使用方法。
    一、localStorage和sessionStorage的相同点它们的储存大小都是5M;它们都用于存储客户端数据;它们都只能存储字符串数据;二、localStorage和sessionStorage的区别1.是否......
  • 使用Spring boot基于Redis快速搭建分布式Session缓存方案
    使用Springboot基于Redis快速搭建分布式Session缓存方案大型web应用中,session的管理非常重要,这是单机存储满足不了的.通常有以下几种方法:将session持久化到数据库中.但......
  • 10.cookie&session
    ......
  • javaweb核心之会话技术
    1会话技术1.1会话管理概述1.1.1什么是会话这里的会话,指的是web开发中的一次通话过程,当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束。举......
  • Spring MVC框架:第四章:属性域使用(request域、session域、application域)
    第六节属性域使用(request域、session域、application域)1.request域在SpringMVC中,当我们想把一个对象存入请求域有很多种操作方式,用哪一个都可以。①使用Model对象@R......
  • 啥是Session?
    什么是Session会话?1、Session就一个接口(HttpSession)。2、Session就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。3、每个客户端都有自己的一个Ses......
  • Envoy 有状态会话保持机制设计与实现
    Envoy有状态会话保持机制设计与实现1问题背景会话保持是七层负载均衡的核心功能之一。对于同一会话的请求或者连接,通过会话保持机制,负载均衡软件会将其路由到同一个后......