随笔分类 - 编程
让PasswordRecovery控件使用Email地址找回密码
摘要:我曾介绍过以Email地址登录基于Membership管理的网站的方法,并指出这是一种更为安全的做法,用户的Email通常不会暴露在网站中,而不知道Email也就无从破解实现登录。 但是在密码找回时,...
阅读全文
分离到底!用XML+XSLT+CSS+JQuery+WebService组建Asp.Net网站
摘要:早在Web标准化风潮到来之前,我就考虑过XML+XSLT建站了,我以为这是一种非常优雅、高效、低耦的方案,必将大行其道。
然而时至今日,使用这种方案建站的人依然寥寥无几,大家还都在抱着Web标准化不撒手,其实Web标准化只是将表现(Css)分离了出来,而数据和结构仍然混杂在一起,它绝对不是我们最终的归宿,它只是一个过渡品。
XHtml标准的建立初衷,其实也就是为了向XML过渡的,XML+XSLT+CSS才真正做到数据、结构、表现的完美分离,才是我们的终极目标。
诚然,XML+XSLT确实有其技术难度,我想这是它难于普及的最大障碍所在,但我觉得随着时间的推移、观念的更新、工具的发展,这仍旧是我们必会到达的一站。
阅读全文
发送内嵌图片邮件的正确方法
摘要:很多企业发出的邮件都是图文并茂的,其中有部分是在邮件中引用网上的图片网址,更专业些的方法是直接在邮件中通过内联附件内嵌图片,这个功能可以由一些邮件客户端程序实现,那么我们怎么在.Net中实现这一功能呢?
搜索了一下,找到了一位台湾程序员分享的方法,但这个方法经我验证是错误的,其他就没找到什么有用的资料了。
经过尝试,我找到了正确的方法,而且非常简单。
阅读全文
CheckedListBox扩展方法代码
摘要:该扩展提供了控制、加载、导出CheckedListBox选定状态的一些实用方法。
阅读全文
WebBrowser控件使用技巧分享
摘要:在发布“淘宝登货员”时发现不少朋友对WebBrowser控件比较感兴趣,故在此分享一下使用心得。
首先分享一个WebBrowser的扩展类(此类所需的dll将在文章末尾提供下载),大家最好都使用这个类来替代.Net框架中的WebBrowser类,它提供了两个扩展功能...
阅读全文
适用于WinForm的一个定时器类
摘要:尽管.Net已经提供了3个Timer,我仍然要自己利用BackgroundWorker组件封装这么一个定时器来使用。
主要原因是System.Windows.Forms以及System.Threading.Timer的Timer同时运行多个的时候会产生令人发狂的错乱,停止其中一个Timer的时候,可能会引发其他Timer注册的事件,对此类灵异事件,查遍互联网后只在MSDN发现了这么一段说明:
由于所有 Timer 组件都在主应用程序线程上操作,所以在 Windows 窗体应用程序中的任意 Timer 上调用 Stop 都可以导致来自应用程序中其他 Timer 组件的消息被立即处理。如果有两个 Timer 组件,分别设置为 700 毫秒和 500 毫秒,并且从第一个 Timer 调用 Stop,则应用程序可能首先接收第二个组件的事件回调。如果这证明有问题,请考虑转为使用 System.Threading 命名空间中的 Timer 类。
而System.Threading.Timer的Timer又让我感到非常晦涩难用,所以就造了一个山寨版的定
阅读全文
淘宝登货员 1.031
摘要:新功能加入:
此次更新加入了商品发布时间设定功能,可以将商品随机安排在指定天数内的指定时段中发布,这样即使在半夜录入商品,也能等到流量高峰时段发布了。
此功能的原理是根据用户的设定,程序随机生成一个符合用户要求的发布时间,提交到商品信息中。
错误修正:
填写按钮在填写操作执行期间会变为不可用状态,防止连续点击引发线程异常。
阅读全文
淘宝登货员1.02(重要升级)
摘要:此次升级主要为了解决上图所示的“品牌”设置问题,此前的版本通过自定义项设置该项是无效的,本次的改动如下:
* 更改了自定义项中设定的下拉列表的触发方式
* 为自定义项增加了延时执行的选项
阅读全文
淘宝助手 替代品!【淘宝登货员】研发中
摘要:我是珠宝商,也是程序员,很稀有的搭配吧,嘿嘿
N年前我注册了帐号,就拿淘宝助手发商品,结果使用起来非常痛苦,放弃~。
前几天重归淘宝,再用淘宝助手发布商品,用了一天还是感觉太难用了,跟几年前没什么变化嘛~,还经常出BUG,实在无法忍受—_—~~
然后就决定自己做一款软件来实现商品登录,提高效率,于是就有了“淘宝登货员”。
与淘宝助手的定位不同,淘宝登货员不是进行批量管理的软件,而是只专注于登货部分,尽心竭力地提高商家登录货品的速度。
阅读全文
改进的脏话审查方案
摘要:我经常光顾cnbeta,那里的评论很精辟,有时我也会忍不住评上两句,但近来突然发现发布评论都必须经过审核才会显示了,这让我感到非常扫兴。由此我又想起了此前我曾讨论过的“非法内容核查方法”,我想这种人机结合的审核方式应该会比较适合现在的cnbeta吧。
而现在我已经对此方案有了更深、更好的思路了,想在此分享出来,和大家探讨一下,我将在此逐步解析整个审查的流程。
这个经过改进的方案兼顾了性能与灵活性:只进行一次全文扫描;使用正则表达式进行语段匹配。预计稍加优化,并加入缓存机制的话,常规文章的审核耗时不会超过半秒。
阅读全文
用图片做网站输入验证的构想
摘要:我们现在使用的验证手段都是以验证码为主,让用户根据图片输入验证字符,这种方法的安全度尚可,但会给用户带来一些不便和困扰,比如这个雅虎的验证码安全度很高,机器和人都无法正确识别了。
其实要让人看得懂、机器看得晕,只要拿出我们人类的强项就可以了啊——影像识别,试想用图片来做验证是不是会很好呢?
用户进行验证时的操作很简单,只需点选图像所属的类别就可以了,还可以顺道欣赏一下图片,很是惬意;而机器急大了头也很难理解图片的内容吧?...
阅读全文
从今开始,让网站用Email地址登录
摘要:现今,很多Web2.0网站都使用Email地址作为登录用户名,其有如下优点:
1. 不易重复。用户名经常会重复,导致用户不得不在多个网站之间使用多种不同的用户名,不易记忆和管理;而Email地址具有唯一性。
2. 易于记忆。用户常用的Email地址一般不会超过三个,所以即使忘记了是哪一个,也能很快试出来。
3. 不易被破解。用户名在网站中通常都是对所有人可见的,这就会导致一些别有用心的人关注某个特定用户,骗取或暴力破解其账户;而Email地址在网站中通常都是保密的,在不知道某人的Email地址之前,破解就无从谈起,极大地提高了账户安全性。
...
阅读全文
学柯南,用电脑拨电话!
摘要:在柯南的剧场版《战栗的乐谱》之中,柯南通过唱出特定频率的声音来模拟电话的按键音,从而由远处拨通了报警电话。我看字幕上写着“切实可行”,便对此产生了兴趣。
我想我们完全可以用编程来实现一个电脑拨号键盘,通过按键从音箱中发出对应的电话按键音,传入电话听筒实现拨号。
也许这样只会对电话键盘进水的人有用吧(比如我-_-#),但是进一步,我们还可以实现通过电脑管理一个常用电话薄,然后通过便捷的关键字过滤查找电话(比如输入“王”、“微软”、“136”等字符串,快速过滤掉不含关键字的联系人),并呼出,相信没有哪个电话机会比电脑的管理功能更强大吧。
还可以为OutLook写一个插件,来实现对联系人的拨叫。
阅读全文
细说Asp.net的IP地址屏蔽功能设计
摘要:出于安全考虑,几乎每个动态网站都具备IP地址屏蔽功能,而网上流传的很多关于该功能的教程大都采用字符串保存和验证IP地址,我认为这是不太科学的,我试图找到最佳的设计方案。
“IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。”
由此我们了解到,IP地址实际上是一个32位正整数,在C#中可以使用uint类型来表示,但SQLServer数据库里好像没有对应的类型;转而使用数据库支持的int类型的话,则会出现溢出的情况;因此我们做出妥协:使用long(bigint)类型。
那么如何将IP地址转为整数呢?我们看到IPAddress类中有一个“[否决的]”实例属性Address,这个属性的确可以返回一个long值,但是测试一下,得到的数据确实这样的:...
阅读全文
较为周全的Asp.net提交验证方案(Session版)
摘要:此前我介绍了使用数据库实现的提交验证方案,一些朋友怀疑其效率不佳,认为Session是更好的方案。
的确使用Session也不会消耗太多内存,而且如今内存白菜价,最不济就随手买个2G的插上也就够了,所以我将在此写下Session版的实现提要,其余细节参考前篇。
实现方案简述:
在Session中存储一个哈希表用以记录该用户的每一条验证信息,哈希表的键为验证信息的过期时间,值为验证码的明文。
过期时间使用ViewState存储,以发给客户端,并在提交时获取,以读取对应的验证码明文。
...
阅读全文
较为周全的Asp.net提交验证方案 (下)
摘要:下面要对这个生成的“提交验证”类进行功能扩展,通过.Net的“部分类”或“扩展方法”技术都可以轻松实现,这里采用的是“部分类”技术:
...
引用生成的ADO.NET Entity Framework数据模型的命名空间,且声明为部分类。
书写静态构造函数及一个静态属性:
...
阅读全文
较为周全的Asp.net提交验证方案 (上)
摘要:以前在学习Asp.net时备受困扰的就是提交验证这块,网上流行的关于图片验证的教程大都存在很多问题,比如:
验证码存储在页面代码或Cookies里,暴露给客户端;
通过Session存储的验证码,虽然解决了安全问题,但一个用户只使用一个变量存储验证码,假如用户同时打开一个以上的页面,分别提交的话,就无法正常使用了;
验证码不会过期,这会留下隐患,使暴力破解变得可行(当然也可以通过刷新间隔、提交间隔、黑名单等手段加以控制);
此外还有伴随着提交产生的另一个问题——重复提交。
为解决上述问题,我曾走过不少弯路,后来总结出了一个方案可以很好的解决这些问题,本文将结合ADO.NET Entity Framework技术来介绍此方案。
阅读全文
在Web.Config中指定页面的基类
摘要:为网站设置统一的页面基类绝对是一个好习惯,可以在基类中完成很多统一的读写处理和行为封装,比如实现防刷新机制、IP屏蔽等功能。
在Web.Config文件中,可以通过指定system.web中的pages节点的pageBaseType属性指定页面的基类:
...
但这个属性的概念比较模糊,我曾以为此属性会使新建页面的模板发生变化,使它们直接继承你所设定的基类,但不是这样的。
首先此属性会使所有不包含后台代码的独立Aspx页面自动继承于此基类,如这样声明的页面:
...
阅读全文
一处 ADO.NET Entity Framework 的逻辑BUG
摘要:这几天开始接触ADO.NET Entity Framework,突然发现一处奇怪的BUG。
...
...
也就是说先前在属性面板设置的命名空间根本就是无效的,它只会以目录名作为命名空间名称,我认为这不合乎逻辑。
而假如直接将模型放入App_Code目录下,命名空间属性就可以正常生效。
阅读全文
在后台代码中引入XAML的方法
摘要:本文将介绍三种方法用于在后台代码中动态加载XAML,其中有两种方法是加载已存在的XAML文件,一种方法是将包含XAML代码的字符串转换为WPF的对象。
这些是我在编写RegeX时获得的经验,它们将会给WPF程序带来更多的灵活性。
动态加载XAML文件技术非常适合用于资源载入,以此来实现语言切换、主题变换等功能。
动态转换XAML字符串为WPF对象技术可为程序提供更为灵活的对象生成方式,这在一些复杂的情况下尤为实用。
阅读全文