新疆软件开发

本站首页 软件开发 成功案例 公司新闻 公司简介 客服中心 软件技术 网站建设
  您现在的位置: 新疆二域软件开发公司 >> 开发语言 >> 文章正文

搜集整理的asp.net的验证方式大全session

   搜集整理了一篇关于.net验证方式的文章,大家看看。
   此前我介绍了使用数据库实现的提交验证方案,一些朋友怀疑其效率不佳,认为Session是更好的方案。

的确使用Session也不会消耗太多内存,而且如今内存白菜价,最不济就随手买个2G的插上也就够了,所以我将在此写下Session版的实现提要,其余细节参考前篇。
实现方案简述:
在Session中存储一个哈希表用以记录该用户的每一条验证信息,哈希表的键为验证信息的过期时间,值为验证码的明文。
过期时间使用ViewState存储,以发给客户端,并在提交时获取,以读取对应的验证码明文。
传给验证码生成页面的ID参数是经ToFileTime()方法转换的过期时间,验证码生成页获取到此参数后进行逆转换,再读取对应的验证码明文以生成显示。
代码讲解:
先建立一个静态类,名为“提交验证”,将用于存储验证信息的Session变量封装为一个属性:

/// <summary>

/// 验证信息表

/// </summary>

static Hashtable 验证信息

{

    get

    {

        return Core.函数库.网络.Session["验证信息"] as Hashtable;

    }

    set

    {

        Core.函数库.网络.Session["验证信息"] = value;

    }

}

清理方法,用于将过期的数据清除:
/// <summary>
/// 清理所有过期的验证信息

/// </summary>
public static void 清理()

{

    if (验证信息 == null || 验证信息.Count < 5) return;

    foreach (DictionaryEntry f in (Hashtable)验证信息.Clone())

    {
        if ((DateTime)f.Key < DateTime.Now) 验证信息.Remove(f);

    }

}

小于5条验证信息则忽略。

克隆一个验证信息表供foreach使用,如果使用原表循环的话,直接移除内容会改变表长度,从而引发异常。

添加方法:

/// <summary>

/// 添加一个新的验证信息。

/// </summary>

/// <param name="验证码">要保存的验证码</param>

/// <param name="过期时间差值">用于计算过期时间,单位为分钟</param>

/// <returns>过期时间戳</returns>

public static DateTime 添加(string 验证码, byte 过期时间差值)

{

    清理();

    var 过期时间 = DateTime.Now.AddMinutes(过期时间差值);

    if (验证信息 == null) 验证信息 = new Hashtable();

    验证信息.Add(过期时间, 验证码);

    return 过期时间;

}

在添加前进行过期信息清理工作。
获取、验证、移除方法:
/// <summary>
/// 根据过期时间戳获取对应的验证码
/// </summary>
/// <param name="过期时间戳">验证信息过期时间戳</param>
/// <returns>验证码明文</returns>
public static string 获取(DateTime 过期时间戳)

{

    return 验证信息[过期时间戳] as string;

}

 

/// <summary>

/// 验证用户输入的验证码是否正确

/// </summary>

/// <param name="过期时间戳">验证信息过期时间戳</param>

/// <param name="验证码">用户输入的验证码</param>

/// <returns>返回错误信息,如验证成功则返回null</returns>

public static string 验证(DateTime 过期时间戳, string 验证码)

{
    if (过期时间戳 < DateTime.Now) return "验证信息已过期";

    var 验证码明文 = 获取(过期时间戳);

    if (验证码明文 == null) return "验证信息无效或已过期";

    else if (验证码明文.ToLower() != 验证码.ToLower()) return "验证码错误";

    else return null;

}


/// <summary>
/// 根据过期时间戳移除对应的验证信息
/// </summary>

/// <param name="过期时间戳">验证信息过期时间戳</param>
public static void 移除(DateTime 过期时间戳)

{
    验证信息.Remove(过期时间戳);
}
使用方法:
使用时在页面上封装一个基于ViewState属性:
/// <summary>
/// 时间戳属性,基于ViewState
/// </summary>

public DateTime? 时间戳

{
   get

    {
        return ViewState["时间戳"] as DateTime?;

    }
    set
    {
        ViewState["时间戳"] = value;
    }
}

然后在load事件中调用:
protected void Page_Load(object sender, EventArgs e)

{

    if (!IsPostBack)

    {
        时间戳 = 提交验证.添加();
        Image1.ImageUrl = "~/VerifyImage.aspx?ID=" + 时间戳.Value.ToFileTime();
    }

}

(无参数的“添加”方法是我实现的一个适配器封装方法,采用默认的过期时间设置,随机生成验证码)

提交时的调用:

protected void Button1_Click(object sender, EventArgs e)

{
    var s = 提交验证.验证(时间戳.Value, TextBox1.Text);

    if (s == null)

    {
        CustomValidator1.IsValid = true;
        //提交...
        提交验证.移除(时间戳.Value);

    }
    else

    {
        CustomValidator1.IsValid = false;

        CustomValidator1.ErrorMessage = s;

    }

}


 

作者:斯克迪亚 | 文章来源:cnblogs | 更新时间:2008-10-21 22:51:58

  • 上一篇文章:

  • 下一篇文章: 没有了

  • 相关文章:
    asp,net软件结构设计和相关的安全性问题
    如何解决Menu菜单被frame遮挡以及iframe自适应的问题
    Orcale与Asp.net的端口冲突解决方法
    Session保存在SqlServer中可实现
    如何利用SQL Server进行会话状态session的保持
    ASP.NET 2.0之Memebership扩展应用解决方案
    数据库设计-数据库的三级模式
    ASP.NET中如何使用unsafe选项
    三个视图搞定SqlServer数据库字典
    深入了解数据源控件Data Souce controls
    软件技术
    · 开发语言
    · Java技术
    · .Net技术
    · 数据库开发
    最新文章  
    ·搜集整理的asp.net的验证方
    ·各种FOR循环结构的整理
    ·软件项目开发中应该考虑那
    ·搜集整理的javascript sel
    ·软件开发中项目经理有那些
    ·学习如何在Lambda表达式进
    ·C++基础知识:结构体数据的
    ·C#实现短信发送程序的例子
    ·sun最近修补了一部分java的
    ·rss定制的另外一种实现方式
    ·delphi实现利用arp欺骗来实
    ·基础学习:基于WF的流程框
    ·网络编程中怎样得知一次数
    ·如何逆序输出单链表?
    ·软件开发过程中的性能设计
    关于我们 | 软件开发 | 下载试用 | 客服中心 | 联系我们 | 友情链接 | 网站地图 | 新疆电子地图 | RSS订阅
    版权所有 © 2016 新疆二域软件开发网 www.k8w.net All Rights Reserved 新ICP备14003571号
    新疆软件开发总机:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆乌鲁木齐北京中路华联大厦A-5C 邮编:830000