Sessio_Key

Session_Key

小程序用户身份的唯一性基于openid判断,多平台情况下使用unionid(也是唯一的)

openid——每个用户在某个微信公众号的账户(唯一的)

那么如果同一个公司有多个公众号,他希望多个公众号之间用户的账号可以通用,于是,微信提供一种打通机制,就是使用同一个账户可以登录多个公众号,就是unionid

官方说明

如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。

获得了开放平台认证的企业,可以绑定10个手机应用、10个网站、10个公众号,他们对应的用户信息也可以互联互通。

注意:

对于开发团队而言,在接入微信登录之初,往往会忽视用户的UnionID,
只记录了openid。
这会导致后期账号打通时候,需要用户重新授权

在实际应用中使用到sessionKey的场景的并不多,比如获取用户的openid或者unionid,具体方法如下

 wx.login({
    success: function(res) {
    console.log(res.code)    //这就是code  
 });

开发者需要将 code 发送到开发者服务器后台,使用code 换取 session_key api,将 code 换成 openid 和 session_key .,不在网络传输,建立自己的SesstionID和生成的SessionKey的对应关系。然后把生成的SessionID传输到小程序客户端,在小程序本地缓存。

获取手机号需要用到有效 的SessionKey,SessionKey有个过期时间,要注意的问题就是解密用的SessionKey和与加密用的SessionKey是不是同一个,有的时候可能会出现有时候能解密,有时候不行。

小程序提供wx.checkSession()来检查SessionKey有没有过期,如果已经过期,就重新wx.login()

### session_key 的作用 在 Flask 中,`session_key` 主要用于标识用户的会话信息。当用户访问应用时,服务器会在客户端浏览器中设置一个带有唯一标识符的 cookie。这个标识符就是 `session_key`,它指向存储在服务器端的会话数据结构。通过这种方式,即使 HTTP 协议本身是无状态的,也可以实现有状态的应用程序行为。 其工作原理如下: - 用户首次访问网站时,服务器创建一个新的会话并生成唯一的 `session_key`。 - 此键作为值保存在一个名为 `session` 的 cookie 中返回给客户端。 - 随后的每次请求都会携带此 cookie,使得服务器能够识别特定用户的连续活动[^1]。 ### 常见问题及解决方案 #### 1. 安装依赖失败 对于新手来说,在安装过程中可能会遇到缺少必要的库文件等问题。确保已经正确安装了所有必需的包,特别是 `itsdangerous` 库,这是用来加密/解密会话数据的关键组件之一。可以尝试使用 pip 工具来更新或重新安装这些依赖项: ```bash pip install --upgrade flask-session itsdangerous ``` #### 2. 跨域资源共享 (CORS) 如果应用程序部署在不同的域名下,则需要考虑如何处理跨源资源分享(Cross-Origin Resource Sharing, CORS)的情况。默认情况下,由于同源策略限制,来自不同来源的页面无法读取另一个站点上的响应头字段。为了使前后端分离架构下的 API 请求正常运作,可以在 Nginx 或其他反向代理配置中启用 CORS 支持[^5]: ```nginx location /api { add_header 'Access-Control-Allow-Origin' '*'; ... } ``` 另外一种方式是在 Flask 应用内部集成专门针对 CORS 设计的小型扩展——flask-cors 来简化这一过程。 #### 3. 错误提示 "KeyError: 'missing_key'" 当试图访问不存在于会话对象内的 key 时会发生 KeyError 异常。为了避免这种情况的发生,建议先检查目标 key 是否存在于当前会话之前再执行任何操作;或者采用 get() 方法代替直接索引获取,默认返回 None 如果找不到指定条目[^3]. ```python value = session.get('some_key', default_value=None) if value is not None: # do something with the value... else: # handle missing key scenario gracefully. ``` #### 4. Redis 数据库连接超时 假设正在利用 Redis 存储分布式环境下的会话记录,那么网络延迟可能导致数据库连接耗尽而引发错误。可以通过调整最大重试次数以及等待间隔时间参数优化性能表现,同时也要注意监控实例健康状况及时发现潜在瓶颈所在[^2]. ```python from redis import ConnectionPool, StrictRedis pool = ConnectionPool(host='localhost', port=6379, db=0, socket_timeout=5, retry_on_timeout=True) rdb = StrictRedis(connection_pool=pool) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值