Jews

【Oracle dba,人类心理行为学,人类记忆学,e文学习】 【ASP.NET Team:27565311 】 【Oracle dba Team:53489331 加入请说明原因】

  博客园 :: 首页 ::  :: 订阅 订阅 :: 管理
  115 Posts :: 1 Stories :: 1888 Comments :: 46 Trackbacks
主题 
雕虫小技--自定义“验证码”控件


    “验证码”在登录的时候,经常用到,如果把“她”封装成控件,是不是很爽呢?
但是,我一般不喜欢封装得太厉害的“她”,因为什么都看不到,亦或看起来比较朦胧:)

切入点
利用IHttpHandler接口,动态生成验证码

图一(直接看效果吧)

看代码吧

步骤一(新建一类库)

Code


步骤二(使用方法)
直接引用编译后的dll文件
在web.config的web节点,加入<httpHandlers>元素,
例如

Code

当然,如果直接把类库作为一个普通类,放在使用的Website的App_Data目录的话,就不需要配置了:)

步骤三(使用方法)
在需要使用验证码的页面,扔一个image标记,然后把他的url指向"类名.aspx"
例如
Code

到此配置完成,是不是很简单呢:)
哎...
还是把最后一个步骤代码贴出来吧.
Code

需要注意的几个地方:)
一,记得要实现IRequiresSessionState接口,虽然她只是一个标记,没有她,Session状态无法使用.
二,HttpSessionState的对象是通过上下文获得的.
三,配制config的时候,不要忘记path="CValidater.aspx",如果path="*.aspx",那你所有的页面都将被CValidater处理,这不是我们所要的.

最后
什么也不说了,如果觉得对您有用,请给点鼓励...

posted on 2008-04-17 19:41 Jews 阅读(5305) 评论(107)  编辑 收藏 网摘 所属分类: [3] asp.net Controls

Feedback

评论共2页: 上一页 1 2 
#101楼[楼主] 2008-04-17 20:12 王孟军!      
@Q.Lee.lulu

某人云:
技术员,绝不出卖尊严,只出卖技术
还要加上一句
绝不出卖色相

  回复  引用  查看    

#102楼 2008-04-17 20:12 kabal      
不错!
PS:我也被光头先吸引过去了....

  回复  引用  查看    

#103楼 2008-04-17 20:12 gegewilliam      
很好!
  回复  引用  查看    

#104楼 2008-04-17 20:13 PPC[未注册用户]
注册用户或发帖回帖的时候用“验证码”,我知道是为了防止机器人程序自动批量注册或回复。

为什么在登录的时候也要用“验证码”?用“验证码”能提高登录时的安全性吗?

  回复  引用    

#105楼 2008-04-17 20:16 笑疯^_^      
呵呵,说真的,你长得像一个明星
  回复  引用  查看    

#106楼 2008-04-17 20:22 怪怪      
我每次进来, 都看见你深情的望着我..
  回复  引用  查看    

#107楼[楼主] 2008-04-17 20:23 王孟军!      
回复给 10楼的兄弟
我只能笑笑了
如果有个验证代码,别人就算能破解,难度也会加大

  回复  引用  查看    

#108楼 2008-04-17 20:31 生鱼片      
哈哈
  回复  引用  查看    

#109楼 2008-04-17 20:50 欧尔      
支持!
  回复  引用  查看    

#110楼[楼主] 2008-04-17 20:55 王孟军!      
@欧尔
thanks

  回复  引用  查看    

#111楼 2008-04-17 21:20 Kymo[未注册用户]
@PPC
应该是为了防止暴力破解

  回复  引用    

#112楼 2008-04-17 21:26 Agan@CN      
学习啦
有没有练过铁头功!

  回复  引用  查看    

#113楼[楼主] 2008-04-17 21:30 王孟军!      
@Agan@CN
再次声明

请不要讨论 "政治有关",或者,"长相",或者"光头"...等,关键字
:)

  回复  引用  查看    

#114楼 2008-04-17 21:38 古道轻风      
我以前做过这个 但是不是这样实现的
  回复  引用  查看    

#115楼 2008-04-17 21:58 海洋      
大哥~个性
  回复  引用  查看    

赞!~
  回复  引用    

#117楼 2008-04-17 22:07 游客[未注册用户]
文章 酷!
发型 更酷!
(没有用大哥讨厌的字眼 o(∩_∩)o...)

  回复  引用    

我比较关注左边的光头,而好像对这码子不太感兴趣
  回复  引用  查看    

#119楼 2008-04-17 22:28 老刀把子      
很光头。
是不是楼下理的。

  回复  引用  查看    

#120楼 2008-04-17 22:28 游客[未注册用户]
好可爱的发型,好可爱的光头呀,可以烙饼不?
  回复  引用    

#121楼 2008-04-17 22:31 天下叁      
东西有用,人也长的很实在。我很稀饭。
  回复  引用  查看    

#122楼[楼主] 2008-04-17 22:31 王孟军!      
@游客
@老刀把子
@德仔--脚踏实地 用心努力

我什么都不说了...
有点窝火...

  回复  引用  查看    

#123楼 2008-04-17 22:38 good man      
CValidater.aspx 这是哪里来的啊,看了半天哟

很好,很有用哟

  回复  引用  查看    

#124楼[楼主] 2008-04-17 22:41 王孟军!      
@good man

thanks
其实没有CValidater.aspx这个实体
而是通过 实现了IHttpHandler接口的
用于处理aspx类型的对象CValidater,自动生成的


  回复  引用  查看    

#125楼 2008-04-17 22:48 good man      
对把你的所有文件发出来下载吗?我看看
  回复  引用  查看    

#126楼[楼主] 2008-04-17 22:51 王孟军!      
@good man
抱歉,我不会弄那个下载 的连接
其实所有的demo都贴出来了
如果 需要,发个eamil吧!

  回复  引用  查看    

#127楼 2008-04-17 23:07 liong      
多谢分享 :)
  回复  引用  查看    

#128楼 2008-04-17 23:08 good man      
gmawaje@sohu.com
谢谢老大了,我现在这写silverlight 的东西
等一会你来看看哟

支持我一下

  回复  引用  查看    

http://www.cnblogs.com/Emoticons/yoyocici/cool.gif" alt="" />
  回复  引用  查看    

嗯`确实不错!
不过此对象继承自了IHttpHandler,当假如此系统也用到了其它的组件,它们也实现了IHttpHandler接口,试问,他们二者是否会有冲突呢`
<httpHandlers>
<add path="CValidater.aspx" verb="*" type="ControlValidater.CValidater" />
<add path="*.aspx" verb="*" type="OtherComponent.OtherControl" />
</httpHandlers>

  回复  引用    

#131楼 2008-04-18 01:39 镜涛      
呵呵,不错!“要实现IRequiresSessionState接口”实现了这个接口和直接在该控件中使用Session的效果应该一样把?
  回复  引用  查看    

#132楼 2008-04-18 04:54 TT.Net      
长得太有个性了
  回复  引用  查看    

鼓励一下!
  回复  引用    

#134楼 2008-04-18 08:25 生鱼片      
楼主大家都没别的意思
  回复  引用  查看    

#135楼 2008-04-18 08:27 航天奇侠
好像某个明星.

  回复  引用    

#136楼 2008-04-18 08:28 李战      
http://www.cnblogs.com/Emoticons/qface/055243188.gif" alt="" />支持,强烈支持!鼓励,再接再厉!
  回复  引用  查看    

#137楼[楼主] 2008-04-18 08:30 王孟军!      
@生鱼片
开玩笑...

@阿慧2008
@阿慧2008
@TT.Net
@李战
thanks

@镜涛
实现IRequiresSessionState接口,表示实现者要求使用HttpSessionState类型的状态

@观顾者

不会的
注意path的配置就行

  回复  引用  查看    

#138楼 2008-04-18 08:50 石牌村夫      
好东西,赞一个
  回复  引用  查看    

#139楼 2008-04-18 08:52 dongbin      
http://www.cnblogs.com/Emoticons/baimantou/105104147.gif" alt="" />鼓励下
  回复  引用  查看    

#140楼 2008-04-18 09:00 关涛      
支持!我绝对支持!
  回复  引用  查看    

#141楼 2008-04-18 09:14 Csea Xia      
不讨论光头, 饿 。。。
很有个性。。嘿嘿

  回复  引用  查看    

#142楼 2008-04-18 09:17 留恋星空      
个性十足
  回复  引用  查看    

#143楼 2008-04-18 09:20 早班火车      
lz强悍~人更彪悍~
  回复  引用  查看    

#144楼 2008-04-18 09:25 yeyang      
我都是使用别人封装好了的一个类
把验证码做成一刚图片 用一个Session获取 我觉得这样蛮不错的啊?
楼主 不知道我这样的做法 跟你的比起来 哪个个好些?
能说说你的那个有什么优缺点没?

  回复  引用  查看    

#145楼 2008-04-18 09:42 airwolf2026      
支持一下光头,俺也一直想去理一个光头...但是就怕
  回复  引用  查看    

#146楼 2008-04-18 09:43 SOSOS's BLog      
楼主像香港某姓汤的明星........7 8十年代那个
  回复  引用  查看    

#147楼 2008-04-18 09:45 pwqzc[未注册用户]
很光头
而且很黄很暴力
俺也是湖南的

  回复  引用    

#148楼 2008-04-18 09:46 Annie      
System.Web.IHttpHandler.IsReusable


请问楼主能帮我解释一下这个接口吗?

  回复  引用  查看    

支持。
  回复  引用  查看    

支持楼主
  回复  引用    

#151楼 2008-04-18 09:59 2214[未注册用户]
在服务器端判断是不是会增加流量啊?最好是能够在客户端验证
  回复  引用    

#152楼 2008-04-18 10:00 tiray      
现在好像流行尽量不使用Session了吧,为了减轻服务器负荷之类的原因
  回复  引用  查看    

#153楼 2008-04-18 10:00 MarkZT      
lz法号?
  回复  引用  查看    

@MarkZT
嘿嘿~

  回复  引用    

#155楼 2008-04-18 10:07 红色枫叶      
太好了,收藏了...
  回复  引用  查看    

#156楼 2008-04-18 10:24 HuangXB      
学习
  回复  引用  查看    

#157楼[楼主] 2008-04-18 10:26 王孟军!      
@Annie
只是一个属性而已,如果TRUE表示对象可以重复使用,FASE就...
你看一下"asp.net深度历险记"

@2214
@tiray
是不是太偏激了?

@pwqzc
可以说我的坏话...

请不要说湖南人的坏话 :)

  回复  引用  查看    

#158楼 2008-04-18 10:29 帝之晓      
我也被光头给吸引了来
  回复  引用  查看    

#159楼 2008-04-18 10:42 海皮球      
非常不错,MARK!
  回复  引用  查看    

#160楼 2008-04-18 10:55 Randy Qian      
光头我怕啊.
  回复  引用  查看    

确实很不错...受用
  回复  引用    

#162楼 2008-04-18 11:21 @china[未注册用户]
a,你是使用Session来保存验证码,那同时一个用户打开了多个有验证码的页面呢?

没看完你的代码,就看见最后的Session了。

我也有一个验证码控件,我使用的加密的url参数传递验证码的,服务器有密钥,可以不受Session的限制。
等有时间我贴出来源码。

  回复  引用    

哇哈哈,楼主人气真旺,我也来帮顶.
  回复  引用    

#164楼 2008-04-18 11:40 Dove.Net      
很棒
  回复  引用  查看    

#165楼 2008-04-18 11:41 海皮球      

请问楼主,怎么实现图片中的效果!

  回复  引用  查看    

To 海皮球


http://www.cnblogs.com/ilovejolly/archive/2006/10/31/545290.html

  回复  引用    

#167楼 2008-04-18 11:58 海皮球      
TO 看笑话
谢谢了!

  回复  引用  查看    

#168楼 2008-04-18 12:46 Jim~      
--引用--------------------------------------------------
海皮球: <img height="285" alt="" src="/images/cnblogs_com/zhanglipeng107/ff.jpg" width="332" border="0" /><br />
请问楼主,怎么实现图片中的效果!

--------------------------------------------------------
很简单 随机算法 随机自定义颜色 然后画出来生成图片

  回复  引用  查看    

#169楼 2008-04-18 14:47 imxjb[未注册用户]
小技巧背后并不简单
  回复  引用    

#170楼 2008-04-18 15:10 潘柏先      

不错的细节文章!


  回复  引用  查看    

#171楼 2008-04-18 15:13 潘柏先      
--引用--------------------------------------------------
潘柏先: <p>不错的细节文章!</p>

--------------------------------------------------------
不想评论你的光头,但实在太醒目了,难怪别人提到!呵呵

  回复  引用  查看    

#172楼 2008-04-18 15:45 蓝天旭日      
支持哥们一个......
  回复  引用  查看    

#173楼[楼主] 2008-04-18 15:47 王孟军!      
@imxjb
@潘柏先
:)

  回复  引用  查看    

#174楼 2008-04-18 16:31 great wang      
一定要顶!学习了
  回复  引用  查看    

#175楼 2008-04-18 17:37 overred      
像张智霖

头大脖子粗,不是大款就是技术
哈哈

  回复  引用  查看    

#176楼 2008-04-18 17:47 Micro.z      
哇!~ 不错!~
  回复  引用  查看    

#177楼 2008-04-18 18:24 Zhuang miao      
hi~ 挺实用的!


  回复  引用  查看    

直接继承System.Web.UI.Page嘛,然后Response.ContentType = "image/gif";
  回复  引用  查看    

哥们儿,我忍不住要赞一下你的发型,实在是帅!
  回复  引用  查看    

#180楼 2008-04-19 01:39 周克      
@怪怪
还是怪怪最搞!

  回复  引用  查看    

#181楼 2008-04-19 01:42 蓝玄[未注册用户]
到此配置完成,是不是很简单呢:)
哎...
还是把最后一个步骤代码贴出来吧.
Code
protected void Button1_Click(object sender, EventArgs e)
{
string strIn = this.TextBox1.Text;
string strSess = Session["ValidateCode"].ToString();
if (strIn == strSess)
Button1.Text = "ok";
else
Button1.Text = "error";
//这里一定要记得加上
Session["ValidateCode"]=null;
//否则验证码等于摆设
}

  回复  引用    

#182楼 2008-04-19 09:16 刘江[未注册用户]
孟哥不错啊! 我在cnblogs闲逛之际突然看到孟哥那一照片 帅.
  回复  引用    

#183楼 2008-04-19 14:31 wmj[未注册用户]
@刘江
老同学,在那里高就呢?
有空出来 喝喝酒...
我还在changsha
我的EAMIL wmj2212@126.com

  回复  引用    

#184楼 2008-04-19 16:13 菜菜灰      
我也很发对大家提光头这两个,不好意思,我好像也提到了。

这技巧很不错,希望继续出这样的技巧

  回复  引用  查看    

#185楼 2008-04-22 01:32 狼Robot      
string strSess = Session["ValidateCode"].ToString();

在这之前最好还是先加个if(Session["ValidateCode"] != null)保险点,有时Session过期就会出错了.

楼主,看他们说有不用Session的验证,你有没有了解过?有时间交流交流?

  回复  引用  查看    

#186楼[楼主] 2008-04-22 08:09 王孟军!      
@狼Robot
thanks
没错
有时间交流...

  回复  引用  查看    

#187楼 2008-04-24 16:39 公木子      
很实用的文章,很漂亮的发型。JACK
  回复  引用  查看    

#188楼 2008-04-27 10:14 高强[未注册用户]
挺不错的,支持一下,希望博主再接再励,我们期待你的佳作!
  回复  引用    

#189楼 2008-05-06 14:23 amingo      
你把这个做成控件 没任何使用价值(有学习价值)。 根本无法设置样式。
QQ:31767702

  回复  引用  查看    

#190楼[楼主] 2008-05-07 13:41 王孟军!      
@amingo
如果要设置样式,可以考虑用Webcontrol

  回复  引用  查看    

#191楼 2008-05-15 15:19 Johnson2008      
收藏了。
  回复  引用  查看    

#192楼 2008-05-18 15:10 Zhuang miao      
再次在你的页面中崩溃,先不看了~等待老大把音乐调下~谢
  回复  引用  查看    

大哥,你就是偶像。你就是佛,你就是神。
期待你更多的技术!!!

  回复  引用    

#194楼 2008-06-02 11:33 极速[未注册用户]
写的太好了,我自已在下面测试报错。能否把代码发给我。谢谢!
Email:dg56789@163.com

  回复  引用    

#195楼 2008-06-07 22:49 chunfeng      
我也要一份代码
yuji2008@126.com
谢谢

  回复  引用  查看    

很圆很光滑。
  回复  引用    

@海皮球
用JS 把 URL RELOAD一下,记得后面加个随机参数,,例如

location.href="validate.aspx?id=dkjdskaljk";这样就会每次点了就变了.

  回复  引用    

#198楼 2008-07-05 18:49 谢良威      
貌似<httpHandlers>
<add path="CValidater.aspx" verb="*" type="ControlValidater.CValidater" />
</httpHandlers>
这样配置以后整个页面就一图片,其他的TextBox、Button都显示不了...
不知道哪里不对?

  回复  引用  查看    

#199楼 2008-07-05 21:40 谢良威      
经过一番曲折,终于把这个问题解决了,呵呵
谢谢楼主让我在这个过程中学习了不少知识

  回复  引用  查看    

#200楼[楼主] 2008-07-14 22:04 王孟军!      
@谢良威
呵呵
你的配置文件,可能没有配置正确,再仔细看看
记得一定是path="CValidater.aspx"

  回复  引用  查看    

好东东,收了
  回复  引用    

评论共2页: 上一页 1 2 



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1158662




相关文章:

相关链接: