<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>冰点博客</title>
	<atom:link href="http://blog.xcmd.net/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.xcmd.net</link>
	<description></description>
	<lastBuildDate>Tue, 21 Feb 2012 02:14:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>网页开发的6种在线调试环境</title>
		<link>http://blog.xcmd.net/2012-02-17-17/%e7%bd%91%e9%a1%b5%e5%bc%80%e5%8f%91%e7%9a%846%e7%a7%8d%e5%9c%a8%e7%ba%bf%e8%b0%83%e8%af%95%e7%8e%af%e5%a2%83.html</link>
		<comments>http://blog.xcmd.net/2012-02-17-17/%e7%bd%91%e9%a1%b5%e5%bc%80%e5%8f%91%e7%9a%846%e7%a7%8d%e5%9c%a8%e7%ba%bf%e8%b0%83%e8%af%95%e7%8e%af%e5%a2%83.html#comments</comments>
		<pubDate>Fri, 17 Feb 2012 09:38:14 +0000</pubDate>
		<dc:creator>冰点</dc:creator>
				<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[在线调试css]]></category>
		<category><![CDATA[网页开发]]></category>

		<guid isPermaLink="false">http://blog.xcmd.net/?p=439</guid>
		<description><![CDATA[如今的网页代码，一般由三个部分组成：

　　* HTML，语义层，提供网页的内容。
　　* CSS，表现层，规定网页的外观。
　　* Javascript，动作层，定义用户与网页的互动。
理想的开发环境，应该既可以分别调试这三种代码，又可以轻松查看它们合并在一起的整体效果。
浏览器是最合适的效果查看工具，所以很多人想到，代码调试环境也可以直接部署在浏览器中，以网站的形式提供服务。
下面，我根据Design Shack的文章，总结一下目前最常见的6种网页开发在线调试环境。它们大大方便了网页设计师的工作，极大地提供了工作效率。
一、CSSDesk
网址：http://cssdesk.com/ （需翻墙）

这个网站是最早出现的在线调试环境之一，主要用于调试CSS。

左侧两个面板，可以分别输入html和css代码，但不支持Javascript调试。

你可以改变&#8221;预览区&#8221;的背景颜色，可以保存或下载调试完成的代码。
二、Dabblet
网址：http://dabblet.com/

Dabblet也是一个CSS调试环境，不支持Javascript调试。

它将网页效果分成&#8221;CSS效果&#8221;、&#8221;HTML效果&#8221;和&#8221;整体效果&#8221;三个面板，方便单独调试。

它最大的特点有两个，一是动态显示代码效果，代码一输入，效果就自动显示出来；二是显示CSS提示，比如上图的字体效果和长度效果。
三、JS Bin
网址：http://jsbin.com

这是一个较早出现的Javascript在线调试环境。

它分成Javascript、html和&#8221;效果预览&#8221;三个区域，你可以自行勾选显示哪些区域。它没有独立的CSS代码区，CSS代码必须嵌入html代码，这点很不方便。

它支持加载常用的Javascript库。除此以外，其他特色不多。
四、jsFiddle
网址：http://jsfiddle.net/

jsFiddle是目前最受欢迎的在线调试环境。

它的默认界面分成5个区域，左边是参数设置，右边依次是HTML、Javascript、CSS和&#8221;效果预览区&#8221;。

除了加载常见的Javascript库，它还支持SCSS代码和CoffeeScript代码。你甚至可以把它的窗口嵌入自己的网页。
五、Tinkerbin
网址：http://tinkerbin.com/

Tinkerbin很像jsFiddle，也是分成HTML、Javascript、CSS和&#8221;效果预览区&#8221;。

它的特点在于，你可以选择某种代码独占整个编辑区，这样就增大了代码编辑的可视空间。另外，它可以实时显示代码运行结果，这是jsFiddle不支持的。

它支持的代码种类相当多，比如 HAML、SCSS、LESS和CoffeeScript。
六、Rendur
网址：http://rendur.com/

Rendur是一个轻量级在线调试环境，功能不多，但是加载和运行都很快。

用户可以在HTML、CSS、Javascript三个面板中切换，输入相应代码。代码的运行结果，会自动显示在背景网页上。最后一个面板，显示的是整个网页的源码。
（完）
来自:http://www.ruanyifeng.com/blog/2012/02/6_online_playgrounds_for_web_developing.html

随机日志身份证号码解密&#124;身份证尾数校验码算法&#124;ID card information (0)谷歌问答测试版上线 启动用户数据迁移 (0)PHP中$_SERVER的详细方法 (0)C#的析构函数处理 (0)Apache 2.2 + Tomcat设置动态二级域名 (0)jquery 只执行一次的方法 (0).net 多线程操作form控件 (0)转:link 标签的 rel 属性你了解多少？ (1)所有操作系统平台的zend studio集成开发环境安装程序以及注册机下载 (0)解决sql server触发器的影响行数对程序的影响 (0)]]></description>
			<content:encoded><![CDATA[<p>如今的网页代码，一般由三个部分组成：</p>
<div id="more-more">
<blockquote><p>　　* HTML，语义层，提供网页的内容。</p>
<p>　　* CSS，表现层，规定网页的外观。</p>
<p>　　* Javascript，动作层，定义用户与网页的互动。</p></blockquote>
<p>理想的开发环境，应该既可以分别调试这三种代码，又可以轻松查看它们合并在一起的整体效果。</p>
<p>浏览器是最合适的效果查看工具，所以很多人想到，代码调试环境也可以直接部署在浏览器中，以网站的形式提供服务。</p>
<p>下面，我根据<a href="http://designshack.net/articles/css/5-online-playgrounds-for-html-css-and-javascript-compared/" target="_blank">Design Shack</a>的文章，总结一下目前最常见的6种网页开发在线调试环境。它们大大方便了网页设计师的工作，极大地提供了工作效率。</p>
<p><strong>一、CSSDesk</strong></p>
<p>网址：<a href="http://cssdesk.com/" target="_blank">http://cssdesk.com/</a> （需翻墙）</p>
<p><a href="http://cssdesk.com/" target="_blank"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093814wjj.jpg" alt="" /></a></p>
<p>这个网站是最早出现的在线调试环境之一，主要用于调试CSS。<span id="more-439"></span></p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093814Izh.jpg" alt="" /></p>
<p>左侧两个面板，可以分别输入html和css代码，但不支持Javascript调试。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093814Xdi.jpg" alt="" /></p>
<p>你可以改变&#8221;预览区&#8221;的背景颜色，可以保存或下载调试完成的代码。</p>
<p><strong>二、Dabblet</strong></p>
<p>网址：<a href="http://dabblet.com/" target="_blank">http://dabblet.com/</a></p>
<p><a href="http://dabblet.com/" target="_blank"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093814ZT2.jpg" alt="" /></a></p>
<p>Dabblet也是一个CSS调试环境，不支持Javascript调试。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093815dt8.jpg" alt="" /></p>
<p>它将网页效果分成&#8221;CSS效果&#8221;、&#8221;HTML效果&#8221;和&#8221;整体效果&#8221;三个面板，方便单独调试。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093815z27.jpg" alt="" /></p>
<p>它最大的特点有两个，一是动态显示代码效果，代码一输入，效果就自动显示出来；二是显示CSS提示，比如上图的字体效果和长度效果。</p>
<p><strong>三、JS Bin</strong></p>
<p>网址：<a href="http://jsbin.com/" target="_blank">http://jsbin.com</a></p>
<p><a href="http://jsbin.com/" target="_blank"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093815aFa.jpg" alt="" /></a></p>
<p>这是一个较早出现的Javascript在线调试环境。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093815KaU.jpg" alt="" /></p>
<p>它分成Javascript、html和&#8221;效果预览&#8221;三个区域，你可以自行勾选显示哪些区域。它没有独立的CSS代码区，CSS代码必须嵌入html代码，这点很不方便。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/0938155EZ.jpg" alt="" /></p>
<p>它支持加载常用的Javascript库。除此以外，其他特色不多。</p>
<p><strong>四、jsFiddle</strong></p>
<p>网址：<a href="http://jsfiddle.net/" target="_blank">http://jsfiddle.net/</a></p>
<p><a href="http://jsfiddle.net/" target="_blank"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093815Dpj.jpg" alt="" /></a></p>
<p>jsFiddle是目前最受欢迎的在线调试环境。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/0938154cH.jpg" alt="" /></p>
<p>它的默认界面分成5个区域，左边是参数设置，右边依次是HTML、Javascript、CSS和&#8221;效果预览区&#8221;。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093815NDy.jpg" alt="" /></p>
<p>除了加载常见的Javascript库，它还支持SCSS代码和CoffeeScript代码。你甚至可以把它的窗口嵌入自己的网页。</p>
<p><strong>五、Tinkerbin</strong></p>
<p>网址：<a href="http://tinkerbin.com/" target="_blank">http://tinkerbin.com/</a></p>
<p><a href="http://tinkerbin.com/" target="_blank"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093815yMl.jpg" alt="" /></a></p>
<p>Tinkerbin很像jsFiddle，也是分成HTML、Javascript、CSS和&#8221;效果预览区&#8221;。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093815txB.jpg" alt="" /></p>
<p>它的特点在于，你可以选择某种代码独占整个编辑区，这样就增大了代码编辑的可视空间。另外，它可以实时显示代码运行结果，这是jsFiddle不支持的。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093815scv.jpg" alt="" /></p>
<p>它支持的代码种类相当多，比如 HAML、SCSS、LESS和CoffeeScript。</p>
<p><strong>六、Rendur</strong></p>
<p>网址：<a href="http://rendur.com/" target="_blank">http://rendur.com/</a></p>
<p><a href="http://rendur.com/" target="_blank"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093816S63.jpg" alt="" /></a></p>
<p>Rendur是一个轻量级在线调试环境，功能不多，但是加载和运行都很快。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/093816F4x.jpg" alt="" /></p>
<p>用户可以在HTML、CSS、Javascript三个面板中切换，输入相应代码。代码的运行结果，会自动显示在背景网页上。最后一个面板，显示的是整个网页的源码。</p>
<p>（完）</p>
<p>来自:http://www.ruanyifeng.com/blog/2012/02/6_online_playgrounds_for_web_developing.html</p>
</div>
<h3  class="related_post_title">随机日志</h3><ul class="related_post"><li><a href="http://blog.xcmd.net/2010-05-04-23/%e7%a7%91%e5%ad%a6%e2%80%9c%e8%b6%85%e4%ba%ba%e2%80%9d-%e5%b0%bc%e5%8f%a4%e6%8b%89%c2%b7%e7%89%b9%e6%96%af%e6%8b%89-%ef%bc%88%e4%b8%8b%ef%bc%89.html" title="科学“超人” 尼古拉·特斯拉 （下）">科学“超人” 尼古拉·特斯拉 （下）</a> (0)</li><li><a href="http://blog.xcmd.net/2010-06-10-17/qq%e6%98%b5%e7%a7%b0%e7%89%b9%e6%ae%8a%e7%ac%a6%e5%8f%b7%e5%a4%a7%e5%85%a8.html" title="qq昵称特殊符号大全">qq昵称特殊符号大全</a> (0)</li><li><a href="http://blog.xcmd.net/2010-07-29-21/c%e4%b8%adoverride%e5%92%8coverload%e7%9a%84%e5%8c%ba%e5%88%ab.html" title="C#中override和overload的区别 ">C#中override和overload的区别 </a> (0)</li><li><a href="http://blog.xcmd.net/2010-10-25-10/%e5%9c%a8%e7%ba%bf%e7%94%9f%e6%88%90flashpaper%e6%96%87%e6%a1%a3.html" title="在线生成FlashPaper文档">在线生成FlashPaper文档</a> (2)</li><li><a href="http://blog.xcmd.net/2010-04-28-16/hr%e7%9a%84%e8%87%b3%e9%ab%98%e6%9c%ba%e5%af%8620%e4%b8%aa%e5%85%ac%e5%8f%b8%e7%bb%9d%e5%af%b9%e4%b8%8d%e4%bc%9a%e5%91%8a%e8%af%89%e4%bd%a0%e7%9a%84%e6%bd%9c%e8%a7%84%e5%88%99.html" title="HR的至高机密:20个公司绝对不会告诉你的潜规则">HR的至高机密:20个公司绝对不会告诉你的潜规则</a> (0)</li><li><a href="http://blog.xcmd.net/2010-07-29-23/c%e4%b8%ad%e7%9a%84%e5%a7%94%e6%89%98%e5%92%8c%e4%ba%8b%e4%bb%b6%e8%af%a6%e8%a7%a3.html" title="C#中的委托和事件详解">C#中的委托和事件详解</a> (0)</li><li><a href="http://blog.xcmd.net/2010-05-24-13/xamp%e7%ae%80%e5%8c%96phpapachemysql%e7%9a%84%e5%ae%89%e8%a3%85%e8%bf%87%e7%a8%8b.html" title="XAMP简化PHP+apache+mysql的安装过程">XAMP简化PHP+apache+mysql的安装过程</a> (0)</li><li><a href="http://blog.xcmd.net/2010-03-25-21/perl%e5%9c%a8windows%e4%b8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e7%9a%84%e9%85%8d%e7%bd%ae.html" title="Perl在Windows下开发环境的配置">Perl在Windows下开发环境的配置</a> (0)</li><li><a href="http://blog.xcmd.net/2010-06-02-17/%e5%89%8d%e4%b8%96%e6%98%af%e8%b0%81%e5%9f%8b%e7%9a%84%e6%88%91%ef%bc%9f.html" title="前世是谁埋的我？ ">前世是谁埋的我？ </a> (0)</li><li><a href="http://blog.xcmd.net/2010-09-09-20/web-config%e8%af%a6%e8%a7%a3%ef%bc%8basp-net%e4%bc%98%e5%8c%96%ef%bc%883%ef%bc%89.html" title="Web.config详解＋asp.net优化（3）">Web.config详解＋asp.net优化（3）</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xcmd.net/2012-02-17-17/%e7%bd%91%e9%a1%b5%e5%bc%80%e5%8f%91%e7%9a%846%e7%a7%8d%e5%9c%a8%e7%ba%bf%e8%b0%83%e8%af%95%e7%8e%af%e5%a2%83.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>把它看完，你一定会有收获</title>
		<link>http://blog.xcmd.net/2012-02-15-14/%e6%8a%8a%e5%ae%83%e7%9c%8b%e5%ae%8c%ef%bc%8c%e4%bd%a0%e4%b8%80%e5%ae%9a%e4%bc%9a%e6%9c%89%e6%94%b6%e8%8e%b7.html</link>
		<comments>http://blog.xcmd.net/2012-02-15-14/%e6%8a%8a%e5%ae%83%e7%9c%8b%e5%ae%8c%ef%bc%8c%e4%bd%a0%e4%b8%80%e5%ae%9a%e4%bc%9a%e6%9c%89%e6%94%b6%e8%8e%b7.html#comments</comments>
		<pubDate>Wed, 15 Feb 2012 06:35:04 +0000</pubDate>
		<dc:creator>冰点</dc:creator>
				<category><![CDATA[生活|工作]]></category>
		<category><![CDATA[收获]]></category>

		<guid isPermaLink="false">http://blog.xcmd.net/?p=438</guid>
		<description><![CDATA[第一课
一个男人在他妻子洗完澡后准备进浴室洗澡。这时，门铃响了。
妻子迅速用浴巾裹住自己冲到门口。
当她打开门时，邻居鲍勃站在那儿。
在她开口前，鲍勃说，“你如果把浴巾拿掉，我给你800美元。”
想了一会儿，这个女人拿掉浴巾赤裸地站在鲍勃面前。几秒钟后，鲍勃递给她800美元然后离开了。
女人重新裹好浴巾回到屋里。
当她踏进浴室时，丈夫问她，“是谁呀？”
“是邻居鲍勃。”她回答。
“哦，”丈夫说，“他有没有提到还欠我800美元？”
故事寓意：
及时与同舟共济的股东分享重要信息，将会避免不必要的曝光。
第二课
一个销售员、一个办事员和他们的经理步行去午餐时发现了一盏古代油灯。
他们摩擦油灯，一个精灵跳了出来。
精灵说：“我能满足你们每人一个愿望。”
“我先！我先！”办事员说，“我想去巴哈马群岛，开着快艇，与世隔绝。”
倏！她飞走了。
“该我了！该我了！”销售员说，“我想去夏威夷，躺在沙滩上，有私人女按摩师，免费续杯的冰镇果汁朗姆酒，还有一生中的最爱。”
倏！他飞走了。
“OK, 该你了。”精灵对经理说。
经理回答：“我要那两个蠢货午饭后马上回来工作！”
故事寓意：
永远让你的老板开口先。
第三课
一只鹰坐在高高的树上休息，无所事事。
一只小兔子看见鹰并且问它，“我能象你一样坐着什么都不干吗？”
鹰回答：“行啊，为啥不行。”
于是，兔子坐在鹰下面的地上休息。突然，一只狐狸出现了，它扑到兔子身上把它吃掉了。
故事寓意：
要想坐着无所事事，你必须坐在非常、非常高的位置。
第四课
一只小鸟飞去南方过冬。天实在太冷了。它冻僵了，掉在一片田野上。
它躺在那儿时，一头母牛走过来在它身上拉了一堆屎。
冻僵的小鸟躺在粪堆里，开始感觉到了温暖。
牛粪确实使它暖和过来了。
它躺在温暖的牛粪中，异常高兴，并开始唱起歌来。
一只过路的猫听到鸟叫赶过来看个究竟。
顺着声音，它发现了牛粪下的小鸟，并迅速把它拖出来吃掉了。
故事寓意：
(1) 并不是每个在你身上拉屎的都是你的敌人。
(2) 并不是每个把你拖出粪堆的都是你的朋友。
(3) 当你深陷粪堆中的时候，最好闭上你的鸟嘴
1)学会 沉默
有时候，你被人误解，你不想争辩，所以选择沉默。本来就不是所有的人都得了解你，因此你认为不必对全世界喊话。却也有时候，你被最爱的人误解，你难过到不想争辩，也只有选择沉默。全世界都可以不懂你，但他应该懂，若他竟然不能懂，还有什么话可说?生命中往往有连舒伯特都无言以对的时刻，毕竟不是所有的是非都能条列清楚，甚至可能根本没有真正的是与非。那么，不想说话，就不说吧，在多说无益的时候，也许沉默就是最好的解释。
(2)至少 平静
在你跌入人生谷底的时候，你身旁所有的人都告诉你：要坚强，而且要快乐。坚强是绝对需要的，但是快乐?在这种情形下，恐怕是太为难你了。毕竟，谁能在跌得头破血流的时候还觉得高兴？但是至少可以做到平静。平静地看待这件事，平静地把其他该处理的事处理好。平静，没有快乐，也没有不快乐。
(3)学会弯腰 这会是我意外的收获
和别人发生意见上的纷歧，甚造成言语上的冲突，所以你闷闷不乐，因为你觉得都是别人恶意。别再耿耿于怀了，回家去擦地板吧。拎一块抹布，弯下腰，双膝着地，把你面前这张地板的每个角落来回擦拭干净。然后重新省思自己在那场冲突，所说过的每一句话。现在，你发现自己其实也有不对的地方了，是不是?你渐渐心平气和了，是不是?有时候你必须学习弯腰，因为这个动作可以让你谦卑。劳动身体的同时，你也擦亮了自己的心绪。而且，你还拥有了一张光洁的地板呢。这是你的第二个收获。
(4)不要想 如果 当初
你说，人生是一条有无限多岔口的长路，永远在不停地做选择。如果只是选择吃炒面或炒饭，影响似乎不大，但选择读什么科系、做什么工作、结婚或不结婚、要不要有孩子，每一个选择都影响深远，而不同的选择也必定造就完全不一样的人生。你又说，生命中不可承受之情，就在于人生没有重来的机会啊。如果当初如何如何，现在就不会怎样怎样&#8230;这种充满怅然的喃喃自语，还是别再多说了吧。每一个岔口的选择其实没有真正的好与坏，只要把人生看成是自己。独一无二的创作，就不会频频回首如果当初做了不一样的选择。
(5)努力吧 不管成功与否 至少曾经美丽
漫步林间，你看见一株藤蔓附着树干，柔软与坚实相互交缠，你感动于这静美的一幕。让幸福与归属就此驻足吧。你想。不知未来会有怎样一番风雨摧折？也许藤将断、树会倒，也许天会荒，地将老。你又想。那么，请时光停格在此刻吧。停格即是永恒。永恒里若有这静美的一刻，未来可能遭遇的种种劫难，便已得到了安慰与报偿。
(6)保持单纯
因为思虑过多，所以你常常把你的人生复杂化了。明明是活在现在，你却总是念念不忘着过去，又忧心忡忡着未来；坚持携带着过去、未来与现在同行，你的人生当然只有一片拖泥带水。而单纯是一种恩宠状态。单纯地以皮肤感受天气的变化，单纯地以鼻腔品尝雨后的青草香，单纯地以眼睛统摄远山近景如一幅画。单纯地活在当下。而当下其实无所谓是非真假。既然没有是非，就不必思虑；没有真假，就无须念念不忘又忧心忡忡。无是非真假，不就像在做梦一样了吗?是呀，就单纯地把你的人生当成梦境去执行吧。
(7)偶尔&#8217;俗气&#8217;&#8230;
吃多了健康食品，偶尔你也想啃一啃鸭舌头和盐酥鸡。看多了大师名剧，偶尔你也想瞄一瞄耳光摔不完眼泪掉不完的连续剧。听多了古典音乐，偶尔你也想唱一唱爱他一百年又恨他一万年的流行歌曲。你知道健康食品对健胃整肠有意义，大师名剧对培养气质有意义，古典音乐对提升性灵有意义，可是，偶尔你其实并不想让自己时时刻刻活得那么有意。人生不需要把自己绑得那么紧。偶尔的小小放纵，是道德的。灵气充满或许接近大人，但偶尔的俗气会更平易近人。
(8)控制情绪 别浪费了~
今天的你，是不开心的你，因为有人在言语间刺伤了你。你不喜欢吵架，所以你离开；可是你只是离开了那，却没有离开被那人伤害的情境，因此你愈想愈生气。愈有气，你就愈没有力气去理会别的事情，许多更该用心去做去想去处理的事件，就在你漫天漫地的心烦意乱之中，被轻忽被漠视被省略了。因为，你只是一心一意地在生气。在情绪上做文章，这是对自己的浪费，而且是很坏的浪费。毕竟，生气也是要花力气的，而且生气一定伤元气。所以，聪明如你，别让情绪控制了你，当你又要生气之前，不妨轻声地提醒自己一句：“别浪费了。”
(9)抓住最好的时机 绝不错过
你曾经买了一件很喜欢的衣裳却舍不得穿，郑重地供奉在衣柜里；许久之后，当你再看见它的时候，却发现它已经过时了。所以，你就这样与它错过了。你也曾经买了一块漂亮的蛋糕却舍不得吃，郑重地供奉在冰箱里；许久之后，当你再看见它的时候，却发现它已经过期了。所以，你也这样与它错过了。没有在最喜欢的时候上身的衣裳，没有在最可口的时候品尝的蛋糕，就像没有在最想做的时候去做的事情，都是遗憾。生命也有保存期限，想做的事该趁早去做。如果你只是把你的心愿郑重地供奉在心里，却未曾去实行，那么唯一的结果，就是与它错过，一如那件过时的衣裳，一如那块过期的蛋糕。
(10)偶尔的出离轨道
某次你搭火车打算到A地去，中途却忽然临时起意在B地下了车。也许是别致的地名吸引了你，也许是偶然一瞥的风景触动了你，总之，你就这样改变了本来预定的行程，然后经历了一场充满惊奇的意外旅行。A地是你原先的目标，B地却让你体会了小小的冒险。回忆起来，你说，那是一次令你难忘的出轨经验。生命中的许多时候不也如此？心无旁骛地奔赴唯一的目的，不过是履行了原本的行程而已；离开预设的轨道，你才有机会发现其他的风景。
(11)悄悄 悄悄地 回归平静..
曾经有一段时间，你心情低落，甚至懒得拉开窗帘，看着窗外的阳光。因此你当然也忘了去看看，窗台上那一盆每天都需要喝水的玛格丽特。如此不知过了多久，总算有一天，你度过了心情的低潮，同时也想起了你的玛格丽特。天啊，可怜的花，她还活着吗？你战战兢兢地拉开窗帘，却见她迎风招摇，花颜可掬。原来在过去的这段日子里，你虽然忘了喂她喝水，老天却没忘了以雨露眷顾她呢。许多事物悄悄地在你的视线之外进行，而且悄悄地安排好了它们自己。天生万物，天养万物，一切其实无须担心&#8230;&#8230;你只要做的就是做好自己，不留任何遗憾&#8230;足矣。
随机日志C# 中直接执行sql文件 (0)天涯4000万用户密码下载地址 (1)SQL Server 2005中的分区表（一）：什么是分区表？为什么要用分区表？如何创建分区表？ (0)Godaddy主机常见问题集合 (0)MVC (0)局域网访问VMware虚拟机WEB IIS服务 (0)妙用SQL Server聚合函数和子查询迭代求和  (0)提高安全性,不把数据库用户名、密码放进applicationContext.xml中 (0)godaddy空间PHP页面500 Internal Server Error解决办法 (3)匿名委托 (0)]]></description>
			<content:encoded><![CDATA[<p>第一课<br />
一个男人在他妻子洗完澡后准备进浴室洗澡。这时，门铃响了。<br />
妻子迅速用浴巾裹住自己冲到门口。<br />
当她打开门时，邻居鲍勃站在那儿。<br />
在她开口前，鲍勃说，“你如果把浴巾拿掉，我给你800美元。”<br />
想了一会儿，这个女人拿掉浴巾赤裸地站在鲍勃面前。几秒钟后，鲍勃递给她800美元然后离开了。<br />
女人重新裹好浴巾回到屋里。<br />
当她踏进浴室时，丈夫问她，“是谁呀？”<br />
“是邻居鲍勃。”她回答。<br />
“哦，”丈夫说，“他有没有提到还欠我800美元？”<br />
故事寓意：<br />
及时与同舟共济的股东分享重要信息，将会避免不必要的曝光。<span id="more-438"></span></p>
<p>第二课<br />
一个销售员、一个办事员和他们的经理步行去午餐时发现了一盏古代油灯。<br />
他们摩擦油灯，一个精灵跳了出来。<br />
精灵说：“我能满足你们每人一个愿望。”<br />
“我先！我先！”办事员说，“我想去巴哈马群岛，开着快艇，与世隔绝。”<br />
倏！她飞走了。<br />
“该我了！该我了！”销售员说，“我想去夏威夷，躺在沙滩上，有私人女按摩师，免费续杯的冰镇果汁朗姆酒，还有一生中的最爱。”<br />
倏！他飞走了。<br />
“OK, 该你了。”精灵对经理说。<br />
经理回答：“我要那两个蠢货午饭后马上回来工作！”<br />
故事寓意：<br />
永远让你的老板开口先。</p>
<p>第三课<br />
一只鹰坐在高高的树上休息，无所事事。<br />
一只小兔子看见鹰并且问它，“我能象你一样坐着什么都不干吗？”<br />
鹰回答：“行啊，为啥不行。”<br />
于是，兔子坐在鹰下面的地上休息。突然，一只狐狸出现了，它扑到兔子身上把它吃掉了。<br />
故事寓意：<br />
要想坐着无所事事，你必须坐在非常、非常高的位置。</p>
<p>第四课<br />
一只小鸟飞去南方过冬。天实在太冷了。它冻僵了，掉在一片田野上。<br />
它躺在那儿时，一头母牛走过来在它身上拉了一堆屎。<br />
冻僵的小鸟躺在粪堆里，开始感觉到了温暖。<br />
牛粪确实使它暖和过来了。<br />
它躺在温暖的牛粪中，异常高兴，并开始唱起歌来。<br />
一只过路的猫听到鸟叫赶过来看个究竟。<br />
顺着声音，它发现了牛粪下的小鸟，并迅速把它拖出来吃掉了。<br />
故事寓意：<br />
(1) 并不是每个在你身上拉屎的都是你的敌人。<br />
(2) 并不是每个把你拖出粪堆的都是你的朋友。<br />
(3) 当你深陷粪堆中的时候，最好闭上你的鸟嘴</p>
<p>1)学会 沉默<br />
有时候，你被人误解，你不想争辩，所以选择沉默。本来就不是所有的人都得了解你，因此你认为不必对全世界喊话。却也有时候，你被最爱的人误解，你难过到不想争辩，也只有选择沉默。全世界都可以不懂你，但他应该懂，若他竟然不能懂，还有什么话可说?生命中往往有连舒伯特都无言以对的时刻，毕竟不是所有的是非都能条列清楚，甚至可能根本没有真正的是与非。那么，不想说话，就不说吧，在多说无益的时候，也许沉默就是最好的解释。</p>
<p>(2)至少 平静</p>
<p>在你跌入人生谷底的时候，你身旁所有的人都告诉你：要坚强，而且要快乐。坚强是绝对需要的，但是快乐?在这种情形下，恐怕是太为难你了。毕竟，谁能在跌得头破血流的时候还觉得高兴？但是至少可以做到平静。平静地看待这件事，平静地把其他该处理的事处理好。平静，没有快乐，也没有不快乐。</p>
<p>(3)学会弯腰 这会是我意外的收获</p>
<p>和别人发生意见上的纷歧，甚造成言语上的冲突，所以你闷闷不乐，因为你觉得都是别人恶意。别再耿耿于怀了，回家去擦地板吧。拎一块抹布，弯下腰，双膝着地，把你面前这张地板的每个角落来回擦拭干净。然后重新省思自己在那场冲突，所说过的每一句话。现在，你发现自己其实也有不对的地方了，是不是?你渐渐心平气和了，是不是?有时候你必须学习弯腰，因为这个动作可以让你谦卑。劳动身体的同时，你也擦亮了自己的心绪。而且，你还拥有了一张光洁的地板呢。这是你的第二个收获。<br />
(4)不要想 如果 当初</p>
<p>你说，人生是一条有无限多岔口的长路，永远在不停地做选择。如果只是选择吃炒面或炒饭，影响似乎不大，但选择读什么科系、做什么工作、结婚或不结婚、要不要有孩子，每一个选择都影响深远，而不同的选择也必定造就完全不一样的人生。你又说，生命中不可承受之情，就在于人生没有重来的机会啊。如果当初如何如何，现在就不会怎样怎样&#8230;这种充满怅然的喃喃自语，还是别再多说了吧。每一个岔口的选择其实没有真正的好与坏，只要把人生看成是自己。独一无二的创作，就不会频频回首如果当初做了不一样的选择。</p>
<p>(5)努力吧 不管成功与否 至少曾经美丽</p>
<p>漫步林间，你看见一株藤蔓附着树干，柔软与坚实相互交缠，你感动于这静美的一幕。让幸福与归属就此驻足吧。你想。不知未来会有怎样一番风雨摧折？也许藤将断、树会倒，也许天会荒，地将老。你又想。那么，请时光停格在此刻吧。停格即是永恒。永恒里若有这静美的一刻，未来可能遭遇的种种劫难，便已得到了安慰与报偿。</p>
<p>(6)保持单纯</p>
<p>因为思虑过多，所以你常常把你的人生复杂化了。明明是活在现在，你却总是念念不忘着过去，又忧心忡忡着未来；坚持携带着过去、未来与现在同行，你的人生当然只有一片拖泥带水。而单纯是一种恩宠状态。单纯地以皮肤感受天气的变化，单纯地以鼻腔品尝雨后的青草香，单纯地以眼睛统摄远山近景如一幅画。单纯地活在当下。而当下其实无所谓是非真假。既然没有是非，就不必思虑；没有真假，就无须念念不忘又忧心忡忡。无是非真假，不就像在做梦一样了吗?是呀，就单纯地把你的人生当成梦境去执行吧。</p>
<p>(7)偶尔&#8217;俗气&#8217;&#8230;</p>
<p>吃多了健康食品，偶尔你也想啃一啃鸭舌头和盐酥鸡。看多了大师名剧，偶尔你也想瞄一瞄耳光摔不完眼泪掉不完的连续剧。听多了古典音乐，偶尔你也想唱一唱爱他一百年又恨他一万年的流行歌曲。你知道健康食品对健胃整肠有意义，大师名剧对培养气质有意义，古典音乐对提升性灵有意义，可是，偶尔你其实并不想让自己时时刻刻活得那么有意。人生不需要把自己绑得那么紧。偶尔的小小放纵，是道德的。灵气充满或许接近大人，但偶尔的俗气会更平易近人。</p>
<p>(8)控制情绪 别浪费了~</p>
<p>今天的你，是不开心的你，因为有人在言语间刺伤了你。你不喜欢吵架，所以你离开；可是你只是离开了那，却没有离开被那人伤害的情境，因此你愈想愈生气。愈有气，你就愈没有力气去理会别的事情，许多更该用心去做去想去处理的事件，就在你漫天漫地的心烦意乱之中，被轻忽被漠视被省略了。因为，你只是一心一意地在生气。在情绪上做文章，这是对自己的浪费，而且是很坏的浪费。毕竟，生气也是要花力气的，而且生气一定伤元气。所以，聪明如你，别让情绪控制了你，当你又要生气之前，不妨轻声地提醒自己一句：“别浪费了。”</p>
<p>(9)抓住最好的时机 绝不错过</p>
<p>你曾经买了一件很喜欢的衣裳却舍不得穿，郑重地供奉在衣柜里；许久之后，当你再看见它的时候，却发现它已经过时了。所以，你就这样与它错过了。你也曾经买了一块漂亮的蛋糕却舍不得吃，郑重地供奉在冰箱里；许久之后，当你再看见它的时候，却发现它已经过期了。所以，你也这样与它错过了。没有在最喜欢的时候上身的衣裳，没有在最可口的时候品尝的蛋糕，就像没有在最想做的时候去做的事情，都是遗憾。生命也有保存期限，想做的事该趁早去做。如果你只是把你的心愿郑重地供奉在心里，却未曾去实行，那么唯一的结果，就是与它错过，一如那件过时的衣裳，一如那块过期的蛋糕。</p>
<p>(10)偶尔的出离轨道</p>
<p>某次你搭火车打算到A地去，中途却忽然临时起意在B地下了车。也许是别致的地名吸引了你，也许是偶然一瞥的风景触动了你，总之，你就这样改变了本来预定的行程，然后经历了一场充满惊奇的意外旅行。A地是你原先的目标，B地却让你体会了小小的冒险。回忆起来，你说，那是一次令你难忘的出轨经验。生命中的许多时候不也如此？心无旁骛地奔赴唯一的目的，不过是履行了原本的行程而已；离开预设的轨道，你才有机会发现其他的风景。</p>
<p>(11)悄悄 悄悄地 回归平静..</p>
<p>曾经有一段时间，你心情低落，甚至懒得拉开窗帘，看着窗外的阳光。因此你当然也忘了去看看，窗台上那一盆每天都需要喝水的玛格丽特。如此不知过了多久，总算有一天，你度过了心情的低潮，同时也想起了你的玛格丽特。天啊，可怜的花，她还活着吗？你战战兢兢地拉开窗帘，却见她迎风招摇，花颜可掬。原来在过去的这段日子里，你虽然忘了喂她喝水，老天却没忘了以雨露眷顾她呢。许多事物悄悄地在你的视线之外进行，而且悄悄地安排好了它们自己。天生万物，天养万物，一切其实无须担心&#8230;&#8230;你只要做的就是做好自己，不留任何遗憾&#8230;足矣。</p>
<h3  class="related_post_title">随机日志</h3><ul class="related_post"><li><a href="http://blog.xcmd.net/2010-03-25-21/phpmyadmin%e5%87%ba%e7%8e%b0%e6%97%a0%e6%b3%95%e8%bd%bd%e5%85%a5mcrypt-%e6%89%a9%e5%b1%95%e8%af%b7%e6%a3%80%e6%9f%a5php%e9%85%8d%e7%bd%ae%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95.html" title="phpMyAdmin出现无法载入mcrypt 扩展,请检查PHP配置的解决方法">phpMyAdmin出现无法载入mcrypt 扩展,请检查PHP配置的解决方法</a> (0)</li><li><a href="http://blog.xcmd.net/2010-08-16-11/%e4%ba%94%e4%b8%aa%e5%bd%b1%e5%93%8dmysql%e6%80%a7%e8%83%bd%e7%9a%84%e5%85%b3%e9%94%ae%e9%85%8d%e7%bd%ae.html" title="五个影响mysql性能的关键配置">五个影响mysql性能的关键配置</a> (3)</li><li><a href="http://blog.xcmd.net/2010-04-28-16/%e6%9c%aa%e6%9d%a5%e7%9a%84%e5%88%9b%e6%96%b0%e8%a6%81%e9%9d%a080%e5%90%8e%e3%80%8190%e5%90%8e.html" title="未来的创新要靠80后、90后">未来的创新要靠80后、90后</a> (0)</li><li><a href="http://blog.xcmd.net/2010-07-29-21/%e7%90%86%e8%a7%a3c%e5%80%bc%e7%b1%bb%e5%9e%8b%e4%b8%8e%e5%bc%95%e7%94%a8%e7%b1%bb%e5%9e%8b.html" title="理解C#值类型与引用类型">理解C#值类型与引用类型</a> (0)</li><li><a href="http://blog.xcmd.net/2010-03-22-13/wordpress%e4%b8%8d%e7%94%a8%e6%8f%92%e4%bb%b6%e6%9c%80%e6%96%b0%e6%96%87%e7%ab%a0%e7%83%ad%e8%af%84%e6%96%87%e7%ab%a0%e9%9a%8f%e6%9c%ba%e6%96%87%e7%ab%a0.html" title="wordpress不用插件:最新文章,热评文章,随机文章">wordpress不用插件:最新文章,热评文章,随机文章</a> (0)</li><li><a href="http://blog.xcmd.net/2010-08-31-20/%e7%bb%b4%e5%9f%ba%e6%8f%ad%e5%af%86%e9%83%a8%e5%88%86%e6%9c%8d%e5%8a%a1%e5%99%a8%e8%bd%ac%e7%a7%bb%e8%87%b3%e5%9c%b0%e4%b8%8b30%e7%b1%b3%e6%a0%b8%e6%8e%a9%e4%bd%93.html" title="维基揭密部分服务器转移至地下30米核掩体">维基揭密部分服务器转移至地下30米核掩体</a> (0)</li><li><a href="http://blog.xcmd.net/2010-05-25-09/%e5%9b%bd%e5%a4%96%e4%b8%bb%e6%9c%ba%e7%9a%84%e6%97%b6%e9%97%b4%e6%80%8e%e4%b9%88%e6%94%b9%e6%88%90%e4%b8%8e%e5%8c%97%e4%ba%ac%e6%97%b6%e9%97%b4%e4%b8%80%e8%87%b4.html" title="国外主机的时间怎么改成与北京时间一致">国外主机的时间怎么改成与北京时间一致</a> (0)</li><li><a href="http://blog.xcmd.net/2010-11-15-21/%e5%93%a5%e6%98%af%e4%bc%a0%e5%a5%87%e4%b8%89%e8%bd%ae%e5%93%a5-%e7%81%ab%e8%bd%a6%e5%93%a5-%e5%a5%94%e8%b7%91%e5%93%a5-%e7%89%9b%ef%bd%82%e9%97%aa%e9%97%aa-%e6%94%be%e5%85%89%e8%8a%92%ef%bc%81.html" title="哥是传奇:三轮哥 火车哥 奔跑哥 牛Ｂ闪闪 放光芒！">哥是传奇:三轮哥 火车哥 奔跑哥 牛Ｂ闪闪 放光芒！</a> (3)</li><li><a href="http://blog.xcmd.net/2011-10-12-17/mysql-%e4%bf%ae%e6%94%b9root%e5%af%86%e7%a0%81.html" title="MYsql 修改root密码">MYsql 修改root密码</a> (0)</li><li><a href="http://blog.xcmd.net/2010-06-02-17/%e5%89%8d%e4%b8%96%e6%98%af%e8%b0%81%e5%9f%8b%e7%9a%84%e6%88%91%ef%bc%9f.html" title="前世是谁埋的我？ ">前世是谁埋的我？ </a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xcmd.net/2012-02-15-14/%e6%8a%8a%e5%ae%83%e7%9c%8b%e5%ae%8c%ef%bc%8c%e4%bd%a0%e4%b8%80%e5%ae%9a%e4%bc%9a%e6%9c%89%e6%94%b6%e8%8e%b7.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程</title>
		<link>http://blog.xcmd.net/2012-02-08-09/vc2005%e4%bb%8e%e5%bc%80%e5%8f%91mfc-activex-ocx%e6%8e%a7%e4%bb%b6%e5%88%b0%e5%8f%91%e5%b8%83%e5%88%b0-net%e7%bd%91%e7%ab%99%e7%9a%84%e5%85%a8%e9%83%a8%e8%bf%87%e7%a8%8b.html</link>
		<comments>http://blog.xcmd.net/2012-02-08-09/vc2005%e4%bb%8e%e5%bc%80%e5%8f%91mfc-activex-ocx%e6%8e%a7%e4%bb%b6%e5%88%b0%e5%8f%91%e5%b8%83%e5%88%b0-net%e7%bd%91%e7%ab%99%e7%9a%84%e5%85%a8%e9%83%a8%e8%bf%87%e7%a8%8b.html#comments</comments>
		<pubDate>Wed, 08 Feb 2012 01:40:04 +0000</pubDate>
		<dc:creator>冰点</dc:creator>
				<category><![CDATA[C#/ASP.NET]]></category>
		<category><![CDATA[C|C++]]></category>
		<category><![CDATA[MFC ActiveX ocx控件]]></category>
		<category><![CDATA[VC2005]]></category>

		<guid isPermaLink="false">http://blog.xcmd.net/?p=405</guid>
		<description><![CDATA[开篇语：最近在弄ocx控件发布到asp.net网站上使用，就是用户在使用过程中，自动下载安装ocx控件。（此文章也是总结了网上好多人写的文章，我只是汇总一下，加上部分自己的东西，在这里感谢所有在网上发表相关内容的朋友们。）
ActiveX控件用于Web的过程是将控件嵌入主页中，用户通过浏览器访问该主页时，将主页中的控件下载，并在用户机器上注册，以后就可在用户的浏览器上运行。控件下载一次后就驻留在用户本地机器上，下次再访问相同的主页时，可不再下载该控件，而是直接运行用户本地的控件。这里控件容器就是浏览器，用户不需要通过浏览器调用控件的属性或方法。因此，开发面向Web的ActiveX控件比开发桌面的控件还要简单些，所复杂的是如何将该控件很好地嵌入主页，使用户能正常浏览。下面介绍这个问题。
一． 创建MFC ActiveX项目
1. 打开VS2005新建MFC项目。这里我们取名为“ActiveXDemo”。

2. 输入项目名称为“ActiveXDemo”和项目位置。点击“确定”按钮，打开向导对话框。

WoSign 免费提供的时间戳服务URL： http://timestamp.wosign.com/timestamp 
时间戳服务非常重要，添加时间戳后，即使您的代码签名证书已经过期，但由于您的代码是在证书有效期内签名的，则时间戳服务保证了此代码仍然可信，最终用户仍然可以放心下载，使得即使代码签名证书已经过期，您也无需重签和重新发布已经签名的代码。
3. 选择“控件设置”选项卡，具体设置可参考上图。其它选项卡为默认设置。最后点击“完成”按钮保存设置。
二． 添加控件方法
VC2005会为我们自动创建好MFC ActiveX程序框架，我们只要给该ActiveX控件添加方法即可。现在我们给控件添加一个“AddFun”方法，这个方法是将两个数相加并返回结果。
1. 点击“视图”，打开“类视图”窗口。

2. 展开“ActiveXDemoLib”项，选中“_DActiveXDemo”项。点击鼠标右键，选择“添加”下的“添加方法”。

3. 打开添加方法向导窗口。因为我们是添加一个加法方法，所以我们设置的返回类型为LONG型，方法名设为AddFun，添加两个LONG类型参数Add1，Add2。

4. 其它为默认设置，点击“完成”按钮完成添加方法。接下来我们打开“解决方案资源管理器”打开“ActiveXDemoCtrl.cpp”文件。

5. 打开代码视图，我们会发现VC2005已经为我们添加了一个“AddFun”方法，我们在方法内添加“return Add1 + Add2;”语句。

 
三、MFC Activex 安全问题：
　1、在默认环境下，编译的MFC Activex控件，只能在本地代码中运行，即在http://localhost/xxx/xxx.htm中执行，而在http://127.0.0.1/xxx/xxx.htm中提示无相关属性,需要设置其初始化和脚本运行的安全性
　　ActiveX在远程IE页面上执行，需要实现安全接口。
　　在ATL写的ActiveX中，用IObjectSafety。
　　http://support.microsoft.com/kb/168371/en-us
　　在MFC写的ActiveX中，直接修改注册表。
　　http://support.microsoft.com/kb/161873/en-us
　　mfc实现的ocx，要在app实现文件中包括两个文件：
在ActivexDemo.cpp 文件中实现以下方法
代码
#include "stdafx.h"
#include "ActivexDemo.h"
#include &#60;comcat.h&#62;
#include &#60;objsafe.h&#62;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

CActivexDemoApp theApp;

const GUID CDECL BASED_CODE _tlid =
{ 0x344B8576, 0xAB2C, 0x4D38, { 0xAE, 0x7, 0x73, 0x74, 0x22, 0x89, 0x72, 0xEA } };
const WORD _wVerMajor = 1;
const WORD [...]]]></description>
			<content:encoded><![CDATA[<p>开篇语：最近在弄ocx控件发布到asp.net网站上使用，就是用户在使用过程中，自动下载安装ocx控件。（此文章也是总结了网上好多人写的文章，我只是汇总一下，加上部分自己的东西，在这里感谢所有在网上发表相关内容的朋友们。）</p>
<p>ActiveX控件用于Web的过程是将控件嵌入主页中，用户通过浏览器访问该主页时，将主页中的控件下载，并在用户机器上注册，以后就可在用户的浏览器上运行。控件下载一次后就驻留在用户本地机器上，下次再访问相同的主页时，可不再下载该控件，而是直接运行用户本地的控件。这里控件容器就是浏览器，用户不需要通过浏览器调用控件的属性或方法。因此，开发面向Web的ActiveX控件比开发桌面的控件还要简单些，所复杂的是如何将该控件很好地嵌入主页，使用户能正常浏览。下面介绍这个问题。<span id="more-405"></span></p>
<h3>一． 创建MFC ActiveX项目</h3>
<p>1. 打开VS2005新建MFC项目。这里我们取名为“ActiveXDemo”。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014011l0M.jpg" border="0" alt="" width="593" height="394" /></p>
<p>2. 输入项目名称为“ActiveXDemo”和项目位置。点击“确定”按钮，打开向导对话框。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014018EoU.jpg" border="0" alt="" width="553" height="405" /></p>
<p>WoSign 免费提供的时间戳服务URL： <strong>http://timestamp.wosign.com/timestamp </strong></p>
<p>时间戳服务非常重要，添加时间戳后，即使您的代码签名证书已经过期，但由于您的代码是在证书有效期内签名的，则时间戳服务保证了此代码仍然可信，最终用户仍然可以放心下载，使得即使代码签名证书已经过期，您也无需重签和重新发布已经签名的代码。</p>
<p>3. 选择“控件设置”选项卡，具体设置可参考上图。其它选项卡为默认设置。最后点击“完成”按钮保存设置。</p>
<h3>二． 添加控件方法</h3>
<p>VC2005会为我们自动创建好MFC ActiveX程序框架，我们只要给该ActiveX控件添加方法即可。现在我们给控件添加一个“AddFun”方法，这个方法是将两个数相加并返回结果。</p>
<p>1. 点击“视图”，打开“类视图”窗口。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014023Xek.jpg" border="0" alt="" width="355" height="330" /></p>
<p>2. 展开“ActiveXDemoLib”项，选中“_DActiveXDemo”项。点击鼠标右键，选择“添加”下的“添加方法”。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014029kOA.jpg" border="0" alt="" width="313" height="321" /></p>
<p>3. 打开添加方法向导窗口。因为我们是添加一个加法方法，所以我们设置的返回类型为LONG型，方法名设为AddFun，添加两个LONG类型参数Add1，Add2。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014034TQB.jpg" border="0" alt="" width="553" height="405" /></p>
<p>4. 其它为默认设置，点击“完成”按钮完成添加方法。接下来我们打开“解决方案资源管理器”打开“ActiveXDemoCtrl.cpp”文件。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014038c63.jpg" border="0" alt="" width="357" height="380" /></p>
<p>5. 打开代码视图，我们会发现VC2005已经为我们添加了一个“AddFun”方法，我们在方法内添加“return Add1 + Add2;”语句。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014041tmf.jpg" border="0" alt="" width="554" height="364" /></p>
<p><strong> </strong></p>
<h3>三、MFC Activex 安全问题：</h3>
<p>　1、在默认环境下，编译的MFC Activex控件，只能在本地代码中运行，即在http://localhost/xxx/xxx.htm中执行，而在http://127.0.0.1/xxx/xxx.htm中提示无相关属性,需要设置其初始化和脚本运行的安全性</p>
<p>　　ActiveX在远程IE页面上执行，需要实现安全接口。</p>
<p>　　在ATL写的ActiveX中，用IObjectSafety。</p>
<p>　　http://support.microsoft.com/kb/168371/en-us</p>
<p>　　在MFC写的ActiveX中，直接修改注册表。</p>
<p>　　http://support.microsoft.com/kb/161873/en-us</p>
<p>　　mfc实现的ocx，要在app实现文件中包括两个文件：</p>
<p>在ActivexDemo.cpp 文件中实现以下方法</p>
<p>代码</p>
<pre>#include "stdafx.h"
#include "ActivexDemo.h"
#include &lt;comcat.h&gt;
#include &lt;objsafe.h&gt;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif</pre>
<div>
<pre>CActivexDemoApp theApp;</pre>
</div>
<pre>const GUID CDECL BASED_CODE _tlid =
{ 0x344B8576, 0xAB2C, 0x4D38, { 0xAE, 0x7, 0x73, 0x74, 0x22, 0x89, 0x72, 0xEA } };
const WORD _wVerMajor = 1;
const WORD _wVerMinor = 0;</pre>
<pre>// CActivexDemoApp::InitInstance - DLL 初始化</pre>
<pre>BOOL CActivexDemoApp::InitInstance()
{
BOOL bInit = COleControlModule::InitInstance();</pre>
<pre>if (bInit)
{
// TODO: 在此添加您自己的模块初始化代码。
}</pre>
<pre>return bInit;
}</pre>
<pre>// CActivexDemoApp::ExitInstance - DLL 终止</pre>
<pre>int CActivexDemoApp::ExitInstance()
{
// TODO: 在此添加您自己的模块终止代码。</pre>
<pre>return COleControlModule::ExitInstance();
}</pre>
<pre>// 创建组件种类
HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription)
{
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&amp;pcr);
if (FAILED(hr)) return hr;
// Make sure the HKCRComponent Categories{..catid...}
// key is registered.
CATEGORYINFO catinfo;
catinfo.catid = catid;
catinfo.lcid = 0x0409 ; // english
// Make sure the provided description is not too long.
// Only copy the first 127 characters if it is.
int len = wcslen(catDescription);
if (len&gt;127) len = 127;
wcsncpy(catinfo.szDescription, catDescription, len);
// Make sure the description is null terminated.
catinfo.szDescription[len] = '';
hr = pcr-&gt;RegisterCategories(1, &amp;catinfo);
pcr-&gt;Release();
return hr;
}</pre>
<pre>// 注册组件种类
HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
 {
    // Register your component categories information.
    ICatRegister* pcr = NULL ;
    HRESULT hr = S_OK ;
    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&amp;pcr);
    if (SUCCEEDED(hr)) {
      // Register this category as being "implemented" by the class.
      CATID rgcatid[1];
      rgcatid[0] = catid;
      hr = pcr-&gt;RegisterClassImplCategories(clsid, 1, rgcatid);
    }
    if (pcr != NULL) pcr-&gt;Release();
    return hr;
}
// 卸载组件种类
HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
 {
    ICatRegister* pcr = NULL ;
    HRESULT hr = S_OK ;
    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
            NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&amp;pcr);
    if (SUCCEEDED(hr)) {
      // Unregister this category as being "implemented" by the class.
      CATID rgcatid[1] ;
      rgcatid[0] = catid;
      hr = pcr-&gt;UnRegisterClassImplCategories(clsid, 1, rgcatid);
    }
    if (pcr != NULL) pcr-&gt;Release();
    return hr;
}
STDAPI DllRegisterServer(void)
{
    HRESULT hr;
    AFX_MANAGE_STATE(_afxModuleAddrThis);
    if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
        return ResultFromScode(SELFREG_E_TYPELIB);
    if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
        return ResultFromScode(SELFREG_E_CLASS);
    // 标记控件初始化安全.
    // 创建初始化安全组件种类
    hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls safely initializable from persistent data!");
    if (FAILED(hr)) return hr;
    // 注册初始化安全
    hr = RegisterCLSIDInCategory(BASED_CODE _tlid , CATID_SafeForInitializing);
    if (FAILED(hr)) return hr;
    // 标记控件脚本安全
    // 创建脚本安全组件种类
    hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls safely scriptable!");
    if (FAILED(hr)) return hr;
    // 注册脚本安全组件种类
    hr = RegisterCLSIDInCategory(BASED_CODE _tlid , CATID_SafeForScripting);
    if (FAILED(hr)) return hr;
    return NOERROR;
}
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
    HRESULT hr;
    AFX_MANAGE_STATE(_afxModuleAddrThis);
    if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
        return ResultFromScode(SELFREG_E_TYPELIB);
    if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
        return ResultFromScode(SELFREG_E_CLASS);
    // 删除控件初始化安全入口.
    hr=UnRegisterCLSIDInCategory(BASED_CODE _tlid , CATID_SafeForInitializing);
    if (FAILED(hr)) return hr;
    // 删除控件脚本安全入口
    hr=UnRegisterCLSIDInCategory(BASED_CODE _tlid , CATID_SafeForScripting);
    if (FAILED(hr)) return hr;
    return NOERROR;
}</pre>
<p>现在控件就可以在自注册时就注册为安全控件了。</p>
<p>2、设置项目属性 将配置类型设置成静态库(.lib)</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014107XzW.jpg" border="0" alt="" width="683" height="448" /></p>
<p>3、 最后生成项目，ocx控件就产生了。</p>
<h3>ActiveX打包与发布</h3>
<p>在VS2005或VS2008安装后发现路径**VC7Common7ToolsBin下有许多小工具，我对带有Cert的文件比较感兴趣。经过研究，发现是有关证书和签名的，当然，该证书未被证书认证机构认可。下面列出这些工具和我的使用心得。<br />
1。Makecert.exe &#8212;证书创建工具<br />
2。Cert2Spc.exe &#8212;发行者证书测试工具<br />
3。Signcode.exe &#8212;文件签名工具（VS2008带的是signtool）<br />
一、ActiveX发布步骤</p>
<p>在这里简单说明下，打包activeX需要制作证书，具体用到makecert 、cert2spc 、signtool 这三个VS提供的工具，工具在VS文件夹里面，以下制作过程需要在工具所在的文件夹下完成！<br />
1、单击&#8221;开始&#8221;&#8211;&gt;&#8221;运行（R）&#8221;&#8211;&gt;输入&#8221;cmd&#8221;&#8211;&gt;回车&#8211;&gt;进入到操作的控件所在的目录（需要将上面所说的工具，和ocx控件放到一个文件夹下）；<br />
2、创建PVK文件(私人密匙文件)，在命令行中输入&#8221;makecert -sk demo demo.pvk -n CN=XXXXXXX公司&#8221;，然后回车；</p>
<p>sk-表示主题的密钥容器位置，ss-主题的证书存储名称， n-证书颁发对象，r-证书存储位置；</p>
<p>3、创建CER文件(公司证书)，在命令行中输入&#8221;makecert -sk demo.pvk demo.cer&#8221;，然后回车，如图8所示，若出现&#8221;Successed&#8221;提示，则会在E: demo目录下生成demo.cer文件；</p>
<p>sk-表示主题的密钥容器位置，is-颁发者的证书存储名称， n-证书颁发对象，ic-颁发者的证书存储位置，-$-授权范围（用于代码签名）；</p>
<p>4、创建SPC测试软件出版商证明书，在命令行中输入&#8221;cert2spc demo.cer demo.spc&#8221;，然后回车；</p>
<p>5、创建INF文件，用记录本编辑以下信息：</p>
<pre>代码</pre>
<div>
<pre><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->[version]</pre>
</div>
<pre>signature="$CHICAGO$"</pre>
<pre>AdvancedINF=2.0</pre>
<pre>[Add.Code]</pre>
<pre>ActivexDemo.ocx=ActivexDemo.ocx</pre>
<pre>[ActivexDemo.ocx]</pre>
<p>file-win32-x86=thiscab<br />
//告诉ie到哪里去得到这个dll，file一共包括三个部分，第一部分是file，这个永远都是这样的（至少目前来说）；第二部分告诉声明支持的OS，win32表示windows，mac就是苹果MAC OX了；第三部分是CPU类型，比如说x86、 ppc (Power PC)、 mips或者alpha了<br />
//其中“thiscab”是一个关键字，表示 CAB 包含此 DLL，也可通过指定一条绝对或相对路径，从一个 HTTP 位置下载所需的 DLL，<br />
例如: file-win32-x86=http://www.mysite.com/mydir/NEEDED.DLL<br />
RegisterServer=yes</p>
<p>clsid={468E4531-F890-47EC-8368-3BDA4448FF08}<br />
//“clsid”是将要安装的控件的 CLSID<br />
DestDir=11<br />
//它的值是dll将要存到本地硬盘的位置，如果它的值是10，则将dll放到Windows或者WinNT下；如果是11，则放到WindowsSystem或者WinNTSystem32下；如果未指定任何 DestDir（典型情况），则代码安装在固定的 OCCACHE 目录中。<br />
FileVersion=1,0,0,1<br />
//说明了atl90.dll的版本号</p>
<p>6、创建CAB文件，在命令行中输入&#8221;cabarc -s 6144 n demo.cab atl90.dll Polygon.dll demo.inf&#8221;，-s 选项表示在压缩文件中保留用于代码签名的空间，n命令指定希望创建 CAB 文件，然后回车；</p>
<p>7、使用Code Signing Wizard签署一个CAB文件，在控制台输入signtool signwizard 进入到signtool窗体中;</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014110JA4.jpg" border="0" alt="" width="503" height="387" /></p>
<p>8、单击&#8221;下一步（N）&#8221;按钮，选择要进行数字签名的且已做成CAB包的文件Dome.cab文件；</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014118p1U.jpg" border="0" alt="" width="503" height="387" /></p>
<p>9、选择好CAB包后单击&#8221;下一步（N）&#8221;按钮，在选择想要的签名类型里选择&#8221;自定议（C）&#8221;并单击&#8221;下一步（N）&#8221;按钮；</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014121beW.jpg" border="0" alt="" width="503" height="387" /></p>
<p>10、接下来单击&#8221;从文件选择（F）&#8221;按钮，选择刚刚制作的demo.cer；</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014125pss.jpg" border="0" alt="" width="503" height="387" /></p>
<p>11、在单击&#8221;下一步（N）&#8221;，然后选择&#8221;CSP中的私钥（K）&#8221;；</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014131qL5.jpg" border="0" alt="" width="503" height="387" /></p>
<p>12、在单击“下一步（<span style="text-decoration: underline;">N</span>）”按钮，然后在散列算法中选择“shal”，并单击“下一步（<span style="text-decoration: underline;">N</span>）”按钮。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014138BrH.jpg" border="0" alt="" width="502" height="387" /></p>
<p>13、在&#8221;证书路径中的证书&#8221;中选择&#8221;证书路径中的所有证书，包括根证书（C）&#8221;，在&#8221;其它证书（可选）&#8221;中选择&#8221;包括在以下PKCS #7 证书（.p7b）文件中的证书（P）：&#8221;，并单击&#8221;浏览（R）&#8230;&#8221;按钮选择demo.spc文件，选择完后单击&#8221;下一步（N）&#8221;按钮；</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014146o7K.jpg" border="0" alt="" width="503" height="387" /></p>
<p>14、接下来在弹出的&#8221;数据描述&#8221;窗口中输入公司的名称和网址并单击&#8221;下一步（N）&#8221;按钮；</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014149H93.jpg" border="0" alt="" width="503" height="387" /></p>
<p>15、现大部份工作都已完成，在接下来的一步当中是可选的操作，其作用只是为CAB加入时间戳，此步骤完全可以不做，VeriSign: http://timestamp.verisign.com/scripts/timstamp.dll；</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014153WqO.jpg" border="0" alt="" width="503" height="387" /></p>
<p>16、完成，单击&#8221;下一步（N）&#8221;按钮便可来到数字签名向导的最后一步，即操作总览，如图26所示，单击&#8221;完成&#8221;按钮便可大功告成；</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014158apk.jpg" border="0" alt="" width="503" height="387" /></p>
<h3>下面是微软代码签名证书(.pvk/.spc)签名指南的演示</h3>
<p>本使用指南演示如何使用WoSign代码签名证书来给微软代码签名,Thawte和VeriSign代码签名证书也是使用同样方法,只是使用不同的时间戳URL。</p>
<p>用户在在线申请代码签名证书时会生成证书私钥文件，如：myCert.pvk，而代码签名证书成功颁发后的证书文件为公钥文件，如：myCert.spc，又称：软件发行证书(Software Publishing Certificate) 。 代码签名证书一般都是采用公钥和私钥分离的两个文件方式，适合于 DOS 命令行方式的代码签名。如果您您希望把代码签名证书导入到Windows证书存储区中，从而简化签名操作，请参考：<a href="http://www.wosign.com/support/PVK_SPC2PFX.htm">不同证书格式转换指南</a>。</p>
<p>WoSign代码签名证书的根证书链为： <a href="http://www.wosign.com/Root/UTN_Object.cer">UTN-USERFirst-Object </a>- <a href="http://www.wosign.com/Root/WoSign_CodeSigning.crt">WoSign Code Signing Authority </a></p>
<p>使用微软的 <strong>SignCode.exe</strong> 就可以对微软的代码进行签名，如果您没有此文件，点击 <a href="http://www.wosign.com/download/signtool.rar">这里 </a>下载。 Signcode.exe 可以使用 DOS 命令行方式实现签名，我们推荐用户使用数字签名向导方式，简单方便。请注意：如果您开发的ActiveX为IE加载项，请先数字签名每个CAB文件中的.dll和.ocx等文件，再把这些文件打包成.cab文件后再数字签名.cab文件，以确保所有IE加载项都被IE验证和信任，否则会显示“未验证”而可能影响正常运行。</p>
<p>具体签名向导过程如下：</p>
<p>(1) 运行 Signcode.exe ， 要求您选择需要签名的文件，支持：可执行文件 (*.exe; *.dll; *.ocx) ； Cabinet 打包文件 (*.cab) 和目录文件 (*.cat) ，如下图 1 所示 ( 如： TestSign.cab) ，请注意：如果签名的文件已经有数字签名，则会被新的签名覆盖：</p>
<p><span style="color: #0000ff; font-size: x-small;"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014201C4T.gif" border="0" alt="" /></span></p>
<p><span style="color: #0000ff; font-size: x-small;">(2) 点击“下一步”后，如下图 2 所示，会要求您选择“签名类型”，缺省的“典型”签名类型；请选择“自定义” 签名类型：</span></p>
<p><span style="color: #0000ff; font-size: x-small;"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/01420495v.gif" border="0" alt="" width="503" height="358" /></span></p>
<p><span style="color: #0000ff; font-size: x-small;">(3) 如下图 3 所示，点击“从文件选择”签名证书 ( 公钥文件 )，如： WotoneCS.spc ：</span></p>
<p><span style="color: #0000ff; font-size: x-small;"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014206ZTb.gif" border="0" alt="" width="503" height="358" /></span></p>
<p><span style="color: #0000ff; font-size: x-small;">(4) 点击“下一步”后，如下图 4 所示，会要求您选择私钥文件，如： WotoneCS.pvk ，其他参数不用动：</span></p>
<p><span style="color: #0000ff; font-size: x-small;"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014208zpS.gif" border="0" alt="" width="503" height="358" /></span></p>
<p><span style="color: #0000ff; font-size: x-small;">(5) 点击“下一步”后，如下图 5 所示，会提示要求输入私钥密码：</span></p>
<p><span style="color: #0000ff; font-size: x-small;"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014211GBM.gif" border="0" alt="" width="503" height="358" /></span></p>
<p><span style="color: #0000ff; font-size: x-small;">(6) 点击“下一步”后，如下图 6 所示，会提示要求选择散列算法 ( 摘要算法、缩微图算法 ) ，缺省为 sha1 ，也可以选 md5 ：</span></p>
<p><span style="color: #0000ff; font-size: x-small;"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014213OQg.gif" border="0" alt="" width="503" height="358" /></span></p>
<p><span style="color: #0000ff; font-size: x-small;">(7) 点击“下一步”后，如下图 7 所示，选择哪些证书包括到数字签名中，直接点击“下一步”即可，即选择缺省的包括根证书：</span></p>
<p><span style="color: #0000ff; font-size: x-small;"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014215U04.gif" border="0" alt="" width="503" height="358" /></span></p>
<p><span style="color: #0000ff; font-size: x-small;">(8) 如下图 8 所示，要求填写该签名代码的功能描述，推荐一定要认真填写，因为此信息将会在最终用户下载此代码时显示，有助于最终用户了解此代码的功能以确定是否下载安装。第一行“描述”是指此代码的功能文字描述，第二行“ Web 位置”则让最终用户点击文字描述来详细了解此代码的功能和使用方法等，本演示中的“ Web 位置”为WoTrust代码签名证书简介页面：</span></p>
<p><span style="color: #0000ff; font-size: x-small;"><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014218okt.gif" border="0" alt="" width="503" height="380" /></span></p>
<p><span style="color: #0000ff; font-size: x-small;">(9) 点击“下一步”后，如下图 9 所示，选中“将时间戳添加到数据中”，请使用:</span></p>
<p><span style="color: #0000ff; font-size: x-small;"> </span></p>
<p>WoSign 免费提供的时间戳服务URL： <strong>http://timestamp.wosign.com/timestamp </strong></p>
<p>时间戳服务非常重要，添加时间戳后，即使您的代码签名证书已经过期，但由于您的代码是在证书有效期内签名的，则时间戳服务保证了此代码仍然可信，最终用户仍然可以放心下载，使得即使代码签名证书已经过期，您也无需重签和重新发布已经签名的代码。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014222UOK.gif" border="0" alt="" width="502" height="380" /></p>
<p>(10) 点击“下一步”后，如下图 10 所示，会提示已经完成数字签名向导，点击“完成”后还会提示您输入私钥密码，就完成代码签名证书的代码签名。</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/0142271Sc.gif" border="0" alt="" width="503" height="358" /></p>
<p>(11) 现在，需要使用 chktrust.exe 来查验已经签名的代码， chktrust.exe 文件已经打包在</p>
<div><a href="http://www.wosign.com/download/signtool.rar">signtool.rar </a>中。进入 DOS 命令提示符，并进入已经签名的文件所在目录 ( 如： d:signTestCA.cab) ，键入命令： chktrust testcs.cab ，则会显示实际应用时在 IE 浏览器下载页面的情况，如下图 11 所示，对于Win XP操作系统，会显示软件名称和发行者名称，其中软件名称就是您在第(8)步输入的描述，点击此名称就链接到您在第(8)步填写的网址，而点击发行者名称，则会显示您的签名信息和时间戳信息。对于Win2000操作系统，则稍有不同，第 1 行的红线部分就是时间戳记录的签名时的本地时间，请注意：此时间不是取签名电脑的时间，而是提供时间戳服务的服务器计算出来的签名电脑设置的所在时区的本地时间。第 1 行蓝色文字就是在第 8 步中输入的描述文字，点击此蓝色文字就可以访问在第 8 步中输入的 Web 描述页面。第 2 行蓝色文字则为该代码的发行者，也就是代码签名证书的申请者(拥有者)( 如：深圳市沃通电子商务服务有限公司) ，点击可以查看证书的详细信息；第 2 行有红色下划线部分显示“发行商可靠性由 WoSign Code Signing Authority 验证 ”就是此代码签名证书的证书颁发者。</div>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/0142354q1.gif" border="0" alt="" width="464" height="513" /></p>
<p>12) 点击“是”或“运行”，则会提示“ TestSign.cab: Succeeded ”表示代码 TestSign.cab 签名验证有效，可以放到网站上了。请注意：签名后的CAB文件放到网站上需要使用 object 方式。</p>
<p><strong>请注意</strong>：不能仅签名CAB文件，CAB包中所有DLL文件都要先签名后再打包，再签名CAB文件，否则IE浏览器会显示为“未验证的发行者”而影响正常使用，甚至杀毒软件会认为是毒而被删除！如下图所示的实际案例：</p>
<p><img src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2012/02/014247jiN.gif" border="0" alt="" /></p>
<h3>在Web页中加入ActiveX 控件</h3>
<p>在修改了IE的安全设置后，依然不能调用控件的方法，需要将访问的站点设置为“受信站点”，则方能正常使用控件<br />
在&lt;html&gt; 和&lt;head&gt;之间插入<br />
&lt;!&#8211; saved from url=(0017)http://localhost/ &#8211;&gt;<br />
则在IE窗口上方不会弹出黄色提示条 。</p>
<p><span style="color: #0000ff; font-size: x-small;">　　在HTML页面中使用ActiveX控件包含三个基本操作：将控件放入HTML中；将该控件下载给用户；在用户机器上安装该控件。如果只是针对IE用户，在HTML中插入ActiveX控件就比较简单；如果同时兼顾IE和Netscape用户，则要做更多工作。大家知道，HTML文件由文本和各种标志(tags)组成，ActiveX 控件对于IE在HTML中的标志是＜OBJECT＞，该标记有几个重要的参数特性，它们是： </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　1.ID：为控件提供一个标识名称，为HTML代码提供一种访问该控件的方式。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　2.CLASSID：是该控件唯一的UUID，告诉IE装入哪个对象。如果使用已经开发好的控件，它的CLASSID可以通过调用Win95或NT下的应用Regedit来查找。从开始菜单中运行该程序，展开HKEY_CLASSES_ROOT项，可以看到按字母顺序排列的注册表，找到需要使用的控件名，例如WClnt，展开时可看到一个CLSID文件夹，里面就是该控件的CLASSID。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　如果是自己用VC开发控件，该UUID可以在ActiveX控件项目中的ODL（对象描述库）文件中找到；通过查看控件的类信息注释来定位特定控件的UUID，例如，要找到CMyControl控件的UUID，则需要找到以下代码： </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　// Class information for CMyControl </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　[uuid (051C4748－1262－11D2－87C1－00A024D948FB), </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　licensed, </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　helpstring(“CmyControl Control”), control ] </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　uuid后面括号中的内容就是该控件的UUID。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　3.CODEBASE：如果在用户机器上没有控件的当前版本，该参数告诉用户浏览器在哪里可找到要下载的控件和最新版本号.当控件作了修改后，可以更改版本号强制用户重新下载。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　4.PARAM：该标记用于设置控件的初始属性值，它有两个特性：Name和Value，即属性名称和属性值。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　此外还有一些标记，如：Width表示该控件所占的宽度，Height表示高度等，总体来说，这样一个插入控件的HTML代码和插入Java Applet的HTML代码非常相似。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　下面是一个嵌有ActiveX控件的HTML代码示例： </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　</span></p>
<p><span style="color: #0000ff; font-size: x-small;">ID=“CMyControl” </span></p>
<p><span style="color: #0000ff; font-size: x-small;">CLASSID=“clsid:051C4748－1262－11D2－87C1－00A024D948FB ” </span></p>
<p><span style="color: #0000ff; font-size: x-small;">CODEBASE=“http://www.mysite.com.cn/ocxdir/mycontrol.ocx＃version=1,0,0,1” </span></p>
<p><span style="color: #0000ff; font-size: x-small;">WIDTH=400 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">HEIGHT=200 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">ALIGN=center </span></p>
<p><span style="color: #0000ff; font-size: x-small;">HSPACE=0 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">VSPACE=0 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">＞ </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　如果希望控件还能在Netscape中运行，除了Netscape需加装插件外，HTML也要加一些附加标记，下面的例子中EMBED段就是为Netscape加上的。如果使用MFC开发OCX控件，则少数用户第一次访问时除了下载OCX文件外，还要下载相应的MFC DLL，下载量变大，这时可将相关文件在服务器端打包成可以在客户端自解压安装的CAB文件。经过修改后的HTML代码段如下： </span></p>
<p><span style="color: #0000ff; font-size: x-small;">＜ALIGN=“CENTER” CLASSID=“clsid: </span></p>
<p><span style="color: #0000ff; font-size: x-small;">7BCA18C6－2178－11D2－87C1－00A024D948FB” </span></p>
<p><span style="color: #0000ff; font-size: x-small;">WIDTH=“1200” HEIGHT=“900” ID=“marquee” </span></p>
<p><span style="color: #0000ff; font-size: x-small;">CODEBASE=“http://218.168.188.188/scadaweb/ </span></p>
<p><span style="color: #0000ff; font-size: x-small;">WClnt.cab＃version=1,0,0,1”＞ </span></p>
<p><span style="color: #0000ff; font-size: x-small;">＜EMBED ALIGN=“CENTER”CLASSID=“clsid:7BCA18C6－ 2178－11D2－87C1－00A024D948FB” </span></p>
<p><span style="color: #0000ff; font-size: x-small;">WIDTH=“1200” HEIGHT=“900” ID=“marqueequot;” </span></p>
<p><span style="color: #0000ff; font-size: x-small;">CODEBASE=“http://218.168.188.188/scadaweb/ </span></p>
<p><span style="color: #0000ff; font-size: x-small;">WClnt.OCX＃version=1,0,0,1” </span></p>
<p><span style="color: #0000ff; font-size: x-small;">TYPE=“application/oleobject” ＞ </span></p>
<h4><span style="color: #0000ff; font-size: x-small;">实时动态页面的实现方案 </span></h4>
<p><span style="color: #0000ff; font-size: x-small;">　　对实时动态页面的要求多产生于一些要求自动更新实时数据的应用中，如电网监控、股市监测等。具体要求是：用户只需选取希望浏览的图表，但无需介入操作，该图表就能根据实时数据不断更新，用户总能观察到最新情况。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　要实现上述功能，结构上有两种方案：一种是设置一个中介服务器，该服务器作为控件和后台系统信息交流的中介；另一种是不设中介服务器，但在提供实时数据的后台服务器上留出供控件通信用的数据接口，控件可以直接从后台服务器上定时获得当前实时数据。按数据提供方式分也有两种：一种是由客户端定时向服务器发出请求，指明需要的实时数据，服务器收到请求后将满足请求的动态数据发送至相应客户；另一种是客户端只请求一次，服务器端便定时将满足请求的实时数据传到客户端，直到客户更换要显示的图表或停止刷新。上述各方案都有其优点和局限，在应用中可考虑实际情况采用相应方案。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　工作流程为：用户先从Web服务器上下载包含ActiveX 控件的网页，控件随即在客户机上注册运行，并通过Winsock同中介服务器或直接同提供实时信息的网，如股票信息网相连接，定时取得动态实时数据，并刷新显示。在这个体系中，客户有两条线路获得信息，一条是和Web Server的连接，从这条线上用户访问主页；另一条就是控件和后台信息网的连接，从这条线路上用户可以访问实时数据。后一条线路用Winsock建立，传输速度远大于前一条线路，且控制灵活、效率高，不和主页下载争资源。通过这条线路，用户甚至可以传送远程控制信息实现遥控操作。 </span></p>
<h4><span style="color: #0000ff; font-size: x-small;">利用MFC开发ActiveX控件 </span></h4>
<p><span style="color: #0000ff; font-size: x-small;">　　利用VC5.0开发的这种控件，功能可扩展性强，理论上独立的VC5.0程序具有的功能，该控件都能实现，例如控件直接绘制浏览器，可以使用OpenGL等图库，图形图像功能强大。实时数据刷新频率理论上可达毫秒级，用户通过鼠标可以实现各类交互操作，如旋转、缩放，图2就是一幅GL图形，并有一个缩放工具条进行缩放操作。如果是在计算机上观看，可以看到这几个三维图在不断旋转。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　应该说，较好的开发工具可直接用API编程或使用ATL模板库，利用MFC开发ActiveX控件不是一个好的选择，因为控件运行需要MFC DLL的支持。假如客户机器上没有这些类库（这种情况很少，但确实存在），第一次下载就要花费些工夫。不过对于熟悉MFC的开发员来说，这些问题相对MFC提供的便利来说都是可以忽略的。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　由于VC5.0对ActiveX控件的开发提供了许多便利，所以开发一个ActiveX控件并不像许多人想象中的那么困难复杂，通过VC 5.0的AppWizard，实现控件的主类从ColeControl类派生出来，该类则是CWnd的一个子类，所以你可以像对窗口类编程一样对这个主类编程。为了实现上面提及的功能，首先必要重载它的OnDraw函数加入需要绘制的对象，加入Winsock类（CSocket或CAsyncSocket），以实现与后端数据服务器的通信。如果需要用OpenGL绘制丰富多彩的立体图，则要初始化GL环境。其他的工作就在于用户如何控制程序的调度，使得各功能都能正常工作且与其他部分正常通信。此外，后端服务器程序也要增加对应于该控件的接口。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　这样的一个程序编译通过后，就成为一个可用于Web的控件，后缀名是OCX。按照前面叙述的方法将该OCX置入主页，基本的工作就算完成。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　综上所述，利用VC5.0开发ActiveX控件用于Web浏览，主要有以下几个特点： </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　1．采用Winsock的通信机制，速度快、控制灵活、效率高； </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　2．控件采用VC5.0编制，功能可扩展性很强； </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　4．控件第一次下载虽然稍费时间，但下载后即在用户机上注册，以后可直接调用，速度效率均好； </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　5．ActiveX技术是微软发展的重中之重，且已成为当前软件发展的潮流所向，发展空间广阔； </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　6．系统采用VC开发，可以利用已有的采用C语言编制的系统，开发工作量大大减少。 </span></p>
<p><span style="color: #0000ff; font-size: x-small;">　　Web页面的开发主要分为三类：静态Web页面、半动态Web页面以及Client端动态页面。本文重点论述基于ActiveX Control(控件)动态实时页面的开发。 </span></p>
<p>regsvr32 netshare.ocx 注册netshare.ocx控件</p>
<p>regsvr32 /u netshare.ocx 解除netshare.ocx控件的注册</p>
<p>来自:http://www.cnblogs.com/gengaixue/archive/2010/08/13/1799112.html</p>
<h3  class="related_post_title">随机日志</h3><ul class="related_post"><li><a href="http://blog.xcmd.net/2010-11-04-12/c%e8%8e%b7%e5%8f%96%e5%b1%80%e5%9f%9f%e7%bd%91%e7%9a%84sql-server%e6%9c%8d%e5%8a%a1%e5%88%97%e8%a1%a8.html" title="C#获取局域网的sql server服务列表">C#获取局域网的sql server服务列表</a> (0)</li><li><a href="http://blog.xcmd.net/2010-08-11-14/%e5%a4%96%e6%8c%82%e7%bc%96%e5%86%99%e5%ae%8c%e5%85%a8%e6%94%bb%e7%95%a5.html" title="外挂编写完全攻略">外挂编写完全攻略</a> (0)</li><li><a href="http://blog.xcmd.net/2010-05-12-13/%e8%87%ad%e8%b1%86%e8%85%90%e5%88%b6%e4%bd%9c.html" title="大便制作臭豆腐">大便制作臭豆腐</a> (0)</li><li><a href="http://blog.xcmd.net/2010-03-22-13/%e8%bd%ac%e8%b0%b7%e6%ad%8c%e6%9c%80%e6%97%a9%e4%bb%8a%e6%97%a5%e5%ae%a3%e5%b8%83%e9%80%80%e5%87%ba%e4%b8%ad%e5%9b%bd.html" title="转:谷歌最早今日宣布退出中国">转:谷歌最早今日宣布退出中国</a> (0)</li><li><a href="http://blog.xcmd.net/2011-04-02-14/casp-net-%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6app-configweb-config-%e4%bf%ae%e6%94%b9.html" title="C#/ASP.NET 配置文件app.config/web.config 修改">C#/ASP.NET 配置文件app.config/web.config 修改</a> (0)</li><li><a href="http://blog.xcmd.net/2010-08-16-11/%e4%ba%94%e4%b8%aa%e5%bd%b1%e5%93%8dmysql%e6%80%a7%e8%83%bd%e7%9a%84%e5%85%b3%e9%94%ae%e9%85%8d%e7%bd%ae.html" title="五个影响mysql性能的关键配置">五个影响mysql性能的关键配置</a> (3)</li><li><a href="http://blog.xcmd.net/2010-06-03-10/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%ef%bc%9a%e8%8b%b1%e6%96%87%e3%80%81%e4%b8%ad%e6%96%87%e3%80%81%e6%95%b0%e5%ad%97%e3%80%81%e4%b8%8b%e5%88%92%e7%ba%bf.html" title="正则表达式：英文、中文、数字、下划线">正则表达式：英文、中文、数字、下划线</a> (0)</li><li><a href="http://blog.xcmd.net/2010-07-29-23/c%e4%b8%ad%e7%9a%84%e5%a7%94%e6%89%98%e5%92%8c%e4%ba%8b%e4%bb%b6%e8%af%a6%e8%a7%a3.html" title="C#中的委托和事件详解">C#中的委托和事件详解</a> (0)</li><li><a href="http://blog.xcmd.net/2010-09-09-19/web-config%e8%af%a6%e8%a7%a3%ef%bc%8basp-net%e4%bc%98%e5%8c%96%ef%bc%881%ef%bc%89.html" title="Web.config详解＋asp.net优化（1）">Web.config详解＋asp.net优化（1）</a> (0)</li><li><a href="http://blog.xcmd.net/2010-05-24-21/php%ef%bc%9aglobal%e5%8f%98%e9%87%8f%e8%a7%a3%e6%9e%90.html" title="PHP：GLOBAL变量解析">PHP：GLOBAL变量解析</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xcmd.net/2012-02-08-09/vc2005%e4%bb%8e%e5%bc%80%e5%8f%91mfc-activex-ocx%e6%8e%a7%e4%bb%b6%e5%88%b0%e5%8f%91%e5%b8%83%e5%88%b0-net%e7%bd%91%e7%ab%99%e7%9a%84%e5%85%a8%e9%83%a8%e8%bf%87%e7%a8%8b.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从客户端中检测到有潜在危险的 Request.Form 值的最优解决方案</title>
		<link>http://blog.xcmd.net/2012-02-07-18/%e4%bb%8e%e5%ae%a2%e6%88%b7%e7%ab%af%e4%b8%ad%e6%a3%80%e6%b5%8b%e5%88%b0%e6%9c%89%e6%bd%9c%e5%9c%a8%e5%8d%b1%e9%99%a9%e7%9a%84-request-form-%e5%80%bc%e7%9a%84%e6%9c%80%e4%bc%98%e8%a7%a3%e5%86%b3.html</link>
		<comments>http://blog.xcmd.net/2012-02-07-18/%e4%bb%8e%e5%ae%a2%e6%88%b7%e7%ab%af%e4%b8%ad%e6%a3%80%e6%b5%8b%e5%88%b0%e6%9c%89%e6%bd%9c%e5%9c%a8%e5%8d%b1%e9%99%a9%e7%9a%84-request-form-%e5%80%bc%e7%9a%84%e6%9c%80%e4%bc%98%e8%a7%a3%e5%86%b3.html#comments</comments>
		<pubDate>Tue, 07 Feb 2012 10:03:58 +0000</pubDate>
		<dc:creator>冰点</dc:creator>
				<category><![CDATA[C#/ASP.NET]]></category>
		<category><![CDATA[潜在危险的Request.Form值]]></category>

		<guid isPermaLink="false">http://blog.xcmd.net/?p=404</guid>
		<description><![CDATA[ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力。当用户试图用之类的输入影响页面返回结果的时候，ASP.Net的引擎会引发一 个 HttpRequestValidationExceptioin。默认情况下会返回如下文字的页面： 
以下是引用片段：
Server Error in &#8216;/YourApplicationPath&#8217; Application
A potentially dangerous Request.Form value was detected from the client
(txtName=&#8221;&#60;b&#62;&#8221;).
Description: Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted. This value may indicate an attempt to compromise the security of your application, such as a cross-site scripting attack. [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: small;">ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力。当用户试图用之类的输入影响页面返回结果的时候，ASP.Net的引擎会引发一 个 HttpRequestValidationExceptioin。默认情况下会返回如下文字的页面： </span></p>
<p><span style="font-size: small;">以下是引用片段：<br />
Server Error in &#8216;/YourApplicationPath&#8217; Application</span></p>
<p><span style="font-size: small;">A potentially dangerous Request.Form value was detected from the client<br />
(txtName=&#8221;&lt;b&gt;&#8221;).<span id="more-404"></span></span></p>
<p><span style="font-size: small;">Description: Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted. This value may indicate an attempt to compromise the security of your application, such as a cross-site scripting attack. You can disable request validation by setting validateRequest=false in the Page directive or in the configuration section. However, it is strongly recommended that your application explicitly check all inputs in this case.</span></p>
<p><span style="font-size: small;">Exception Details: System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client (txtName=&#8221;&lt;b&gt;&#8221;).</span></p>
<p><span style="font-size: small;">&#8230;.</span></p>
<p><span style="font-size: small;">　　这是ASP.Net提供的一个很重要的安全特性。因为很多程序员对安全没有概念，甚至都不知道XSS这种攻击的存在，知道主动去防护的就更少了。ASP.Net在这一点上做到默认安全。这样让对安全不是很了解的程序员依旧可以写出有一定安全防护能力的网站。</span></p>
<p><span style="font-size: small;">　　但是，当我Google搜索 HttpRequestValidationException 或者 &#8220;A potentially dangerous Request.Form value was detected from the client&#8221;的时候，惊奇的发现大部分人给出的解决方案竟然是在ASP.Net页面描述中通过设置 validateRequest=false 来禁用这个特性，而不去关心那个程序员的网站是否真的不需要这个特性。看得我这叫一个胆战心惊。安全意识应该时时刻刻在每一个程序员的心里，不管你对安全 的概念了解多少，一个主动的意识在脑子里，你的站点就会安全很多。</span></p>
<p><span style="font-size: small;">　　为什么很多程序员想要禁止 validateRequest 呢?有一部分是真的需要用户输入&#8221;&lt;&gt;&#8221;之类的字符。这就不必说了。还有一部分其实并不是用户允许输入那些容易引起XSS的字符，而是讨厌这 种报错的形式，毕竟一大段英文加上一个ASP.Net典型异常错误信息，显得这个站点出错了，而不是用户输入了非法的字符，可是自己又不知道怎么不让它报 错，自己来处理报错。</span></p>
<p><span style="font-size: small;">　　对于希望很好的处理这个错误信息，而不使用默认ASP.Net异常报错信息的程序员们，你们不要禁用validateRequest=false。</span></p>
<p><span style="font-size: small;">　　正确的做法是在你当前页面添加Page_Error()函数，来捕获所有页面处理过程中发生的而没有处理的异常。然后给用户一个合法的报错信 息。如果当前页面没有Page_Error()，这个异常将会送到Global.asax的Application_Error()来处理，你也可以在那 里写通用的异常报错处理函数。如果两个地方都没有写异常处理函数，才会显示这个默认的报错页面呢。</span></p>
<p><span style="font-size: small;">　　举例而言，处理这个异常其实只需要很简短的一小段代码就够了。在页面的Code-behind页面中加入这么一段代码：</span></p>
<p><span style="font-size: small;">以下是引用片段：<br />
protected void Page_Error(object sender, EventArgs e)<br />
{<br />
Exception ex = Server.GetLastError();<br />
if (ex is HttpRequestValidationException)<br />
{<br />
Response.Write(&#8220;请您输入合法字符串。&#8221;);<br />
Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()。<br />
}<br />
}</span></p>
<p><span style="font-size: small;">　　这样这个程序就可以截获 HttpRequestValidationException 异常，而且可以按照程序员的意愿返回一个合理的报错信息。</span></p>
<p><span style="font-size: small;">　　这段代码很简单，所以我希望所有不是真的要允许用户输入之类字符的朋友，千万不要随意的禁止这个安全特性，如果只是需要异常处理，那么请用类似于上面的代码来处理即可。</span></p>
<p><span style="font-size: small;">　　而对于那些通过 明确禁止了这个特性的程序员，自己一定要明白自己在做什么，而且一定要自己手动的检查必须过滤的字符串，否则你的站点很容易引发跨站脚本攻击。</span></p>
<p><span style="font-size: small;">　　关于存在Rich Text Editor的页面应该如何处理?</span></p>
<p><span style="font-size: small;">　　如果页面有富文本编辑器的控件的，那么必然会导致有类的HTML标签提交回来。在这种情况下，我们不得不将validateRequest=&#8221;false&#8221;。那么安全性怎么处理?如何在这种情况下最大限度的预防跨站脚本攻击呢?</span></p>
<p><span style="font-size: small;">　　根据微软的建议，我们应该采取安全上称为“默认禁止，显式允许”的策略。</span></p>
<p><span style="font-size: small;">　　首先，我们将输入字符串用 HttpUtility.HtmlEncode()来编码，将其中的HTML标签彻底禁止。</span></p>
<p><span style="font-size: small;">　　然后，我们再对我们所感兴趣的、并且是安全标签，通过Replace()进行替换。比如，我们希望有&#8221;"标签，那么我们就将&#8221;"显式的替换回&#8221;"。</span></p>
<p><span style="font-size: small;">　　示例代码如下：</span></p>
<p><span style="font-size: small;">以下是引用片段：<br />
void submitBtn_Click(object sender, EventArgs e)<br />
&#8230;{<br />
// 将输入字符串编码，这样所有的HTML标签都失效了。<br />
StringBuilder sb = new StringBuilder(<br />
HttpUtility.HtmlEncode(htmlInputTxt.Text));<br />
// 然后我们选择性的允许&lt;b&gt; 和 &lt;i&gt;<br />
sb.Replace(&#8220;&amp;lt;b&amp;gt;&#8221;, &#8220;&lt;b&gt;&#8221;);<br />
sb.Replace(&#8220;&amp;lt;/b&amp;gt;&#8221;, &#8220;&#8221;);<br />
sb.Replace(&#8220;&amp;lt;i&amp;gt;&#8221;, &#8220;&lt;i&gt;&#8221;);<br />
sb.Replace(&#8220;&amp;lt;/i&amp;gt;&#8221;, &#8220;&#8221;);<br />
Response.Write(sb.ToString());<br />
}</span></p>
<p><span style="font-size: small;">　　这样我们即允许了部分HTML标签，又禁止了危险的标签。</span></p>
<p><span style="font-size: small;">　　根据微软提供的建议，我们要慎重允许下列HTML标签，因为这些HTML标签都是有可能导致跨站脚本攻击的。</span></p>
<p><span style="font-size: small;">以下是引用片段：<br />
# &lt;applet&gt;<br />
# &lt;body&gt;<br />
# &lt;embed&gt;<br />
# &lt;frame&gt;<br />
# &lt;script&gt;<br />
# &lt;frameset&gt;<br />
# &lt;html&gt;<br />
# &lt;iframe&gt;<br />
# &lt;img&gt;<br />
# &lt;style&gt;<br />
# &lt;layer&gt;<br />
# &lt;link&gt;<br />
# &lt;ilayer&gt;<br />
# &lt;meta&gt;<br />
# &lt;object&gt;</span></p>
<p><span style="font-size: small;">　　可能这里最让人不能理解的是&lt;img&gt;。但是，看过下列代码后，就应该明白其危险性了。</span></p>
<p><span style="font-size: small;">以下是引用片段：<br />
&lt;img src=&#8221;javascript:alert(&#8216;hello&#8217;);&#8221;&gt;<br />
&lt;img src=&#8221;java&amp;#010;script:alert(&#8216;hello&#8217;);&#8221;&gt;<br />
&lt;img src=&#8221;java&amp;#X0A;script:alert(&#8216;hello&#8217;);&#8221;&gt;</span></p>
<p><span style="font-size: small;">　　通过&lt;img&gt;标签是有可能导致javascript执行的，这样攻击者就可以做他想伪装的任何事情。</span></p>
<p><span style="font-size: small;">　　关于&lt;style&gt;也是一样：</span></p>
<p><span style="font-size: small;">以下是引用片段：<br />
<span style="color: #ff0000; font-size: x-small;">&lt;style TYPE=&#8221;text/javascript&#8221;&gt;&#8230;<br />
alert(&#8216;hello&#8217;);<br />
&lt;/style&gt;</span></span></p>
<p><span style="color: #ff0000; font-size: x-small;">从客户端中检测到有潜在危险的 Request.Form 值<br />
由于在.net中，Request时出现有HTML或Javascript等字符串时，系统会认为是危险性值。立马报错上面的错误。<br />
解决办法：<br />
解决方案一：<br />
在.aspx文件头中加入这句：<br />
&lt;%@ Page validateRequest=&#8221;false&#8221;   %&gt;<br />
解决方案二：<br />
修改web.config文件:<br />
&lt;configuration&gt;<br />
&lt;system.web&gt;<br />
&lt;pages validateRequest=&#8221;false&#8221; /&gt;<br />
&lt;/system.web&gt;<br />
&lt;/configuration&gt;<br />
因为validateRequest默认值为true。只要设为false即可。<br />
当然，这样只能是让界面好看一些，要想抵制注入，还得从过滤上做足功夫<br />
然后，还是有不禁用validateRequest的方法的，如下<br />
不禁用validateRequest=false。<br />
正确的做法是在你当前页面添加Page_Error()函数，来捕获所有页面处理过程中发生的而没有处理的异常。然后给用户一个合法的报错信息。如果当前页面没有Page_Error()，这个异常将会送到Global.asax的Application_Error()来处理，你也可以在那里写通用的异常报错处理函数。如果两个地方都没有写异常处理函数，才会显示这个默认的报错页面呢。<br />
举例而言，处理这个异常其实只需要很简短的一小段代码就够了。在页面的Code-behind页面中加入这么一段代码： <br />
以下是引用片段：<br />
protected void Page_Error(object sender, EventArgs e)<br />
{<br />
Exception ex = Server.GetLastError();<br />
if (ex is HttpRequestValidationException)<br />
{<br />
Response.Write(&#8220;请您输入合法字符串。&#8221;);<br />
Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()。<br />
}<br />
} </span></p>
<h3  class="related_post_title">随机日志</h3><ul class="related_post"><li><a href="http://blog.xcmd.net/2010-09-09-18/sql-server-2005%e4%b8%ad%e7%9a%84%e5%88%86%e5%8c%ba%e8%a1%a8%ef%bc%88%e4%b8%89%ef%bc%89%ef%bc%9a%e5%b0%86%e6%99%ae%e9%80%9a%e8%a1%a8%e8%bd%ac%e6%8d%a2%e6%88%90%e5%88%86%e5%8c%ba%e8%a1%a8.html" title="SQL Server 2005中的分区表（三）：将普通表转换成分区表">SQL Server 2005中的分区表（三）：将普通表转换成分区表</a> (0)</li><li><a href="http://blog.xcmd.net/2010-04-04-17/%e5%85%b3%e4%ba%8esession_satrt%e7%9a%84cannot-send-session-cache-limiter-headers%e9%97%ae%e9%a2%98%e8%a7%a3%e5%86%b3.html" title="关于session_satrt()的Cannot send session cache limiter &#8211; headers问题解决">关于session_satrt()的Cannot send session cache limiter &#8211; headers问题解决</a> (0)</li><li><a href="http://blog.xcmd.net/2010-06-27-10/%e9%ab%98%e6%b8%85%e5%a3%81%e7%ba%b8%e4%b8%8b%e8%bd%bd.html" title="高清壁纸下载">高清壁纸下载</a> (0)</li><li><a href="http://blog.xcmd.net/2011-12-22-17/csdn7k7k%e5%a4%9a%e7%8e%a9%e7%bd%91%e5%98%9f%e5%98%9f%e7%89%9b178%e6%b8%b8%e6%88%8f%e7%bd%91%e4%ba%ba%e4%ba%ba%e7%bd%91%e7%94%a8%e6%88%b7%e5%90%8d%e5%92%8c%e5%af%86%e7%a0%81%e5%92%8c%e9%82%ae.html" title="CSDN,7K7K,多玩网,嘟嘟牛,178游戏网,人人网,用户名和密码和邮箱数据库下载">CSDN,7K7K,多玩网,嘟嘟牛,178游戏网,人人网,用户名和密码和邮箱数据库下载</a> (6)</li><li><a href="http://blog.xcmd.net/2011-02-24-11/%e8%bd%ac%e5%9f%ba%e5%9b%a0.html" title="转基因">转基因</a> (0)</li><li><a href="http://blog.xcmd.net/2010-03-25-21/%e7%bb%99wordpress%e5%bc%80%e5%90%afgzip%e5%8a%9f%e8%83%bd.html" title="给Wordpress开启Gzip功能">给Wordpress开启Gzip功能</a> (0)</li><li><a href="http://blog.xcmd.net/2010-03-27-14/%e4%b8%96%e7%95%8c%e9%a1%b6%e7%ba%a7%e6%99%ba%e5%95%86%e5%8d%8f%e4%bc%9a%e6%94%b6%e5%bd%95.html" title="世界顶级智商协会收录">世界顶级智商协会收录</a> (0)</li><li><a href="http://blog.xcmd.net/2011-06-23-01/c%e7%9a%84string%e7%b1%bb%e6%b7%bb%e5%8a%a0%e6%8c%89%e5%ad%97%e8%8a%82%e6%88%aa%e5%8f%96%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%9a%84%e6%89%a9%e5%b1%95%e6%96%b9%e6%b3%95.html" title="C#的String类添加按字节截取字符串的扩展方法 ">C#的String类添加按字节截取字符串的扩展方法 </a> (0)</li><li><a href="http://blog.xcmd.net/2011-12-30-15/%e8%a7%a3%e5%86%b3sql-server%e8%a7%a6%e5%8f%91%e5%99%a8%e7%9a%84%e5%bd%b1%e5%93%8d%e8%a1%8c%e6%95%b0%e5%af%b9%e7%a8%8b%e5%ba%8f%e7%9a%84%e5%bd%b1%e5%93%8d.html" title="解决sql server触发器的影响行数对程序的影响">解决sql server触发器的影响行数对程序的影响</a> (0)</li><li><a href="http://blog.xcmd.net/2010-05-24-13/xamp%e7%ae%80%e5%8c%96phpapachemysql%e7%9a%84%e5%ae%89%e8%a3%85%e8%bf%87%e7%a8%8b.html" title="XAMP简化PHP+apache+mysql的安装过程">XAMP简化PHP+apache+mysql的安装过程</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xcmd.net/2012-02-07-18/%e4%bb%8e%e5%ae%a2%e6%88%b7%e7%ab%af%e4%b8%ad%e6%a3%80%e6%b5%8b%e5%88%b0%e6%9c%89%e6%bd%9c%e5%9c%a8%e5%8d%b1%e9%99%a9%e7%9a%84-request-form-%e5%80%bc%e7%9a%84%e6%9c%80%e4%bc%98%e8%a7%a3%e5%86%b3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>李嘉诚演讲：打工是最愚蠢的投资</title>
		<link>http://blog.xcmd.net/2012-02-06-10/%e6%9d%8e%e5%98%89%e8%af%9a%e6%bc%94%e8%ae%b2%ef%bc%9a%e6%89%93%e5%b7%a5%e6%98%af%e6%9c%80%e6%84%9a%e8%a0%a2%e7%9a%84%e6%8a%95%e8%b5%84.html</link>
		<comments>http://blog.xcmd.net/2012-02-06-10/%e6%9d%8e%e5%98%89%e8%af%9a%e6%bc%94%e8%ae%b2%ef%bc%9a%e6%89%93%e5%b7%a5%e6%98%af%e6%9c%80%e6%84%9a%e8%a0%a2%e7%9a%84%e6%8a%95%e8%b5%84.html#comments</comments>
		<pubDate>Mon, 06 Feb 2012 02:44:23 +0000</pubDate>
		<dc:creator>冰点</dc:creator>
				<category><![CDATA[生活|工作]]></category>
		<category><![CDATA[打工是最愚蠢的投资]]></category>
		<category><![CDATA[投资]]></category>
		<category><![CDATA[李嘉诚]]></category>

		<guid isPermaLink="false">http://blog.xcmd.net/?p=403</guid>
		<description><![CDATA[         很多人会认为打工并不是投资，强烈反对这种观念。其实打工才是最大最愚蠢的投资。 人生最宝贵的是什么？除了我们的青春还有什么更宝贵？很多人都抱怨我穷，我没钱想做生意又找不到资金。多么的可笑！其实在你身上就有着一座金山(无形资 产)，只是你不敢承认。宁可埋没也不敢利用。宁可委委屈屈地帮人打工，把你的资产双手拱让给了你的老板。我们试想一下，有谁生下来上天就会送给他一大堆金 钱的？问问李嘉诚吧。 我曾经问过我的一个朋友为什么不去打工？他的回答很惊人：“说句得罪点，出去打工简直就是愚蠢浪费青春！为什么你一直是打工仔？因为你安于现状！因为你没 有勇气，你天生胆小怕事不敢另择它路！所以你是打工仔！因为你没有勇往直前，没有超越自我的精神！所以，你还是一个打工仔！你想过了改变你的生活，改变你 穷困的命运，但是你没有做！因为你不敢做！你害怕输，你害怕输的一穷再穷！你最后不敢想，还是在打工，所以你还是打工仔！！！你努力了，你拼搏了，你抱着 雄心大志。结果你没看到预想的成就！你放弃了！你只还是一个打工仔！！为什么你一直是打工仔？因为你随波逐流！近墨者黑，不思上进，分钱没得，死爱闹热， 所以你一直是打工仔！因为你畏惧你父母，你听信你亲戚，你没有主张，你不敢一个人做决定。所以，你只不过还是一直是一个打工仔！你观念传统，只想打工赚点 钱结婚生子，然后生病老死，走你父母一模一样的路，所以你一直是打工仔！你天生脆弱、脑筋迟钝只想做按班就部的工作，你想做无本的生意，你想坐在家里等天 上掉陷饼，所以你一直是一个打工仔！你抱怨没有机遇，机遇来到你身边的时候你又抓不住！因为你不会抓！所以你还是一直是打工仔！因为你的贫穷，所以你自 卑！你退缩了！你什么都不敢做！你只会给别人打工！所以你一直是打工仔！你没有特别技能，你只有使蛮力！你和你父母一样，恶性循环，所以，你一直永远的一 个一直在打工的打工仔！
很多人想把握机会，要做一件事情时，但往往给自己找了很多理由让自己一直处于矛盾之中，不断浪费时间，虚度时光！
 
1，我没口 才。错！有没有人天生就会说话，台上的演讲大师也不是一下子就能出口成章，骂人的时候很擅长，抱怨的时候也很擅长，这也是口才，只是没有任何营养罢了，那 是没有价值的口才；看别人争论的时候，自己满嘴评头论足，却不反省自己，倘若你做得好，你今天是否还说自己没口才
 
 2，我没钱。错！不是没有钱，而是没有赚钱的脑袋，工作几年了没有钱么，有了，但是花掉了，花在没有回报的事情上面，吃喝玩乐，或存放贬值了，没 有实现最大化，所以钱就这样入不敷出，这样月光光 这样被生活所需全部一一使用，这样周而复始，每月做个月光族，没有远虑，当一天和尚敲一天钟，得过且过。
3，我没能力。错！不给自己机会去锻炼，又有谁一出生就有跑的能力?跳的能力？一毕业就是社会精英?一创业就马上成功?当别人很努力的学习，很努力 的积累，努力的找方法，而他每天就做了很少一点就觉得乏味，学了一些就觉得没意思，看了一些就不想看，跟自己跟别人说没兴趣学，然后半辈子过去，一事无 成，然后牢骚上天不给机会。能力是努力修来的，不努力想有能力，天才都会成蠢材，但努力，再笨的人也能成精英。
4，我没时间。错！时间很多，但浪费的也很多，别人很充实，他在看电视，别人在努力学习时，他在游戏消遣虚度，总之时间就是觉得很多余，他过得越来越无聊，别人赚钱了羡慕别人，但不去学别人好好把握时间创造价值，整天不学无术。
5，我没心情。错！ 心情好的时候去游玩；心情不好的时候在家喝闷酒，心情好的时候去逛街，心情不好的时候玩游戏，心情好的时候去享受，心情不好的时候就睡大觉，好坏心情都一样，反正就是不做正事。
6， 我没兴趣。错！兴趣是什么，吃喝玩乐谁都有，没有成就哪里来的尽兴，出去旅游回来月光族，出去K歌 回头钱包空空，出去大量购物回来惨兮兮。打工有没有兴趣，挤公车有没有兴趣？上班签到下班打卡有没有兴趣？家里急需要一大笔钱的时候借钱有没有兴趣？要还 钱没钱还有没有兴趣？卖老鼠药的人对老鼠药有没有兴趣……？
7，我考虑考虑。错！考虑做吧，有可能就成了！不做吧，好不甘心，整天上班也没有个头，还是做吧，明天开始，不过还是算了，再想想，这钱挣的也不容 易，不不，就是打工挣钱也不容易，所以不能放弃机会，决定了，把握机会。 哎呀！天都黑了，明天再说吧！然后第二天又因为以上123456点，因为左思右想，继续循环，最终不能决定，犹犹豫豫，还是一无所获。
有句话是，可怜之人必有可恨之处！这一生中不是没有机遇，而是没有争取与把握，借口太多，理由太多&#8230;&#8230;! 争取之人必竭力争取，一分钱都没有也千方百计想办法，不争取之人给一百万也动不起来，发财不了，还有可能一败涂地，这就是行动上的欠缺，喜欢犹豫不决，喜 欢拖延，喜欢半途而废，最后一辈子平庸，碌碌无为！还有的人，做事三分钟热度，一开始热情高涨，等会就继续懒散，这种人成功的帽子也不会在你的头上。看看 为什么别人身价几个亿，你自己还在为钱奔波，不要羡慕别人命好，别人很困难的时候是怎么坚挺过来的，怎么克服困难，突破自己，改变命运的，你没看到罢了， 活着就是要一身价值。
随机日志.net动态执行javascript,C#代码 (0)Apache服务器使用.htaccess实现图片防盗链 (0)PowerDesigner中如何生成主键和自增列&#8211;Oracle版本 (0)程序设计模式的有趣解释 (0)自己写的JAVASCRIPT可扩展表单验证 (0)科学“超人” 尼古拉·特斯拉 （下） (0)Oracle11G Design Center (0)网页开发的6种在线调试环境 (0)前世是谁埋的我？  (0)全球最贵域名sex.com拍出1300万美元高价 (0)]]></description>
			<content:encoded><![CDATA[<p>         很多人会认为打工并不是投资，强烈反对这种观念。其实打工才是最大最愚蠢的投资。 人生最宝贵的是什么？除了我们的青春还有什么更宝贵？很多人都抱怨我穷，我没钱想做生意又找不到资金。多么的可笑！其实在你身上就有着一座金山(无形资 产)，只是你不敢承认。宁可埋没也不敢利用。宁可委委屈屈地帮人打工，把你的资产双手拱让给了你的老板。我们试想一下，有谁生下来上天就会送给他一大堆金 钱的？问问李嘉诚吧。 我曾经问过我的一个朋友为什么不去打工？他的回答很惊人：“说句得罪点，出去打工简直就是愚蠢浪费青春！为什么你一直是打工仔？因为你安于现状！因为你没 有勇气，你天生胆小怕事不敢另择它路！所以你是打工仔！因为你没有勇往直前，没有超越自我的精神！所以，你还是一个打工仔！你想过了改变你的生活，改变你 穷困的命运，但是你没有做！因为你不敢做！你害怕输，你害怕输的一穷再穷！你最后不敢想，还是在打工，所以你还是打工仔！！！你努力了，你拼搏了，你抱着 雄心大志。结果你没看到预想的成就！你放弃了！你只还是一个打工仔！！为什么你一直是打工仔？因为你随波逐流！近墨者黑，不思上进，分钱没得，死爱闹热， 所以你一直是打工仔！因为你畏惧你父母，你听信你亲戚，你没有主张，你不敢一个人做决定。所以，你只不过还是一直是一个打工仔！你观念传统，只想打工赚点 钱结婚生子，然后生病老死，走你父母一模一样的路，所以你一直是打工仔！你天生脆弱、脑筋迟钝只想做按班就部的工作，你想做无本的生意，你想坐在家里等天 上掉陷饼，所以你一直是一个打工仔！你抱怨没有机遇，机遇来到你身边的时候你又抓不住！因为你不会抓！所以你还是一直是打工仔！因为你的贫穷，所以你自 卑！你退缩了！你什么都不敢做！你只会给别人打工！所以你一直是打工仔！你没有特别技能，你只有使蛮力！你和你父母一样，恶性循环，所以，你一直永远的一 个一直在打工的打工仔！<span id="more-403"></span></p>
<p>很多人想把握机会，要做一件事情时，但往往给自己找了很多理由让自己一直处于矛盾之中，不断浪费时间，虚度时光！<br />
 <br />
1，我没口 才。错！有没有人天生就会说话，台上的演讲大师也不是一下子就能出口成章，骂人的时候很擅长，抱怨的时候也很擅长，这也是口才，只是没有任何营养罢了，那 是没有价值的口才；看别人争论的时候，自己满嘴评头论足，却不反省自己，倘若你做得好，你今天是否还说自己没口才<br />
 </p>
<p> 2，我没钱。错！不是没有钱，而是没有赚钱的脑袋，工作几年了没有钱么，有了，但是花掉了，花在没有回报的事情上面，吃喝玩乐，或存放贬值了，没 有实现最大化，所以钱就这样入不敷出，这样月光光 这样被生活所需全部一一使用，这样周而复始，每月做个月光族，没有远虑，当一天和尚敲一天钟，得过且过。</p>
<p>3，我没能力。错！不给自己机会去锻炼，又有谁一出生就有跑的能力?跳的能力？一毕业就是社会精英?一创业就马上成功?当别人很努力的学习，很努力 的积累，努力的找方法，而他每天就做了很少一点就觉得乏味，学了一些就觉得没意思，看了一些就不想看，跟自己跟别人说没兴趣学，然后半辈子过去，一事无 成，然后牢骚上天不给机会。能力是努力修来的，不努力想有能力，天才都会成蠢材，但努力，再笨的人也能成精英。</p>
<p>4，我没时间。错！时间很多，但浪费的也很多，别人很充实，他在看电视，别人在努力学习时，他在游戏消遣虚度，总之时间就是觉得很多余，他过得越来越无聊，别人赚钱了羡慕别人，但不去学别人好好把握时间创造价值，整天不学无术。</p>
<p>5，我没心情。错！ 心情好的时候去游玩；心情不好的时候在家喝闷酒，心情好的时候去逛街，心情不好的时候玩游戏，心情好的时候去享受，心情不好的时候就睡大觉，好坏心情都一样，反正就是不做正事。</p>
<p>6， 我没兴趣。错！兴趣是什么，吃喝玩乐谁都有，没有成就哪里来的尽兴，出去旅游回来月光族，出去K歌 回头钱包空空，出去大量购物回来惨兮兮。打工有没有兴趣，挤公车有没有兴趣？上班签到下班打卡有没有兴趣？家里急需要一大笔钱的时候借钱有没有兴趣？要还 钱没钱还有没有兴趣？卖老鼠药的人对老鼠药有没有兴趣……？</p>
<p>7，我考虑考虑。错！考虑做吧，有可能就成了！不做吧，好不甘心，整天上班也没有个头，还是做吧，明天开始，不过还是算了，再想想，这钱挣的也不容 易，不不，就是打工挣钱也不容易，所以不能放弃机会，决定了，把握机会。 哎呀！天都黑了，明天再说吧！然后第二天又因为以上123456点，因为左思右想，继续循环，最终不能决定，犹犹豫豫，还是一无所获。</p>
<p>有句话是，可怜之人必有可恨之处！这一生中不是没有机遇，而是没有争取与把握，借口太多，理由太多&#8230;&#8230;! 争取之人必竭力争取，一分钱都没有也千方百计想办法，不争取之人给一百万也动不起来，发财不了，还有可能一败涂地，这就是行动上的欠缺，喜欢犹豫不决，喜 欢拖延，喜欢半途而废，最后一辈子平庸，碌碌无为！还有的人，做事三分钟热度，一开始热情高涨，等会就继续懒散，这种人成功的帽子也不会在你的头上。看看 为什么别人身价几个亿，你自己还在为钱奔波，不要羡慕别人命好，别人很困难的时候是怎么坚挺过来的，怎么克服困难，突破自己，改变命运的，你没看到罢了， 活着就是要一身价值。</p>
<h3  class="related_post_title">随机日志</h3><ul class="related_post"><li><a href="http://blog.xcmd.net/2011-12-30-15/%e8%a7%a3%e5%86%b3sql-server%e8%a7%a6%e5%8f%91%e5%99%a8%e7%9a%84%e5%bd%b1%e5%93%8d%e8%a1%8c%e6%95%b0%e5%af%b9%e7%a8%8b%e5%ba%8f%e7%9a%84%e5%bd%b1%e5%93%8d.html" title="解决sql server触发器的影响行数对程序的影响">解决sql server触发器的影响行数对程序的影响</a> (0)</li><li><a href="http://blog.xcmd.net/2010-09-26-10/%e5%88%a9%e7%94%a8webclient%e5%92%8cwebrequest%e7%b1%bb%e8%8e%b7%e5%be%97%e7%bd%91%e9%a1%b5%e6%ba%90%e4%bb%a3%e7%a0%81.html" title="利用WebClient和WebRequest类获得网页源代码">利用WebClient和WebRequest类获得网页源代码</a> (3)</li><li><a href="http://blog.xcmd.net/2010-07-29-21/%e7%90%86%e8%a7%a3c%e5%80%bc%e7%b1%bb%e5%9e%8b%e4%b8%8e%e5%bc%95%e7%94%a8%e7%b1%bb%e5%9e%8b.html" title="理解C#值类型与引用类型">理解C#值类型与引用类型</a> (0)</li><li><a href="http://blog.xcmd.net/2010-11-04-12/c%e8%8e%b7%e5%8f%96%e5%b1%80%e5%9f%9f%e7%bd%91%e7%9a%84sql-server%e6%9c%8d%e5%8a%a1%e5%88%97%e8%a1%a8.html" title="C#获取局域网的sql server服务列表">C#获取局域网的sql server服务列表</a> (0)</li><li><a href="http://blog.xcmd.net/2010-11-23-16/%e7%bd%91%e7%bb%9c%e7%96%af%e4%bc%a0%e4%ba%9a%e4%b8%81%e6%b9%be%e5%ad%98%e5%9c%a8%e2%80%9c%e6%98%9f%e9%99%85%e4%b9%8b%e9%97%a8%e2%80%9d.html" title="网络疯传亚丁湾存在“星际之门”">网络疯传亚丁湾存在“星际之门”</a> (1)</li><li><a href="http://blog.xcmd.net/2010-03-25-21/%e7%ac%ac%e4%b8%80%e4%b8%aa%e5%8f%af%e4%bb%a5%e8%bf%90%e8%a1%8c%e7%9a%84cassandra%e4%be%8b%e5%ad%90.html" title="第一个可以运行的cassandra例子 ">第一个可以运行的cassandra例子 </a> (0)</li><li><a href="http://blog.xcmd.net/2010-03-27-14/%e4%b8%96%e7%95%8c%e9%a1%b6%e7%ba%a7%e6%99%ba%e5%95%86%e5%8d%8f%e4%bc%9a%e6%94%b6%e5%bd%95.html" title="世界顶级智商协会收录">世界顶级智商协会收录</a> (0)</li><li><a href="http://blog.xcmd.net/2010-06-11-10/godaddy%e4%b8%bb%e6%9c%ba%e4%b9%9f%e5%a4%aa%e4%b8%8d%e7%a8%b3%e5%ae%9a%e4%ba%86.html" title="godaddy主机也太不稳定了">godaddy主机也太不稳定了</a> (0)</li><li><a href="http://blog.xcmd.net/2010-12-30-10/%e5%a6%82%e4%bd%95%e6%8a%8a%e5%8e%8b%e7%bc%a9%e6%96%87%e4%bb%b6%e5%8f%98%e6%88%90%e5%9b%be%e7%89%87%e6%96%87%e4%bb%b6%ef%bc%8c%e5%9b%be%e7%89%87%e5%90%8e%e7%bc%80%e6%94%b9%e6%88%90rar%e5%b0%b1.html" title="如何把压缩文件变成图片文件，图片后缀改成rar就可以解压">如何把压缩文件变成图片文件，图片后缀改成rar就可以解压</a> (0)</li><li><a href="http://blog.xcmd.net/2010-11-03-13/%e5%9c%a8sql-server%e4%b8%ad%e4%bd%bf%e7%94%a8sql%e5%91%bd%e4%bb%a4%e5%88%a0%e9%99%a4%e6%96%87%e4%bb%b6.html" title="在SQL Server中使用SQL命令删除文件">在SQL Server中使用SQL命令删除文件</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xcmd.net/2012-02-06-10/%e6%9d%8e%e5%98%89%e8%af%9a%e6%bc%94%e8%ae%b2%ef%bc%9a%e6%89%93%e5%b7%a5%e6%98%af%e6%9c%80%e6%84%9a%e8%a0%a2%e7%9a%84%e6%8a%95%e8%b5%84.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决sql server触发器的影响行数对程序的影响</title>
		<link>http://blog.xcmd.net/2011-12-30-15/%e8%a7%a3%e5%86%b3sql-server%e8%a7%a6%e5%8f%91%e5%99%a8%e7%9a%84%e5%bd%b1%e5%93%8d%e8%a1%8c%e6%95%b0%e5%af%b9%e7%a8%8b%e5%ba%8f%e7%9a%84%e5%bd%b1%e5%93%8d.html</link>
		<comments>http://blog.xcmd.net/2011-12-30-15/%e8%a7%a3%e5%86%b3sql-server%e8%a7%a6%e5%8f%91%e5%99%a8%e7%9a%84%e5%bd%b1%e5%93%8d%e8%a1%8c%e6%95%b0%e5%af%b9%e7%a8%8b%e5%ba%8f%e7%9a%84%e5%bd%b1%e5%93%8d.html#comments</comments>
		<pubDate>Fri, 30 Dec 2011 07:43:26 +0000</pubDate>
		<dc:creator>冰点</dc:creator>
				<category><![CDATA[C#/ASP.NET]]></category>
		<category><![CDATA[MSSQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[触发器]]></category>

		<guid isPermaLink="false">http://blog.xcmd.net/?p=402</guid>
		<description><![CDATA[解决方法：
方法很简单，就是直接在触发器内关闭触发器的影响行数。使用如下语句：
set nocount on&#8212;&#8212;-关闭影响行数
set nocount off&#8212;&#8212;-打开影响行数
推荐文章关于SQL不重复记录的总结 (0)sql往年工资累加查询 (0)SQL语句:去掉重复值返回多列 (0)SQL操作全集 (0)在SQL Server中使用SQL命令删除文件 (1)50种方法优化SQL Server数据库查询 (0)]]></description>
			<content:encoded><![CDATA[<p>解决方法：<br />
方法很简单，就是直接在触发器内关闭触发器的影响行数。使用如下语句：<br />
set nocount on&#8212;&#8212;-关闭影响行数<br />
set nocount off&#8212;&#8212;-打开影响行数</p>
<h3  class="related_post_title">推荐文章</h3><ul class="related_post"><li><a href="http://blog.xcmd.net/2011-08-23-11/sql%e4%b8%8d%e9%87%8d%e5%a4%8d%e8%ae%b0%e5%bd%95%e7%9a%84%e6%80%bb%e7%bb%93.html" title="关于SQL不重复记录的总结">关于SQL不重复记录的总结</a> (0)</li><li><a href="http://blog.xcmd.net/2011-03-24-16/sql%e5%be%80%e5%b9%b4%e5%b7%a5%e8%b5%84%e7%b4%af%e5%8a%a0%e6%9f%a5%e8%af%a2.html" title="sql往年工资累加查询">sql往年工资累加查询</a> (0)</li><li><a href="http://blog.xcmd.net/2011-03-21-10/sql%e8%af%ad%e5%8f%a5%e5%8e%bb%e6%8e%89%e9%87%8d%e5%a4%8d%e5%80%bc%e8%bf%94%e5%9b%9e%e5%a4%9a%e5%88%97.html" title="SQL语句:去掉重复值返回多列">SQL语句:去掉重复值返回多列</a> (0)</li><li><a href="http://blog.xcmd.net/2010-11-04-12/sql%e6%93%8d%e4%bd%9c%e5%85%a8%e9%9b%86.html" title="SQL操作全集">SQL操作全集</a> (0)</li><li><a href="http://blog.xcmd.net/2010-11-03-13/%e5%9c%a8sql-server%e4%b8%ad%e4%bd%bf%e7%94%a8sql%e5%91%bd%e4%bb%a4%e5%88%a0%e9%99%a4%e6%96%87%e4%bb%b6.html" title="在SQL Server中使用SQL命令删除文件">在SQL Server中使用SQL命令删除文件</a> (1)</li><li><a href="http://blog.xcmd.net/2010-09-10-17/50%e7%a7%8d%e6%96%b9%e6%b3%95%e4%bc%98%e5%8c%96sql-server%e6%95%b0%e6%8d%ae%e5%ba%93%e6%9f%a5%e8%af%a2.html" title="50种方法优化SQL Server数据库查询">50种方法优化SQL Server数据库查询</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xcmd.net/2011-12-30-15/%e8%a7%a3%e5%86%b3sql-server%e8%a7%a6%e5%8f%91%e5%99%a8%e7%9a%84%e5%bd%b1%e5%93%8d%e8%a1%8c%e6%95%b0%e5%af%b9%e7%a8%8b%e5%ba%8f%e7%9a%84%e5%bd%b1%e5%93%8d.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>天涯4000万用户密码下载地址</title>
		<link>http://blog.xcmd.net/2011-12-27-12/%e5%a4%a9%e6%b6%af4000%e4%b8%87%e7%94%a8%e6%88%b7%e5%af%86%e7%a0%81%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html</link>
		<comments>http://blog.xcmd.net/2011-12-27-12/%e5%a4%a9%e6%b6%af4000%e4%b8%87%e7%94%a8%e6%88%b7%e5%af%86%e7%a0%81%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html#comments</comments>
		<pubDate>Tue, 27 Dec 2011 04:53:23 +0000</pubDate>
		<dc:creator>冰点</dc:creator>
				<category><![CDATA[生活|工作]]></category>
		<category><![CDATA[天涯4000万用户密码下载地址]]></category>
		<category><![CDATA[密码]]></category>

		<guid isPermaLink="false">http://blog.xcmd.net/?p=401</guid>
		<description><![CDATA[4000万用户密码？
　　数据包上标的！
　　晚上，针对“天涯4000万用户密码遭泄露”的说法，天涯官方表示，所谓的4000万用户是黑客打包的数据文件名称上标的，具体到底有多少用户密码遭泄露，现在还不能确定。但根据天涯技术人员查询，遭泄露的用户不会大于这个数字。天涯网称，在得知用户隐私遭黑客泄露以后已经启动应急预案，通过站内短信、Email等一切有效联系手段通知用户尽快修改个人密码。
         天涯公布了《关于天涯社区用户账号被泄露的声明》：“由于历史原因，天涯社区早期使用过明文密码，此次被盗的数据为2009年之前的备份数据。2010年之后，我们升级改造了天涯社区用户账号管理功能，使用了强加密算法，解决了天涯社区用户账号的各种安全性问题。如果天涯社区账号已经被盗怎么办？1、使用取回密码功能，通过注册邮箱、认证手机或申诉的方式取回密码。2、拨打我们的24小时客服电话，由客服人员进行验证之后取回密码。”
天涯_4000W.rar下载地址:ed2k://&#124;file&#124;%E5%A4%A9%E6%B6%AF_4000W.rar&#124;493480455&#124;E4E0CFD85E2A783A3C3BD2539AA28FC3&#124;/

推荐文章CSDN,7K7K,多玩网,嘟嘟牛,178游戏网,人人网,用户名和密码和邮箱数据库下载 (6)CSDN600万用户的登录名密码邮箱等资料下载地址 (5)]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;">4000万用户密码？</span><br />
　　数据包上标的！<br />
　　晚上，针对“天涯4000万用户密码遭泄露”的说法，天涯官方表示，所谓的4000万用户是黑客打包的数据文件名称上标的，具体到底有多少用户密码遭泄露，现在还不能确定。但根据天涯技术人员查询，遭泄露的用户不会大于这个数字。天涯网称，在得知用户隐私遭黑客泄露以后已经启动应急预案，通过站内短信、Email等一切有效联系手段通知用户尽快修改个人密码。<br />
         天涯公布了《关于天涯社区用户账号被泄露的声明》：“由于历史原因，天涯社区早期使用过明文密码，此次被盗的数据为2009年之前的备份数据。2010年之后，我们升级改造了天涯社区用户账号管理功能，使用了强加密算法，解决了天涯社区用户账号的各种安全性问题。如果天涯社区账号已经被盗怎么办？1、使用取回密码功能，通过注册邮箱、认证手机或申诉的方式取回密码。2、拨打我们的24小时客服电话，由客服人员进行验证之后取回密码。”</p>
<pre>天涯_4000W.rar下载地址:ed2k://|file|%E5%A4%A9%E6%B6%AF_4000W.rar|493480455|E4E0CFD85E2A783A3C3BD2539AA28FC3|/
</pre>
<h3  class="related_post_title">推荐文章</h3><ul class="related_post"><li><a href="http://blog.xcmd.net/2011-12-22-17/csdn7k7k%e5%a4%9a%e7%8e%a9%e7%bd%91%e5%98%9f%e5%98%9f%e7%89%9b178%e6%b8%b8%e6%88%8f%e7%bd%91%e4%ba%ba%e4%ba%ba%e7%bd%91%e7%94%a8%e6%88%b7%e5%90%8d%e5%92%8c%e5%af%86%e7%a0%81%e5%92%8c%e9%82%ae.html" title="CSDN,7K7K,多玩网,嘟嘟牛,178游戏网,人人网,用户名和密码和邮箱数据库下载">CSDN,7K7K,多玩网,嘟嘟牛,178游戏网,人人网,用户名和密码和邮箱数据库下载</a> (6)</li><li><a href="http://blog.xcmd.net/2011-12-22-10/csdn600%e4%b8%87%e7%94%a8%e6%88%b7%e7%9a%84%e7%99%bb%e5%bd%95%e5%90%8d%e5%af%86%e7%a0%81%e9%82%ae%e7%ae%b1%e7%ad%89%e8%b5%84%e6%96%99%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html" title="CSDN600万用户的登录名密码邮箱等资料下载地址">CSDN600万用户的登录名密码邮箱等资料下载地址</a> (5)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xcmd.net/2011-12-27-12/%e5%a4%a9%e6%b6%af4000%e4%b8%87%e7%94%a8%e6%88%b7%e5%af%86%e7%a0%81%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSDN,7K7K,多玩网,嘟嘟牛,178游戏网,人人网,用户名和密码和邮箱数据库下载</title>
		<link>http://blog.xcmd.net/2011-12-22-17/csdn7k7k%e5%a4%9a%e7%8e%a9%e7%bd%91%e5%98%9f%e5%98%9f%e7%89%9b178%e6%b8%b8%e6%88%8f%e7%bd%91%e4%ba%ba%e4%ba%ba%e7%bd%91%e7%94%a8%e6%88%b7%e5%90%8d%e5%92%8c%e5%af%86%e7%a0%81%e5%92%8c%e9%82%ae.html</link>
		<comments>http://blog.xcmd.net/2011-12-22-17/csdn7k7k%e5%a4%9a%e7%8e%a9%e7%bd%91%e5%98%9f%e5%98%9f%e7%89%9b178%e6%b8%b8%e6%88%8f%e7%bd%91%e4%ba%ba%e4%ba%ba%e7%bd%91%e7%94%a8%e6%88%b7%e5%90%8d%e5%92%8c%e5%af%86%e7%a0%81%e5%92%8c%e9%82%ae.html#comments</comments>
		<pubDate>Thu, 22 Dec 2011 09:35:20 +0000</pubDate>
		<dc:creator>冰点</dc:creator>
				<category><![CDATA[生活|工作]]></category>
		<category><![CDATA[178游戏网]]></category>
		<category><![CDATA[7K7K]]></category>
		<category><![CDATA[CSDN]]></category>
		<category><![CDATA[人人网]]></category>
		<category><![CDATA[嘟嘟牛]]></category>
		<category><![CDATA[多玩网]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[用户名和密码和邮箱数据库下载]]></category>

		<guid isPermaLink="false">http://blog.xcmd.net/?p=399</guid>
		<description><![CDATA[CSDN,7K7K,多玩网,嘟嘟牛,178游戏网,人人网,用户名和密码和邮箱数据库下载
人人网猫扑多玩178游戏嘟嘟牛数据打包下载
CSDN.7K7K.多玩网.嘟嘟牛.178游戏网.人人网.用户数据库下载
据发布都称，邮箱大部分可以直接登陆，其中CSDN是明文密码，其他暂未验证，已经下载的网友反应，迅雷及百度开始封锁，资源失效请在http://www.duozui.net/ziyuan/908.html留言，由于数据较大，人数较大，请不要着急，几天之内会发送到你邮箱。

人人网猫扑多玩178游戏嘟嘟牛数据打包下载
7K7K 2000W数据库
thunder://QUFodHRwOi8veGxpc3N1ZTExMC5zYW5kYWkubmV0LzdrN2syMDAw5LiHXzIwNDcucmFyP2ZpZD1iYXhLQ2sqeEtzWW9tUUVUSHBFS0x2ZjJGR2pBYmlNTUFBQUFBSzlqWEhHZXBQNFYwV09obHRhR2hqaGlheEJTJm1pZD02NjYmdGhyZXNob2xkPTE1MCZ0aWQ9MkE3OTNGNDU0MkREOTY2OEQyNDA4NTg1MUNGOUJGNDgmc3JjaWQ9MTEyJnZlcm5vPTFaWg==/
嘟嘟牛__66277
thunder://QUFodHRwOi8veGxpc3N1ZTExMC5zYW5kYWkubmV0L+WYn+WYn+eJm182NjI3Ny5yYXI/ZmlkPURMaUdZUG4tUFh6VzhDZFhDS2h6SkF6cUVCd2wwTm9NQUFBQUFLVzdBUjdJVGdGRjFLWERHVTBnWlU2T3BoZUUmbWlkPTY2NiZ0aHJlc2hvbGQ9MTUwJnRpZD1DRTM2NjMyMDczRTBENTk2QjM0RTM1MzZENzQyNUY4RiZzcmNpZD0xMTImdmVybm89MVpa
178游戏网
thunder://QUFodHRwOi8veGxpc3N1ZTExMC5zYW5kYWkubmV0LzE3OCgxMDAwdylfMzA4Ny5yYXI/ZmlkPVBNWnN4V3puelNNUUxYeC1sRXpNNFd1eE5Hei1HM2dHQUFBQUFDNUZHU0ZBcWxrYmxjUS04WkNGM01ySmJZTkQmbWlkPTY2NiZ0aHJlc2hvbGQ9MTUwJnRpZD1BQkUzOEY5MDYyNUZCNTM4QzFDOUNGRjY0RTZDNzIwMCZzcmNpZD0xMTImdmVybm89MVpa
多玩网__800W
thunder://QUFodHRwOi8veGxpc3N1ZTExMC5zYW5kYWkubmV0L+WkmueOqee9kV84MDBXLnJhcj9maWQ9Nnl0MGh4c3ZLeURWZkt4UzZ4anRNQTQ5dGNFN2ZJNE5BQUFBQUd0MTE4bUppaXlmQUIqd2FCRyprZUlPcC1hTCZtaWQ9NjY2JnRocmVzaG9sZD0xNTAmdGlkPTY3MEVDNDkzRTI3NjU4RkM1NDA0NzJEQTI4MUZCODM3JnNyY2lkPTExMiZ2ZXJubz0xWlo=
猫1000W
thunder://QUFodHRwOi8veGxpc3N1ZTExMC5zYW5kYWkubmV0L+eMqzEwMDBXXzgyMjgucmFyP2ZpZD1DRVBMKmIzZ093Y0dXTERHT0NCc2FxazJJcDhqR3I4RkFBQUFBTC04WmpRZGRpeG9iZkp0aTQqellzVURTU1I4Jm1pZD02NjYmdGhyZXNob2xkPTE1MCZ0aWQ9MkI3QkMwMzg1QzlGN0E4MjY1NUZEQTEwQkMzMDE4MDQmc3JjaWQ9MTEyJnZlcm5vPTFaWg==
人人网500W
thunder://QUFodHRwOi8veGxpc3N1ZTExMC5zYW5kYWkubmV0L+S6uuS6uue9kTUwMFdfMTY2MTAucmFyP2ZpZD1JbXAxTUNHSlB5NDJob1dIclQzaENkKnoqOFJMLWhnREFBQUFBSHpXUDJHclNmUmJFSCo3V2tkcmhNTk5kcjVzJm1pZD02NjYmdGhyZXNob2xkPTE1MCZ0aWQ9RDIxOEMyQUYxMDY0MkI5MDlGQTc1NjkyQzQ0RkI0MTgmc3JjaWQ9MTEyJnZlcm5vPTFaWg==
CSDN-中文IT社区-600万
thunder://QUFodHRwOi8vMTE5LjE0Ny4xNTAuMzcvZG93bl9ncm91cDE4MC9NMDAvMDgvN0YvZDVPV0pVNmx
转载自:http://www.duozui.net/ziyuan/908.html
推荐文章CSDN600万用户的登录名密码邮箱等资料下载地址 (5)天涯4000万用户密码下载地址 (1)]]></description>
			<content:encoded><![CDATA[<p>CSDN,7K7K,多玩网,嘟嘟牛,178游戏网,人人网,用户名和密码和邮箱数据库下载</p>
<p>人人网猫扑多玩178游戏嘟嘟牛数据打包下载</p>
<p>CSDN.7K7K.多玩网.嘟嘟牛.178游戏网.人人网.用户数据库下载</p>
<p>据发布都称，邮箱大部分可以直接登陆，<span style="color: #ff0000;">其中CSDN是明文密码</span>，其他暂未验证，已经下载的网友反应，迅雷及百度开始封锁，<strong>资源失效请在http://www.duozui.net/ziyuan/908.html留言</strong>，由于数据较大，人数较大，请不要着急，几天之内会发送到你邮箱。</p>
<div><img title="人人网猫扑多玩178游戏嘟嘟牛数据打包下载" src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2011/12/093520MBc.jpg" alt="人人网猫扑多玩178游戏嘟嘟牛数据打包下载" width="283" height="300" /></div>
<div>人人网猫扑多玩178游戏嘟嘟牛数据打包下载</div>
<p>7K7K 2000W数据库</p>
<pre>thunder://QUFodHRwOi8veGxpc3N1ZTExMC5zYW5kYWkubmV0LzdrN2syMDAw5LiHXzIwNDcucmFyP2ZpZD1iYXhLQ2sqeEtzWW9tUUVUSHBFS0x2ZjJGR2pBYmlNTUFBQUFBSzlqWEhHZXBQNFYwV09obHRhR2hqaGlheEJTJm1pZD02NjYmdGhyZXNob2xkPTE1MCZ0aWQ9MkE3OTNGNDU0MkREOTY2OEQyNDA4NTg1MUNGOUJGNDgmc3JjaWQ9MTEyJnZlcm5vPTFaWg==/</pre>
<p>嘟嘟牛__66277</p>
<pre>thunder://QUFodHRwOi8veGxpc3N1ZTExMC5zYW5kYWkubmV0L+WYn+WYn+eJm182NjI3Ny5yYXI/ZmlkPURMaUdZUG4tUFh6VzhDZFhDS2h6SkF6cUVCd2wwTm9NQUFBQUFLVzdBUjdJVGdGRjFLWERHVTBnWlU2T3BoZUUmbWlkPTY2NiZ0aHJlc2hvbGQ9MTUwJnRpZD1DRTM2NjMyMDczRTBENTk2QjM0RTM1MzZENzQyNUY4RiZzcmNpZD0xMTImdmVybm89MVpa
178游戏网</pre>
<pre>thunder://QUFodHRwOi8veGxpc3N1ZTExMC5zYW5kYWkubmV0LzE3OCgxMDAwdylfMzA4Ny5yYXI/ZmlkPVBNWnN4V3puelNNUUxYeC1sRXpNNFd1eE5Hei1HM2dHQUFBQUFDNUZHU0ZBcWxrYmxjUS04WkNGM01ySmJZTkQmbWlkPTY2NiZ0aHJlc2hvbGQ9MTUwJnRpZD1BQkUzOEY5MDYyNUZCNTM4QzFDOUNGRjY0RTZDNzIwMCZzcmNpZD0xMTImdmVybm89MVpa</pre>
<p>多玩网__800W</p>
<pre>thunder://QUFodHRwOi8veGxpc3N1ZTExMC5zYW5kYWkubmV0L+WkmueOqee9kV84MDBXLnJhcj9maWQ9Nnl0MGh4c3ZLeURWZkt4UzZ4anRNQTQ5dGNFN2ZJNE5BQUFBQUd0MTE4bUppaXlmQUIqd2FCRyprZUlPcC1hTCZtaWQ9NjY2JnRocmVzaG9sZD0xNTAmdGlkPTY3MEVDNDkzRTI3NjU4RkM1NDA0NzJEQTI4MUZCODM3JnNyY2lkPTExMiZ2ZXJubz0xWlo=</pre>
<p>猫1000W</p>
<pre>thunder://QUFodHRwOi8veGxpc3N1ZTExMC5zYW5kYWkubmV0L+eMqzEwMDBXXzgyMjgucmFyP2ZpZD1DRVBMKmIzZ093Y0dXTERHT0NCc2FxazJJcDhqR3I4RkFBQUFBTC04WmpRZGRpeG9iZkp0aTQqellzVURTU1I4Jm1pZD02NjYmdGhyZXNob2xkPTE1MCZ0aWQ9MkI3QkMwMzg1QzlGN0E4MjY1NUZEQTEwQkMzMDE4MDQmc3JjaWQ9MTEyJnZlcm5vPTFaWg==</pre>
<p>人人网500W</p>
<pre>thunder://QUFodHRwOi8veGxpc3N1ZTExMC5zYW5kYWkubmV0L+S6uuS6uue9kTUwMFdfMTY2MTAucmFyP2ZpZD1JbXAxTUNHSlB5NDJob1dIclQzaENkKnoqOFJMLWhnREFBQUFBSHpXUDJHclNmUmJFSCo3V2tkcmhNTk5kcjVzJm1pZD02NjYmdGhyZXNob2xkPTE1MCZ0aWQ9RDIxOEMyQUYxMDY0MkI5MDlGQTc1NjkyQzQ0RkI0MTgmc3JjaWQ9MTEyJnZlcm5vPTFaWg==</pre>
<p>CSDN-中文IT社区-600万</p>
<pre>thunder://QUFodHRwOi8vMTE5LjE0Ny4xNTAuMzcvZG93bl9ncm91cDE4MC9NMDAvMDgvN0YvZDVPV0pVNmx</pre>
<pre>转载自:http://www.duozui.net/ziyuan/908.html</pre>
<h3  class="related_post_title">推荐文章</h3><ul class="related_post"><li><a href="http://blog.xcmd.net/2011-12-22-10/csdn600%e4%b8%87%e7%94%a8%e6%88%b7%e7%9a%84%e7%99%bb%e5%bd%95%e5%90%8d%e5%af%86%e7%a0%81%e9%82%ae%e7%ae%b1%e7%ad%89%e8%b5%84%e6%96%99%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html" title="CSDN600万用户的登录名密码邮箱等资料下载地址">CSDN600万用户的登录名密码邮箱等资料下载地址</a> (5)</li><li><a href="http://blog.xcmd.net/2011-12-27-12/%e5%a4%a9%e6%b6%af4000%e4%b8%87%e7%94%a8%e6%88%b7%e5%af%86%e7%a0%81%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html" title="天涯4000万用户密码下载地址">天涯4000万用户密码下载地址</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xcmd.net/2011-12-22-17/csdn7k7k%e5%a4%9a%e7%8e%a9%e7%bd%91%e5%98%9f%e5%98%9f%e7%89%9b178%e6%b8%b8%e6%88%8f%e7%bd%91%e4%ba%ba%e4%ba%ba%e7%bd%91%e7%94%a8%e6%88%b7%e5%90%8d%e5%92%8c%e5%af%86%e7%a0%81%e5%92%8c%e9%82%ae.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>CSDN600万用户的登录名密码邮箱等资料下载地址</title>
		<link>http://blog.xcmd.net/2011-12-22-10/csdn600%e4%b8%87%e7%94%a8%e6%88%b7%e7%9a%84%e7%99%bb%e5%bd%95%e5%90%8d%e5%af%86%e7%a0%81%e9%82%ae%e7%ae%b1%e7%ad%89%e8%b5%84%e6%96%99%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html</link>
		<comments>http://blog.xcmd.net/2011-12-22-10/csdn600%e4%b8%87%e7%94%a8%e6%88%b7%e7%9a%84%e7%99%bb%e5%bd%95%e5%90%8d%e5%af%86%e7%a0%81%e9%82%ae%e7%ae%b1%e7%ad%89%e8%b5%84%e6%96%99%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html#comments</comments>
		<pubDate>Thu, 22 Dec 2011 02:39:34 +0000</pubDate>
		<dc:creator>冰点</dc:creator>
				<category><![CDATA[生活|工作]]></category>
		<category><![CDATA[CSDN]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[登录名]]></category>
		<category><![CDATA[邮箱]]></category>

		<guid isPermaLink="false">http://blog.xcmd.net/?p=396</guid>
		<description><![CDATA[12月21日晚，有网友爆料称，国内著名程序员社区CSDN的安全系统遭到黑客攻击，CSDN数据库中的600万用户的登录名及密码、邮箱等资料遭到泄漏。CSDN在微博上确认了这一事故，并表示已经报案。
这份名为“CSDN-中文IT社区-600万.rar”的文件已经在网上传播，经过下载验证，里面的确记录了大量CSDN的邮箱和密码，最不可思议的，密码居然都是明文，未经过任何加密处理。
 CSDN600万用户名密码泄露 
CSDN官方微博对该事件的回应如下：“对于CSDN用户账号密码数据库被泄露一事，经过初步分析，该库系2009年CSDN作为备份所用，由于未查明原因被泄露，特向所有因此而受到影响的用户致以深深歉意。目前CSDN已向公安机关报案，公安机关也正在调查相关线索。CSDN现有2000万注册用户的账号密码数据库已经全部采取了密文保护和备份。”
 CSDN600万用户名密码泄露 
经验证，资料确实无误，经过这次风波，可以肯定的是，CSDN的积分下载基本上是废了，如果你没有积分，随便找个下载就OK。
还有，这么多09年以前的程序老鸟的用户资料，600万，这些IT用户的信息都是真实的，最低级的营销，有效推销个电脑鼠标神马的，不比淘宝强多了么，最重要的是，免费的。
CNDN泄露的账号密码打包下载地址：
CSDN-中文IT社区-600万.rar http://dl.dbank.com/c0fxxzenrj
未加密的资源大多被和谐，此文件经过重新加密压缩，解压密码：tsky.cc
转载自:http://www.duozui.net/ziyuan/893.html
推荐文章CSDN,7K7K,多玩网,嘟嘟牛,178游戏网,人人网,用户名和密码和邮箱数据库下载 (6)天涯4000万用户密码下载地址 (1)]]></description>
			<content:encoded><![CDATA[<p>12月21日晚，有网友爆料称，国内著名程序员社区<strong>CSDN</strong>的安全系统遭到黑客攻击，CSDN数据库中的600万用户的登录名及密码、邮箱等资料遭到泄漏。CSDN在微博上确认了这一事故，并表示已经报案。</p>
<p>这份名为“<span style="color: #ff0000;"><strong>CSDN</strong>-中文IT社区-600万.rar</span>”的文件已经在网上传播，经过下载验证，里面的确记录了大量<span style="color: #ff0000;"><strong>CSDN</strong>的邮箱和密码</span>，最不可思议的，密码居然都是明文，未经过任何加密处理。</p>
<div id="attachment_896"><a rel="lightbox[893]" href="http://www.duozui.net/wp-content/uploads/2011/12/1.jpg"><img title="CSDN600万用户名密码泄露" src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2011/12/0242476mv.jpg" alt="CSDN600万用户名密码泄露" width="300" height="166" /></a> CSDN600万用户名密码泄露 </div>
<p>CSDN官方微博对该事件的回应如下：“对于CSDN用户账号密码数据库被泄露一事，经过初步分析，该库系2009年CSDN作为备份所用，由于未查明原因被泄露，特向所有因此而受到影响的用户致以深深歉意。目前CSDN已向公安机关报案，公安机关也正在调查相关线索。CSDN现有2000万注册用户的账号密码数据库已经全部采取了密文保护和备份。”</p>
<div id="attachment_897"><img title="CSDN600万用户名密码泄露" src="http://blog.xcmd.net/wp-content/uploads/auto_save_image/2011/12/024247ISY.jpg" alt="CSDN600万用户名密码泄露" width="174" height="300" /> CSDN600万用户名密码泄露 </div>
<p>经验证，资料确实无误，经过这次风波，可以肯定的是，CSDN的积分下载基本上是废了，如果你没有积分，随便找个下载就OK。</p>
<p>还有，这么多09年以前的程序老鸟的用户资料，600万，这些IT用户的信息都是真实的，最低级的营销，有效推销个电脑鼠标神马的，不比淘宝强多了么，最重要的是，免费的。</p>
<p><span style="color: #ff0000;">CNDN泄露的账号密码打包下载地址：</span></p>
<p>CSDN-中文IT社区-600万.rar http://dl.dbank.com/c0fxxzenrj</p>
<p>未加密的资源大多被和谐，此文件经过重新加密压缩，<span style="color: #008000;">解压密码</span>：tsky.cc</p>
<p>转载自:http://www.duozui.net/ziyuan/893.html</p>
<h3  class="related_post_title">推荐文章</h3><ul class="related_post"><li><a href="http://blog.xcmd.net/2011-12-22-17/csdn7k7k%e5%a4%9a%e7%8e%a9%e7%bd%91%e5%98%9f%e5%98%9f%e7%89%9b178%e6%b8%b8%e6%88%8f%e7%bd%91%e4%ba%ba%e4%ba%ba%e7%bd%91%e7%94%a8%e6%88%b7%e5%90%8d%e5%92%8c%e5%af%86%e7%a0%81%e5%92%8c%e9%82%ae.html" title="CSDN,7K7K,多玩网,嘟嘟牛,178游戏网,人人网,用户名和密码和邮箱数据库下载">CSDN,7K7K,多玩网,嘟嘟牛,178游戏网,人人网,用户名和密码和邮箱数据库下载</a> (6)</li><li><a href="http://blog.xcmd.net/2011-12-27-12/%e5%a4%a9%e6%b6%af4000%e4%b8%87%e7%94%a8%e6%88%b7%e5%af%86%e7%a0%81%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html" title="天涯4000万用户密码下载地址">天涯4000万用户密码下载地址</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xcmd.net/2011-12-22-10/csdn600%e4%b8%87%e7%94%a8%e6%88%b7%e7%9a%84%e7%99%bb%e5%bd%95%e5%90%8d%e5%af%86%e7%a0%81%e9%82%ae%e7%ae%b1%e7%ad%89%e8%b5%84%e6%96%99%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Asp.Net与SEO-Viewstate优化终极解决方案</title>
		<link>http://blog.xcmd.net/2011-11-03-10/asp-net%e4%b8%8eseo-viewstate%e4%bc%98%e5%8c%96%e7%bb%88%e6%9e%81%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88.html</link>
		<comments>http://blog.xcmd.net/2011-11-03-10/asp-net%e4%b8%8eseo-viewstate%e4%bc%98%e5%8c%96%e7%bb%88%e6%9e%81%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88.html#comments</comments>
		<pubDate>Thu, 03 Nov 2011 02:55:56 +0000</pubDate>
		<dc:creator>冰点</dc:creator>
				<category><![CDATA[C#/ASP.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Viewstate优化]]></category>

		<guid isPermaLink="false">http://blog.xcmd.net/?p=394</guid>
		<description><![CDATA[这段时间,老大在看了网站后,发现viewstate所产生的一堆乱码，严重影响了我们网站http://www.xbcar.net 西部汽车网的打开速度和搜索引擎的抓取．就给我下了道铁令，三天内必须解决．这下该轮到我头大了，
例如：
input type=&#8221;hidden&#8221; name=&#8221;__VIEWSTATE&#8221; id=&#8221;__VIEWSTATE&#8221; value=&#8221;dEV4cHJlc3Npb247UmVhZE9ubHk7PjtsPHB1Yl9uYW1lO3B1Yl9uYW1lO3B1Yl9uYW1 lO288Zj47Pj47Ozs7PjtAMDxw&#8221; /&#62;
 
我立马翻遍了所有的资料，及查遍了百度和Google。以求得到最佳解决方案。但都没有一个完整的解决方案。都写的比较零碎。但黄天不负有心人，最终还是让我找到了几种方案，并加以修改，改进。在此我要感谢这几个方案的提供者。谢谢他们的分享，在解决完我自己的问题后，有感于前几位的分享，故我也不敢独自分享，现在总结七种解决方案如下，以供大家分享，有不对的地方欢迎拍砖。现把ViewState的优化方法总结如下：
第一种解决方案(最快的一种，但是以牺牲asp.net方便性为代价的)西部汽车网
禁用viewstate。可在web.config里配置，或者页面@Page指令里加入 Enableviewstate=&#8221;false&#8221; ，即可防止上面的乱码了。然后页面传值使用form或者cookies，别用session和application他们都是服务器杀手，但这种方式灵活度不高，而且微软自带的控件无法使用了，不如用JSP来做
第二种解决方案：
使用微软的MVC框架，很好用，不过个人感觉开发起来蛮麻烦的，不推荐也不抵触，觉得还不成熟这个东西
第三种解决方案：
使用ajax+web services来搞定，推荐这种方法，真正的页面代码和业务代码分离，很爽，虽然有些烦琐编码的时候，不过感觉很爽。
第四种解决方案：(改写viewSate位置,不对这种方法要每个cs代码都加入重写内容，有点烦。当然可以重写个父类可以解决。但每次都要重写，所以也会增加对服务器开销。好，不多说了，现代码贴上)
要加入using System.Text.RegularExpressions;
  private static readonly Regex viewStateRegex =
            new Regex(&#8220;&#60;input type=/&#8221;hidden/&#8221; name=/&#8221;__VIEWSTATE/&#8221;.*/&#62;&#8221;, RegexOptions.IgnoreCase); //过滤viewstate html标记的正则表达式
        private static readonly Regex endFormRegex =
            new Regex(@&#8221;&#60;/form&#62;&#8221;, RegexOptions.Multiline &#124; RegexOptions.Compiled); //过滤 &#60;/form&#62;标记的正则表达式
        //重写HTML，过滤viewstate并输出
        protected override void Render(HtmlTextWriter writer)
        {
            System.IO.StringWriter stringWriter = new System.IO.StringWriter();
            HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
            [...]]]></description>
			<content:encoded><![CDATA[<p>这段时间,老大在看了网站后,发现viewstate所产生的一堆乱码，严重影响了我们网站http://www.xbcar.net 西部汽车网的打开速度和搜索引擎的抓取．就给我下了道铁令，三天内必须解决．这下该轮到我头大了，<br />
例如：<br />
input type=&#8221;hidden&#8221; name=&#8221;__VIEWSTATE&#8221; id=&#8221;__VIEWSTATE&#8221; value=&#8221;dEV4cHJlc3Npb247UmVhZE9ubHk7PjtsPHB1Yl9uYW1lO3B1Yl9uYW1lO3B1Yl9uYW1 lO288Zj47Pj47Ozs7PjtAMDxw&#8221; /&gt;<br />
 </p>
<p>我立马翻遍了所有的资料，及查遍了百度和Google。以求得到最佳解决方案。但都没有一个完整的解决方案。都写的比较零碎。但黄天不负有心人，最终还是让我找到了几种方案，并加以修改，改进。在此我要感谢这几个方案的提供者。谢谢他们的分享，在解决完我自己的问题后，有感于前几位的分享，故我也不敢独自分享，现在总结七种解决方案如下，以供大家分享，有不对的地方欢迎拍砖。现把ViewState的优化方法总结如下：</p>
<h3>第一种解决方案(最快的一种，但是以牺牲asp.net方便性为代价的)西部汽车网</h3>
<p>禁用viewstate。可在web.config里配置，或者页面@Page指令里加入 Enableviewstate=&#8221;false&#8221; ，即可防止上面的乱码了。然后页面传值使用form或者cookies，别用session和application他们都是服务器杀手，但这种方式灵活度不高，而且微软自带的控件无法使用了，不如用<span id="more-394"></span>JSP来做</p>
<h3>第二种解决方案：</h3>
<p>使用微软的MVC框架，很好用，不过个人感觉开发起来蛮麻烦的，不推荐也不抵触，觉得还不成熟这个东西</p>
<h3>第三种解决方案：</h3>
<p>使用ajax+web services来搞定，推荐这种方法，真正的页面代码和业务代码分离，很爽，虽然有些烦琐编码的时候，不过感觉很爽。</p>
<h3>第四种解决方案：(改写viewSate位置,不对这种方法要每个cs代码都加入重写内容，有点烦。当然可以重写个父类可以解决。但每次都要重写，所以也会增加对服务器开销。好，不多说了，现代码贴上)</h3>
<p>要加入using System.Text.RegularExpressions;<br />
  private static readonly Regex viewStateRegex =<br />
            new Regex(&#8220;&lt;input type=/&#8221;hidden/&#8221; name=/&#8221;__VIEWSTATE/&#8221;.*/&gt;&#8221;, RegexOptions.IgnoreCase); //过滤viewstate html标记的正则表达式<br />
        private static readonly Regex endFormRegex =<br />
            new Regex(@&#8221;&lt;/form&gt;&#8221;, RegexOptions.Multiline | RegexOptions.Compiled); //过滤 &lt;/form&gt;标记的正则表达式</p>
<p>        //重写HTML，过滤viewstate并输出<br />
        protected override void Render(HtmlTextWriter writer)<br />
        {<br />
            System.IO.StringWriter stringWriter = new System.IO.StringWriter();<br />
            HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);<br />
            base.Render(htmlWriter);</p>
<p>            string html = stringWriter.ToString();<br />
            Match viewStateMatch = viewStateRegex.Match(html);<br />
            string viewStateString = viewStateMatch.Captures[0].Value;//找出ViewState的Html标记 目的把viewstate的内容放到页面FORM的最后面加快加载速度和搜索抓录<br />
          //  viewStateString = &#8220;&lt;input type=/&#8221;hidden/&#8221; name=/&#8221;__VIEWSTATE/&#8221; id=/&#8221;__VIEWSTATE/&#8221; value=/&#8221;/&#8221; /&gt;&#8221;; //仿博客园</p>
<p>            html = html.Remove(viewStateMatch.Index, viewStateMatch.Length);//替换掉ViewState的html标记</p>
<p>            Match endFormMath = endFormRegex.Match(html, viewStateMatch.Index);<br />
            html = html.Insert(endFormMath.Index, viewStateString);//将ViewState的Html标记插入到&lt;/form&gt;标记之前<br />
            writer.Write(html);</p>
<p>        }<br />
      这段代码写在你的PAGE基类里，然后看下效果就明白了，把viewstate的内容放在了最后面，这样做两个目的，第一避免VIEWSTATE过大导致页面加载速度过慢，第二避免搜索引擎访问该页面没有找到准确的信息。</p>
<h3>第五种解决方案：(重写适配器, 这个方法就比上个方法好在不用增加多余的CPU开销)西部汽车网</h3>
<p>该方法使用的ASP.NET控制适配器架构。</p>
<p>控制适配器是一个可以用来控制所产生的HTML控制它适应的类。由于页面类，是一种负责任的渲染视图状态隐藏字段（ Page.BeginFormRender调用Page.RenderViewStateFields ），适配器的网页是必要的。然而，视图状态隐藏字段在ASP.NET基础架构中起着关键作用和难以修改相关的HTML 。</p>
<p>一个PageAdapter有一个方法叫做GetStatePersister（）返回的对象继承于PageStatePersister 。当加载和保存视图状态的时候调用PageStatePersister。这里有2个类是从PageStatePersister ： HiddenFieldPageStatePersister和SessionPageStatePersister继承来的。第一种是默认情况下，存储视图状态中的隐藏字段名为__VIEWSTATE 。第二个存储视图状态在session中。因此，我们可以很容易地创建一个自定义PageStatePersister来控制视图状态加载和保存过程。最大的问题是如何在form标记关闭之前建立隐藏的视图状态，同时以完全透明的解决办法。经过一些尝试我想出了一个解决方案，我很高兴的。</p>
<p>解决方案（再次感谢这个文章的作者，为asp.net作出的贡献）</p>
<p>(中文：http://www.chinaz.com/Webbiz/Seo/040a20P2009.html　　（一）</p>
<p>http://www.chinaz.com/Program/.NET/042W39322009.html  (二)</p>
<p>英文：http://www.manuelabadia.com/blog/PermaLink,guid,7924eaf8-b406-43af-9444-b816f6dfa246.aspx)</p>
<p>DEMO下载地址：http://www.blog-design.cn/upload/2009/4/SEOViewState.zip</p>
<p>注：但此方法在我实际使用中，发现在如果使用ajax控件的话，如UpdatePanel会出现问题,我三个DropDownList选择后，再全表提交后，取不到DropDownList值。希望能解决这个问题的朋友能告诉我一下，解决方法。谢谢.</p>
<h3>第六种解决方案：(ViewState保存在服务器端硬盘上.切记不是用Session，否则如果网站访问量过大的话，可能会极度消耗资源。当然保存在服务器端硬盘上是好是坏，现在的说法也是仁者见仁，智者见智)</h3>
<p>(此文来源:http://hi.baidu.com/lwf06017/blog/item/9815f9526165a5561038c28a.html)</p>
<p>如果你有一个非常酷的页面，页面上很多东西自动地响应用户操作而展现丰富的变化，你的ViewState是很有可能达到200K的。</p>
<p>这里是我将ViewState持久化保持在服务器端的代码，这样ViewState不占用网络带宽，因此其存取只是服务器的磁盘读取时间。并且它很小，可以说是磁盘随便转一圈就能同时读取好多ViewState，因此可以说“不占时间”。为了再“不占磁盘时间”，我还使用了缓存。<br />
一下这段代码可以放在页面中，或者页面的父类中：</p>
<p>using System.IO;<br />
using System.Threading;</p>
<p>protected override object LoadPageStateFromPersistenceMedium()<br />
    {<br />
        string viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;</p>
<p>        // var viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;<br />
        string stateStr = (string)Cache[viewStateID];<br />
        if (stateStr == null)<br />
        {<br />
            string fn = Path.Combine(this.Request.PhysicalApplicationPath, @&#8221;App_Data/ViewState/&#8221; + viewStateID);<br />
            stateStr = File.ReadAllText(fn);<br />
        }<br />
        return new ObjectStateFormatter().Deserialize(stateStr);<br />
    }</p>
<p>    protected override void SavePageStateToPersistenceMedium(object state)<br />
    {<br />
        string value = new ObjectStateFormatter().Serialize(state);<br />
        string viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //产生离散的id号码<br />
        string fn = this.Server.MapPath(@&#8221;~/App_Data/ViewState/&#8221; + viewStateID);</p>
<p>        //var fn = Path.Combine(this.Request.PhysicalApplicationPath, @&#8221;App_Data/ViewState/&#8221; + viewStateID);<br />
        //ThreadPool.QueueUserWorkItem(obj =&gt; File.WriteAllText(fn, value));<br />
        File.WriteAllText(fn, value);<br />
        Cache.Insert(viewStateID, value);<br />
        base.SavePageStateToPersistenceMedium(viewStateID);<br />
    }</p>
<p>不使用Session，因为它会“丢失”。ViewState保存在磁盘上，即使服务器重新启动，也不会丢失页面状态。</p>
<p>下面这段可以放在Global.asax中，也可以根本不管：</p>
<p>void Application_Start(object sender, EventArgs e)<br />
    {<br />
        // 在应用程序启动时运行的代码<br />
        System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(this.Server.MapPath(&#8220;~/App_Data/ViewState/&#8221;));<br />
        if (!dir.Exists)<br />
            dir.Create();<br />
        else<br />
        {<br />
            DateTime nt = DateTime.Now.AddHours(-1);<br />
            foreach (System.IO.FileInfo f in dir.GetFiles())<br />
            {<br />
                if (f.CreationTime &lt; nt)<br />
                    f.Delete();<br />
            }<br />
        }<br />
    }</p>
<p>这可以确保绝对稳定可靠地工作。以后请放心使用ViewState，把交互式页面提高水平才是最重要的，不要纠缠在“ViewState太大”上。实际上，由于页面设计不够酷，交互变化看上去不够丰富，ViewState实在是太小太小了。</p>
<p>如果你使用了它有效提高了复杂交互页面的效率，可以说一下提高了多少？！如果你觉得没用，也可以说一下在什么情况下没用。</p>
<p>来源:CSDN</p>
<p>http://topic.csdn.net/u/20080530/22/ef0d36a4-6bd4-4eba-9743-b56f080b2161.html</p>
<p>另外，不使用缓存，那么代码就简单一些了，代码变为：</p>
<p>protected override object LoadPageStateFromPersistenceMedium()<br />
{<br />
var viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;<br />
var fn = Path.Combine(this.Request.PhysicalApplicationPath, @&#8221;App_Data/ViewState/&#8221; + viewStateID);<br />
var stateStr = File.ReadAllText(fn);<br />
return new ObjectStateFormatter().Deserialize(stateStr);<br />
}</p>
<p>protected override void SavePageStateToPersistenceMedium(object state)<br />
{<br />
var value = new ObjectStateFormatter().Serialize(state);<br />
var viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //产生离散的id号码<br />
var fn = Path.Combine(this.Request.PhysicalApplicationPath, @&#8221;App_Data/ViewState/&#8221; + viewStateID);<br />
ThreadPool.QueueUserWorkItem(obj =&gt; File.WriteAllText(fn, value));<br />
base.SavePageStateToPersistenceMedium(viewStateID);<br />
}</p>
<p>我认为大家应该知道了缓存的作用，所以我并没有特意去说不过不用缓存，代码如何写。</p>
<p>即使不用缓存（那么我们也就暂时满足了对缓存忧心忡忡的人，虽然这是不必要的），我们使用服务器端磁盘读的时间来节省服务器通过http从浏览器端读ViewState时间，其结论跟我这个题目要说明的也是一样的。<br />
 <br />
 </p>
<h3> 第七种解决方案：(压缩方法，当然此方法在网上一搜一大把了，无就不在这里详述了)</h3>
<p>总上七总方案。因为我们的网站已成型，又不想太大改，我最后还是选择这第一种和第六种相结合的方法。大家如果有兴趣可以看看我的网站：http://www.xbcar.net</a> 西部汽车网 看看哪些地方还会有ViewState的殘留。好。谢谢。如果大家觉得我这个文章还行，转载时请尽量保留出处<a href="http://bbs.xbcar.net/showtopic-3168-1.html#3176">http://bbs.xbcar.net/showtopic-3168-1.html#3176 ，也算我没白忙一场，谢谢。.如果还有同志们发现了错误或有更好的解决方案及第，请联系我：QQ:64830979，我将不胜感激.</p>
<h3  class="related_post_title">推荐文章</h3><ul class="related_post"><li><a href="http://blog.xcmd.net/2011-09-16-14/asp-net%e5%87%a0%e7%a7%8d%e9%a1%b5%e9%9d%a2%e4%bc%a0%e5%80%bc%e7%9a%84%e6%96%b9%e6%b3%95.html" title="ASP.NET几种页面传值的方法">ASP.NET几种页面传值的方法</a> (0)</li><li><a href="http://blog.xcmd.net/2011-08-25-13/asp-net%e5%9b%9e%e8%b0%83%e5%ae%9e%e7%8e%b0ajax.html" title="ASP.NET回调实现AJAX">ASP.NET回调实现AJAX</a> (0)</li><li><a href="http://blog.xcmd.net/2011-08-24-10/asp-net%e5%88%a9%e7%94%a8npoi-1-2-3%e5%af%bc%e5%87%baexcel2007%e4%b8%8b%e8%bd%bd.html" title="ASP.NET利用NPOI 1.2.3导出EXCEL2007下载">ASP.NET利用NPOI 1.2.3导出EXCEL2007下载</a> (0)</li><li><a href="http://blog.xcmd.net/2011-08-23-11/asp-net%e5%af%bc%e5%87%baexcel%e4%b8%8b%e8%bd%bd.html" title="ASP.NET导出Excel下载">ASP.NET导出Excel下载</a> (0)</li><li><a href="http://blog.xcmd.net/2011-08-22-21/seo-wordpress%e7%9a%84description-%e5%92%8c-keywords.html" title="SEO WordPress的Description 和 Keywords">SEO WordPress的Description 和 Keywords</a> (0)</li><li><a href="http://blog.xcmd.net/2011-07-15-09/asp-net%e5%8a%a8%e6%80%81%e5%8a%a0%e8%bd%bdjscss.html" title="ASP.NET动态加载JS/CSS">ASP.NET动态加载JS/CSS</a> (0)</li><li><a href="http://blog.xcmd.net/2011-04-02-14/casp-net-%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6app-configweb-config-%e4%bf%ae%e6%94%b9.html" title="C#/ASP.NET 配置文件app.config/web.config 修改">C#/ASP.NET 配置文件app.config/web.config 修改</a> (0)</li><li><a href="http://blog.xcmd.net/2010-10-25-10/%e5%9c%a8%e7%ba%bf%e7%94%9f%e6%88%90flashpaper%e6%96%87%e6%a1%a3.html" title="在线生成FlashPaper文档">在线生成FlashPaper文档</a> (2)</li><li><a href="http://blog.xcmd.net/2010-09-09-20/httphandler.html" title="HttpHandler">HttpHandler</a> (0)</li><li><a href="http://blog.xcmd.net/2010-09-09-20/asp-net%e5%bf%85%e9%a1%bb%e7%9f%a5%e9%81%93%e7%9a%84%e4%b8%9c%e4%b8%9c.html" title="ASP.NET必须知道的东东">ASP.NET必须知道的东东</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xcmd.net/2011-11-03-10/asp-net%e4%b8%8eseo-viewstate%e4%bc%98%e5%8c%96%e7%bb%88%e6%9e%81%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

