必须继承System.Web.SessionState.IRequiresSessionState接口,才能实现Session读写!

System.Web.SessionState的一些接口

IReadOnlySessionState 指定目标 HTTP 处理程序只需要具有对会话状态值的读访问权限。这是一个标记接口,没有任何方法。

IRequiresSessionState 指定目标 HTTP 处理程序需要对会话状态值具有读写访问权。这是一个标记接口,没有任何方法。

  1. using System;
  2. using System.Web;
  3. using System.Drawing;
  4. using System.Web.SessionState;
  5. public class CheckCode : IHttpHandler,IRequiresSessionState
  6. {
  7. public void ProcessRequest(HttpContext context)
  8. {
  9. context.Response.ContentType = "text/plain";
  10. string code = GenerateCheckCode();
  11. context.Session["code"] = code;
  12. this.CreateCheckCodeImage(code,context);
  13. }
  14. private string GenerateCheckCode()
  15. {
  16. int number;
  17. char code;
  18. string checkCode = String.Empty;
  19. System.Random random = new Random();
  20. for (int i = 0; i < 4; i++)
  21. {
  22. number = random.Next();
  23. if (number % 2 == 0)
  24. code = (char)('0' + (char)(number % 10));
  25. else
  26. code = (char)('A' + (char)(number % 26));
  27. checkCode += code.ToString();
  28. }
  29. return checkCode;
  30. }
  31. private void CreateCheckCodeImage(string checkCode, HttpContext context)
  32. {
  33. if (checkCode == null || checkCode.Trim() == String.Empty)
  34. return;
  35. System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
  36. Graphics g = Graphics.FromImage(image);
  37. try
  38. {
  39. //生成随机生成器
  40. Random random = new Random();
  41. //清空图片背景色
  42. g.Clear(Color.White);
  43. //画图片的背景噪音线
  44. for (int i = 0; i < 5; i++)
  45. {
  46. int x1 = random.Next(image.Width);
  47. int x2 = random.Next(image.Width);
  48. int y1 = random.Next(image.Height);
  49. int y2 = random.Next(image.Height);
  50. g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
  51. }
  52. Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
  53. System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
  54. g.DrawString(checkCode, font, brush, 2, 2);
  55. //画图片的前景噪音点
  56. for (int i = 0; i < 100; i++)
  57. {
  58. int x = random.Next(image.Width);
  59. int y = random.Next(image.Height);
  60. image.SetPixel(x, y, Color.FromArgb(random.Next()));
  61. }
  62. //画图片的边框线
  63. g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
  64. System.IO.MemoryStream ms = new System.IO.MemoryStream();
  65. image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
  66. context.Response.ClearContent();
  67. context.Response.ContentType = "image/Gif";
  68. context.Response.BinaryWrite(ms.ToArray());
  69. }
  70. finally
  71. {
  72. g.Dispose();
  73. image.Dispose();
  74. }
  75. }
  76. public bool IsReusable {
  77. get {
  78. return false;
  79. }
  80. }
  81. }
  1. 页面显示时
  1. <img src="ashx....."/>
  1. 判断验证码是否正确
  1. Session["code"].ToString()==用户输入的文本框的值

写于 2014-04-01

在ashx文件中制作验证码(使用session要继承IRequiresSessionState)的更多相关文章

  1. 在Handler.ashx文件中使用session

    使用jquery调用handler文件中的方法,需要使用session,默认生成的文件中,不可以直接使用session.按照以下步骤,即可以通过session与其他的aspx页面的session进行数 ...

  2. ashx文件中使用session提示“未将对象引用设置到对象的实例”

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;u ...

  3. 解决在.ashx文件中判断Session 总是NULL的方法

    实现IHttpHandler接口的同时必须继承IRequiresSessionState接口,才能拿到session public class HttpHandler: IHttpHandler, I ...

  4. 2014-08-26 解决HttpContext.Current.Session在ashx文件中出现“未将对象引用设置到对象的实例”的问题

    今天是在吾索实习的第35天. 最近在使用HttpContext.Current.Session来获取Session["..."]的值时,常常会弹出错误——“未将对象引用设置到对象的 ...

  5. 在Visual Studio 的 “一般处理程序 ” .ashx 文件中如何创建Session 对象

    只需要继承这个接口即可实现创建Session对象.  IHttpHandler,System.Web.SessionState.IHttpSessionState 代码示例: public class ...

  6. asp.net 登陆后在ashx处理程序中获取不到Session

    登录后存储Session,另一个页面Ajax请求 ashx页面,发现无法获取到Session,Session is NULL  使用“IReadOnlySessionState”这个接口就可以

  7. ashx页面中context.Session["xxx"]获取不到值的解决办法

    在 aspx和aspx.cs中,都是以Session["xxx"]="aaa"和aaa=Session["xxx"].ToString()进 ...

  8. .NET .ashx 文件 用Session 是需要注意的问题

    .ashx 文件,默认不可使用 Session ,需要使用Session 时, 需要引用 接口 IRequiresSessionState 例如:  public class AddHouseInfo ...

  9. 分布式中使用Redis实现Session共享(二)

    上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+i ...

随机推荐

  1. Ajax跨域实现

    Ajax Ajax,Asynchronus JavaScript and XML,字母意思:异步的 JavaScript 和 XML,是指一种创建交互式网页应用的网页开发技术.用于异步地去获取XML作 ...

  2. PHP-GTK 扩展(用PHP编写桌面应用程序)

    PHP能做什么? PHP-GTK (构建桌面应用程序在PHP中使用PHP-GTK) 普及一下知识php如何做桌面客户端 [PHP技术]PHP开发Windows桌面应用程序实例 实战PHP/GTK 哪位 ...

  3. openvpn 启动

    安装 yum -y install openvpn 配置文件可以放在: /etc/openvpn 例如,我这里的路径: [mslagee@centos-dev ~]$ cd /etc/openvpn/ ...

  4. Data Binding使用技巧

    Data Binding 根据变量,自动赋值到各widget. How 1.编写layout文件,这里的layout为: act_data_bind_demo.xml 这里需要先准备变量 在具体的wi ...

  5. CentOS 7网卡网桥、绑定设置

    一.网卡桥接设置: 1.网卡配置文件: [root@localhost /]# vim /etc/sysconfig/network-scripts/ifcfg-enp8s0 TYPE=Etherne ...

  6. HDU 4081Qin Shi Huang's National Road System(次小生成树)

    题目大意: 有n个城市,秦始皇要修用n-1条路把它们连起来,要求从任一点出发,都可以到达其它的任意点.秦始皇希望这所有n-1条路长度之和最短.然后徐福突然有冒出来,说是他有魔法,可以不用人力.财力就变 ...

  7. subtext3插件安装

    1.启用Package Control,利用它进行插件安装: 启用方法:菜单栏-view-show console 在弹出的输入框内,输入以下代码,按回车,稍后会出现package control安装 ...

  8. c#日期格式化

    系统格式化  符号   语法 示例(2016-05-09 13:09:55:2350) 格式说明 y DateTime.Now.ToString() 2016/5/9 13:09:55 短日期 长时间 ...

  9. JavaScript 中 Number()、parseInt()、parseFloat()的区别

    Number(): 概述:Number 对象由 Number() 构造器创建,是经过封装的能让你处理数字值的对象.在非构造器上下文中 (如:没有 new 操作符),Number 能被用来执行类型转换. ...

  10. Java基础:三目运算符

    三目运算符 (表达式1)?(表达式2):(表达式3),计算方法是这样的:表达式1是一个逻辑表达式,如果其值为true,则整个表达式的值为表达式2的值,否则为表达式3的值.