微信小程序cookies和session会话

本文探讨了在微信小程序中实现登录系统的业务需求,通过获取并使用cookies配合服务器端的session来处理已注册和未注册用户的访问。文章指出当前关于此话题的文档不足,并分享了小程序端获取并使用cookies进行登录请求,以及Python Django服务器端session管理的代码示例。

微信小程序cookies和session会话的使用

微信小程序cookies和session会话

最近由于业务需要在开发微信小程序,查阅帮助文档及社区,发现相关内容十分匮乏甚至官方的回复都模棱两可。
现存登录系统业务需求:当用户为已注册用户,则直接进入相关页面;若用户为未注册用户,则进入注册页面进行注册引导。

微信小程序端 开发者服务器 微信接口服务 wx.request()发送code 登录凭证校验接口 openid. 查找数据库中是否存 在此openid, 若存在返回相应用户 标志;若不存在,将 此openid保存 在session中。 返回用户信息或未注册标志符 若未注册,提交注册信息 读取session中已存的openid信息 微信小程序端 开发者服务器 微信接口服务

相关代码

小程序端登录代码

 wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId,serverIP为开发者服务器IP
        console.log('wx code:' + res.code)
        wx.request({
          url: serverIP + '/get_login_code/',
          data: { code:res.code },
          header: { "Content-type": "application/json" },
          method: 'POST',
          success: function (res) {
            console.log(res)
            //在接收到返回数据中 会有cookies,保存。再下次发送数据时,头部添加cookie,
            wx.setStorageSync('token', res.cookies[0])
          },
          fail: function (res) {},
          complete: function (res) {},
        })
        
      }
    })

在接收到返回数据中 会有cookies,保存。再下次发送数据时,头部添加cookie

//value.user_email等为注册信息,注意头部要加入上方保存的cookie
 wx.request({
      url: serverIP + '/regist_fromWX?user_email=' + value.user_email + '&user_name=' + value.user_name + '&user_telephone=' + value.user_telephone + '&user_type=' + value.user_type,
      header: {
        "Content-type": "application/json",
        'cookie': wx.getStorageSync("token")
      },
      success(res) {
        console.log(res)
      }
    })

服务器端用session来设置与读取,python代码

#接收登录信息函数
def get_login_code(request):
    print(request.session.keys())
    if request.method == "POST":
        print(request.body)
        pull_info = json.loads(request.body)
        code = pull_info['code']
        url = 'https://api.weixin.qq.com/sns/jscode2session'
        params = {'appid': 'xxxxxxxx', 'secret': 'xxxxxxx', 'js_code': code,
                  'grant_type': 'authorization_code'}
        result = get_method_request(url, params)
        print(result)
        result = json.loads(result)
        user_type = ''
        try:
            #查找是否在表TestTable中
            user_info = TestTable.objects.get(openid=result['openid'])
            user_type = 'engineer'
        except BaseException as e:
            print(e)
            print('no in Test table. ')
        # 此处为cookies session写法,默认session数据库进行存储
        if user_type != '':
            _response = {'code':200,'user_type':user_type,'userInfoID':user_info.id}
            return HttpResponse(json.dumps(_response))
        else:
            request.session['openid'] = result['openid']
            request.session['session_key'] = result['session_key']
            return HttpResponse('{"code":403}')


def get_method_request(url, params):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36",
    }
    response = requests.get(url=url, params=params, headers=headers).text
    print(response)
    return response


def regist_fromWX(request):
    if request.method == "GET":
        user_name = request.GET['user_name']
        user_email = request.GET['user_email']
        user_telephone = request.GET['user_telephone']
        user_type = request.GET['user_type']
        user_nickname = request.GET['user_nickname']
        print(user_name, user_email, user_telephone, user_type, user_nickname)
        print(request.session['openid'], request.session['session_key'])
        try:
            try:
                #查找临时注册表值是否已存储此openid
                aa = Regist_admin.objects.filter(openid=request.session['openid'])
                print(aa[0].name)
                print('repeat')
                return HttpResponse('repeat')
            except:
                # 若临时注册表中无此openid,则保存此人进入临时注册表
                Regist_admin(nickname=user_nickname, name=user_name, openid=request.session['openid'],
                                        email=user_email,
                                        telephone=user_telephone, types=user_type).save()
                return HttpResponse('success')
        except:
            return HttpResponse('fail')


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值