首页 > 代码库 > session cookie 验证码实现
session cookie 验证码实现
using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace Blog.UI{ using System.Drawing; using Blog.Common; /// <summary> /// Vcode 的摘要说明 /// </summary> public class Vcode : IHttpHandler,System.Web.SessionState.IRequiresSessionState { Random r = new Random(); public void ProcessRequest(HttpContext context) { //准备一张画布 using (Image img = new Bitmap(60, 25)) { //准备一个画家 Graphics g = Graphics.FromImage(img); //背景画白 g.Clear(Color.White); //画边框 g.DrawRectangle(Pens.Red, 0, 0, img.Width - 1, img.Height - 1); //画噪点线 DrawPoints(g, img, 10); //得到验证码字符串 string vcodestr = Getstring(1); //画字符串 g.DrawString(vcodestr, new Font("微软雅黑", 16, FontStyle.Italic | FontStyle.Strikeout), Brushes.Blue, 0, 0); DrawPoints(g, img, 10); //将图片以jpg格式显示在outputstream流 img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); //存进session context.Session[CommonHelper.Vcode] = vcodestr; } } void DrawPoints(Graphics g,Image img,int n) { for (int i = 0; i < n; i++) { int x = r.Next(0, img.Width); int y = r.Next(0, img.Height); g.DrawLine(Pens.Blue, x, y, x + r.Next(2, img.Width), y + r.Next(2, img.Width)); } } string Getstring(int n) { string s = string.Empty; char[] c = new char[] { ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘a‘, ‘b‘, ‘c‘,‘d‘ }; for (int i = 0; i < n; i++) { s+=c[ r.Next(c.Length)]; } return s; } public bool IsReusable { get { return false; } } }}
//加cookie,键值对
HttpCookie cookie = new HttpCookie("name", name);
//expires获取或者设置cookie过期时间,使其变成硬盘cookie
,不加该属性,cookie就是缓存中关闭浏览器就over
cookie.Expires = DateTime.Now.AddMinutes(5);
//将cookie交给浏览器。老中医将病例本交给病人。
Response.Cookies.Add(cookie);
//当跳转之后,也就是再来看病,会带着cookie过来,从
//request.cookies[""] 取出来
session 滑动过期机制20分钟
当session创建时候,实际是系统自动将session的key生成了一个不会重复
的字符串,放进cookie中,发给了浏览器的缓存。这个cookie的key是固定
ASP.NET_SessionId,value就是session的key。可以考虑模拟拿到session
的key研究破解,或者绕过登陆。
session可以放任意类型,cookie只能放文本
session也是键值对,key是一个不重复随机字符串,value里又是键值对存
放用户信息。
session.abandon()//销毁服务器端的session对象(退出)
session.clear()//清空服务器端的session对象里的键值对,session对象没
有从session池里销毁
session cookie 验证码实现