基于会话原理解决微信小程序登录问题

微信小程序开发


浏览:1205 次

对于熟悉会话原理的人来说,我们都知道,我们将在浏览器端存储sessionId作为凭据,并获取浏览器和服务器端服务器之间关于此会话的所有信息。该信息存储在服务器端的存储空间中,可用于判断浏览器端的登录状态,因为它由服务器端控制,是安全的。

浏览器使用什么来存储sessionId?浏览器如何将sessionId返回给服务器?

通常有两种方法:

1.使用浏览器端实现的cookie功能,每次浏览器都会将从服务器发送的cookie内容键值对放入浏览器的缓存,然后下次请求同一服务器时,cookie内容将被取出并发送回服务器,当然,cookie中存储有sessionId。

2.使用URL重写方法。URL地址重写是不支持cookie的客户端的解决方案。URL地址重写的原理是将用户会话的ID信息重写为URL地址。服务器可以解析重写的URL以获得会话的ID。这样,即使客户端不支持cookie,会话也可以用来记录用户状态。

我不会考虑第二种方法,即使用URL重写,除非我必须这样做。

事实上,实际应用场景无非是以下两种。让我们以患者就诊为例来解释:

首先,医生看病人。每天有数百名患者。不可能清楚地记住所有患者的病情,因此需要病历本。当患者下次来就诊时,医生可以根据患者病历簿中记录的信息来了解患者的病情。(这种情况对应于浏览器仅使用cookie与服务器交互的情况。)

第二,有一些特殊患者是吸毒者,正在接受戒毒辅助治疗。他们需要每月去医院获取少量类似药物的药物,以逐步减少药物摄入;医院还给了他一本病历本,但由于使用药物的特殊性,为了防止一些罪犯伪造病历获取非法药物,他们使用GUID算法为每个病历本生成了唯一的病历编号。这里还有一本给医生的书,记录了所有特殊患者的病历编号。当患者下次来获取非法药物时,医生需要检查患者的病历号,以查看是否有患者以及他需要接收的药物的具体数量。通过这种方式,可以防止非法人员冒名顶替,防止患者恶意改变他们收到的药物数量。(这种情况对应于通过sessionId查询浏览器和服务器之间的会话信息的情况。病历簿中的病历号与sessionId等效。)

上面写了很多关于本次会议原则的信息,为以下主题做准备。因此,仍然不了解课程原则的学生可以四处寻找一些关于课程的文章来学习,然后回来阅读。

以下是主要主题:

在开发微信小程序的过程中,需要实现小程序登录功能。由于小程序和服务器之间的大多数交互都使用HTTP通信,因此完全可以复制以前的B/S登录系统,使用上面提到的sessionId方法在服务器端存储登录状态,并判断是否登录。与之前的服务器/浏览器开发模式相比,服务器/微信小程序开发模式有一点需要初级开发人员注意:微信小app不会将HTTP头中的COOKIE信息存储到缓存中,自然不会将COOKIE内容发送回服务器。简而言之,微信小程序无法帮助您实现cookie机制。

因此,如果你想当然地认为微信小程序在背后实现了cookie机制,你就会像我一样踏入一个大洞。

以下是我踩坑的经历。我从坑里了解到:

服务器端的程序(.net MVC的Action方法程序)

public ActionResult SessionTest()

{

会话[“TestValue”]=1;

return Json(new{message=“this is a test response”});

}

使用微信小程序的原生请求方法编写的请求者

sendRequest:函数(){

wx.请求({

url:'http://localhost:51112/Test/SessionTest ',

方法:'POST',

成功:函数(res){

安慰log(“请求