支付宝小程序 Session会话保持

支付宝小程序 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的内容变化进行判断和处理

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

posted @ 2022-09-29 15:09  STR少寒  阅读(572)  评论(0编辑  收藏  举报