• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 微信公众平台开发教程(八)Session处理问题

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

作者:停留的风 字体:[增加 减小] 来源:互联网 时间:2017-05-11

停留的风通过本文主要向大家介绍了微信公众平台教程,微信公众平台开发教程,微信公众平台使用教程,微信公众平台教程视频,微信公众平台编辑教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

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

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

微信客户端无法缓存信息,而且输入信息有限,需要进行多次请求,在服务端保存当前会话状态。这就需要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();
    }
  }
</div>

2、操作类型

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

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

3、操作过程枚举

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

/// <summary>
  /// 操作过程
  /// </summary>
  enum OperationStage
  {
    /// <summary>
    /// 默认
    /// </summary>
    Default,
    /// <summary>
    /// 第一步
    /// </summary>
    First,
    /// <summary>
    /// 第二步
    /// </summary>
    Second,
    /// <summary>
    /// 第三步
    /// </summary>
    Third
  }
</div>

4、Session缓存项

缓存记录的项,这里面记录了操作类型、操作步骤以及会话对象。为了便于进行Session管理,还增加了最后访问时间,是否自动清除标识。

class SessionItem
  {
    /// <summary>
    /// 操作类型
    /// </summary>
    public Operation Oper { get; set; }
    /// <summary>
    /// 当前步骤
    /// </summary>
    public OperationStage Stage { get; set; }
    /// <summary>
    /// 数据对象
    /// </summary>
    public object Data { get; set; }
    /// <summary>
    /// 是否自动删除
    /// </summary>
    public bool AutoRemove
    {
      get;
      set;
    }
    /// <summary>
    /// 最后更新时间
    /// </summary>
    public DateTime UpdateTime { get; set; }
  }
</div>

二、就要在消息处理中,加入Session处理。

1、增加缓存项数据对象

这个对象,记录用户在会话过程中,录入的相关信息。也是作为业务处理数据提供对象。

class AuthSessionItem
  {
    /// <summary>
    /// 用户名
    /// </summary>
    public string FromUserName { get; set; }
    /// <summary>
    /// 账号
    /// </summary>
    public string Code { get; set; }
    /// <summary>
    /// 唯一标识
    /// </summary>
    public string ID { get; set; }
  }
</div>

 2、认证处理过程

1)开始进入认证,根据认证关键字进行标识,启动会话,并缓存相关数据

2)提示录入个人账号信息

3)微信用户录入个人账号,服务端记录账号信息,并提示录入员工卡号

4)微信用户录入卡号信息,服务端记录卡号信息,并调用具体的认证逻辑

5)用户认证通过,绑定微信OpenId,提示成功绑定信息,并清除会话。

在认证过程中,需要对用户录入信息进行合法性验证,而且在会话过程中,支持用户退出当前操作。

/// <summary>
    /// 认证用户信息
    /// </summary>
    /// <param name="tm"></param>
    /// <returns></returns>
    private bool Auth(TextMessage tm, ref string response)
    {
      SessionItem sessionItem = null;
      if (string.Equals(tm.Content, "Auth", StringComparison.OrdinalIgnoreCase))
      {
        //检查是否已经认证,业务组件验证
        if (UserManager.IsAuth(tm.FromUserName))
        {
          //如果已经认证,提示
          tm.Content = "您已经认证过了,无需再次认证!";          
        }
        else
        {
          AuthSessionItem authSessionItem = new AuthSessionItem();
          authSessionItem.FromUserName = tm.FromUserName;

          sessionItem.Oper = Operation.Auth;
          sessionItem.Stage = OperationStage.First;
          sessionItem.Data = authSessionItem;
          Session.Set(tm.FromUserName, sessionItem);

          //输入账号,并将数据和步骤,写入缓存
          tm.Content = "请输入您的个人账号";
        }

        response = ResponseText(tm);
        return false;
      }

      //从Session获取用户信息
      sessionItem = Session.Get(tm.FromUserName) as SessionItem;
      //如果会话存在,且当前操作为用户认证
      if (sessionItem != null && sessionItem.Oper == Operation.Auth)
      {
        if (sessionItem.Stage == OperationStage.First)
        {
          tm.Content = tm.Content.Trim();
          if (string.IsNullOrEmpty(tm.Content) || tm.Content.Length > 20)
          {
            tm.Content = "输入的个人账号不合法,请重新输入。";
            response = ResponseText(tm);
            return false;
          }
          AuthSessionItem authSessionItem = sessionItem.Data as AuthSessionItem;
          if (authSessionItem != null)
          {
            authSessionItem.Code = tm.Content;
          }

          //更新缓存
          sessionItem.Stage = OperationStage.Second;
          Session.Set(tm.FromUserName, sessionItem);
          tm.Content = "请输入您的员工卡号!\n退出认证请输入Exit。";
          response = ResponseText(tm); 
        }
        else if (sessionItem.Stage == OperationStage.Second)
        {
          string cardNum = null;
          if (!Common.TryConvertToCardNum(tm.Content, out cardNum))
          {            
            tm.Content = "员工卡号不合法,请重新输入。\n退出认证请输入Exit。";
            response = ResponseText(tm);
            return false;
          }
          AuthSessio



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 微信公众平台开发教程(八)Session处理问题
  • .net开发微信公众平台实例教程

相关文章

  • 2017-05-11asp.net验证一个字符串是否符合指定的正则表达式
  • 2017-05-11Asp.net "对路径的访问被拒绝" 解决方法的分析
  • 2017-05-11js获取Treeview选中的节点(C#选中CheckBox项)
  • 2017-05-11asp.net(C#)实现功能强大的时间日期处理类完整实例
  • 2017-05-11asp.net中Fine Uploader文件上传组件使用介绍
  • 2017-05-11ASP.NET五步打包下载Zip文件实例
  • 2017-05-11页面导出为Excel的时间格式的问题
  • 2017-05-11DataSet与DataTable的区别示例介绍
  • 2017-05-11asp.net下出现其中的组件“访问被拒绝”的解决方法
  • 2017-05-11把js文件编译成dll供页面调用的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • java 单例模式(饿汉模式与懒汉模式)
    • 详解在.net中读写config文件的各种方法
    • asp.net中穿透Session 0 隔离(二)
    • APS.NET MVC4生成二维码简单解析
    • Silverlight4 多语言实现的方法
    • Asp.net图片上传实现预览效果的简单代码
    • CommunityServer又称CS论坛的相关学习资料
    • pdf转换成jpg示例分享
    • aspx不显示ViewState的实例
    • asp.net通过Ajax UpdatePanel回传后滚动条位置变更解决方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有