【Python】微信小程序 session_key 的作用是什么

【Python】微信小程序 session_key 的作用是什么

文档上说是对用户数据的加密签名的密钥,,是不是就是对encryptedData解密用的,,也仅此而已,没有其他作用吧!

如果后台并不需要解密encryptedData呢,因为openid和unionid都已经拿到了,其他的资料信息不需要。

那么,wx.checksession岂不是都用不上了,因为wx.checksession就是检查session_key是否过期的。

回答

A.session_key 有两个作用:

  1. 校验用户信息(wx.getUserInfo(OBJECT)返回的signature);

  2. 解密(wx.getUserInfo(OBJECT)返回的encryptedData);

B.按照官方的说法,wx.checksession是用来检查 wx.login(OBJECT) 的时效性,判断登录是否过期;

疑惑的是(openid,unionid )都是用户唯一标识,不会因为wx.login(OBJECT)的过期而改变,所以要是没有使用wx.getUserInfo(OBJECT)获得的用户信息,确实没必要使用wx.checksession()来检查wx.login(OBJECT) 是否过期;

如果使用了wx.getUserInfo(OBJECT)获得的用户信息,还是有必要使用wx.checksession()来检查wx.login(OBJECT) 是否过期的,因为用户有可能修改了头像、昵称、城市,省份等信息,可以通过检查wx.login(OBJECT) 是否过期来更新着些信息;

用来解密$encryptData,如果你需要在后端获取userinfo的话。
当然如果你打算从前端丢userinfo到后端或者根本不需要userinfo只是需要openid的话,应该是没有什么用的

    public static function login($code, $encryptData, $iv) {

// 1. 获取 session key

$sessionKey = self::getSessionKey($code);

// 2. 生成 3rd key (skey)

$skey = sha1($sessionKey . mt_rand());

/**

* 3. 解密数据

* 由于官方的解密方法不兼容 PHP 7.1+ 的版本

* 这里弃用微信官方的解密方法

* 采用推荐的 openssl_decrypt 方法(支持 >= 5.3.0 的 PHP)

* @see http://php.net/manual/zh/function.openssl-decrypt.php

*/

$decryptData = \openssl_decrypt(

base64_decode($encryptData),

'AES-128-CBC',

base64_decode($sessionKey),

OPENSSL_RAW_DATA,

base64_decode($iv)

);

$userinfo = json_decode($decryptData);

// 4. 储存到数据库中

User::storeUserInfo($userinfo, $skey, $sessionKey);

return [

'loginState' => Constants::S_AUTH,

'userinfo' => compact('userinfo', 'skey')

];

}

以上是 【Python】微信小程序 session_key 的作用是什么 的全部内容, 来源链接: utcz.com/a/78414.html

回到顶部