微信公众平台开发教程(八)Session处理问题

2019-05-26 03:25:28王旭

在微信窗口,输入的信息有限,我们需要将一些信息分多次请求。

比如:在进行用户绑定时,我们需要输入用户的相关信息,比如:用户名、密码,或者姓名、电话号码,服务端验证通过,即可将系统用户与微信用户绑定。

然后,此微信账户就有一定的功能权限了,可以查积分,消费记录等。服务号:招商银行信用卡,就有很多功能。

微信客户端无法缓存信息,而且输入信息有限,需要进行多次请求,在服务端保存当前会话状态。这就需要Session。

本文以用户认证,绑定账号为例,来说明具体处理。

一、创建通用的Session处理机制。

为了更好的说明原理,便于扩展,我们来自己设计Session。当然,这里也可以使用System.Web.SessionState.HttpSessionState,这是Web常用的Session机制。

1、自定义Session

用于存储会话片段以及相关数据。

class Session
  {
    /// <summary>
    /// 缓存hashtable
    /// </summary>
    private static Hashtable mDic = new Hashtable();
    /// <summary>
    /// 添加
    /// </summary>
    /// <param name="key">key</param>
    /// <param name="value">value</param>
    public static void Add(string key, object value)
    {
      mDic[key] = value;
    }
    /// <summary>
    /// 移除
    /// </summary>
    /// <param name="key">key</param>
    public static void Remove(string key)
    {
      if (Contains(key))
      {
        mDic.Remove(key);
      }
    }
    /// <summary>
    /// 设置值
    /// </summary>
    /// <param name="key"></param>
    /// <param name="value"></param>
    public static void Set(string key, object value)
    {
      mDic[key] = value;
    }
    /// <summary>
    /// 获取值
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public static object Get(string key)
    {
      return mDic[key];
    }
    /// <summary>
    /// 是否含有
    /// </summary>
    /// <param name="key">key</param>
    /// <returns>bool</returns>
    public static bool Contains(string key)
    {
      return mDic.ContainsKey(key);
    }
    /// <summary>
    /// 清空所有项
    /// </summary>
    public static void Clear()
    {
      mDic.Clear();
    }
  }

2、操作类型

记录具体的操作类型,标识当前会话的具体操作

/// <summary>
  /// 操作类型
  /// </summary>
  enum Operation
  {
    /// <summary>
    /// 认证
    /// </summary>
    Auth,
    /// <summary>
    /// 添加用户
    /// </summary>
    CreateUser
  }

3、操作过程枚举

用于标识当前操作,处于哪一个阶段,不同阶段做不同的处理。