微信小程序本身是不支持cookie机制的,session依赖cookie(session_id 是存储在cookie中的),所以也就不支持session。
即是在php 中 $_SESSION
和 $_COOKIE
是不会在微信小程序中起作用的。
java 中的session对象同样不会起作用
那么我们怎么去实现小程序的模拟cookie呢
我们都知道cookie和session的本质作用就是将数据保存起来。只是一个是将数据保存在客户端,一个是将数据保存到服务器。
使用微信小程序模拟cookie
首先先解释下javascript异步和同步的概念 以下要用。
异步:程序运行到这里时不会等待该处理结果(即是不会停留),会继续执行下面的逻辑程序。
同步:程序运行到这里时会等待处理结果返回,然后执行下面的逻辑程序。
1、数据存储
a、异步存储数据
wx.setStorage(OBJECT)
OBJECT参数说明(object 是一个json对象):
key String 是 本地缓存中的指定的 key
data Object/String 是 需要存储的内容
success Function 否 接口调用成功的回调函数
fail Function 否 接口调用失败的回调函数
complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)
b、同步存储数据
wx.setStorageSync(KEY,DATA)
将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。
key String 是 本地缓存中的指定的 key
data Object/String 是 需要存储的内容
可以根据你的需要进行业务的数据存储;
2、获取存储的数据
a、异步获取数据
从本地缓存中异步获取指定 key 对应的内容。
wx.getStorage(OBJECT)
OBJECT json对象:
key String 是 本地缓存中的指定的 key
success Function 是 接口调用的回调函数,res = {data: key对应的内容}
fail Function 否 接口调用失败的回调函数
complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)
b、同步获取数据
从本地缓存中同步获取指定 key 对应的内容。
wx.getStorageSync(KEY)
key String 是 本地缓存中的指定的 key
3、清空数据和清楚指定数据
a、同步清理本地数据缓存
wx.clearStorageSync()
b、清理本地所有数据缓存。
wx.clearStorage()
c、从本地缓存中同步移除指定 key 。
wx.removeStorageSync(KEY)
key String 是 本地缓存中的指定的 key 也就是存储的键名
d、从本地缓存中异步移除指定 key 。
wx.removeStorage(OBJECT)
Object json对象
key String 是 本地缓存中的指定的 key
success Function 是 接口调用的回调函数
fail Function 否 接口调用失败的回调函数
complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)
然后我们就来模拟了。
1、cookie : 针对需要实现cookie的数据,我们用本地缓存实现的时候可以在将数据存入的同时,在存入一个时间。当然这个时间是从后台生成前端获取的(这个时间其实是指该cookie数据的有效到期时间)。
然后我们每次从本地缓存中将数据取出来之前将时间拿出来验证,如果没有过期就返回,过期了就重新请求后台生成新的cookie返回对应数据。
所以cookie实现相对简单。
2、session : session 的数据是存储在服务器的,在客户端只有该session的session_id。所以基于cookie的实现,我们可以采用模拟cookie方法,将session_id存储在本地缓存中。然后每次客户端和服务器进行交互的时候客户端都先验证是否在本地存储了session_id,且验证session_id是否有效(cookie实现),如果存在且有效,就将session_id一同发送给服务器,服务器收到后,通过get、post等形式获取到session_id 然后带入相应的数据表查找相应的数据。从而模拟实现session机制。
session 实现依赖步骤cookie的实现。
学海无涯,大道至简。