<?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>werisa</title>
	<atom:link href="http://werisa.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://werisa.com</link>
	<description>又一个 5say Blogs Blog</description>
	<lastBuildDate>Fri, 09 Apr 2010 09:42:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Apache中.htaccess防资源盗链</title>
		<link>http://werisa.com/?p=92</link>
		<comments>http://werisa.com/?p=92#comments</comments>
		<pubDate>Fri, 09 Apr 2010 09:42:15 +0000</pubDate>
		<dc:creator>werisa</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://werisa.com/?p=92</guid>
		<description><![CDATA[1. 为何要屏蔽盗链？
Apache 中的 .htaccess 文件(也叫”分布式配置文件”)是 Apache 中相当重要的配置文件，其格式为纯文本，它提供了针对目录改变配置的方法，通过在一个特定的文档目录中放置一个包含一个或多个指令的文件，以作用于此目录及其所有子目录。
通过.htaccess文件，可以实现简单地很多在IIS中很繁琐甚至无法实现的功能，如密码保护、禁止显示目录列表、阻止/允许特定的IP地址、实现网址的301 重定向等。
正如上面所说，.htaccess文件将影响其所在的目录及其子目录，因此，如果我们要保护的内容位于网站内多个目录下，可以考虑将其放在根目录下；而如果图片有单独的子目录如“/images/”，则只需将其放置在该目录下。
通过.htaccess来防止网站的图片、压缩文件、或视频等非Html文件被盗链的方法相当简单，通过在.htaccess文件中加入几句命令即 可保护我们宝贵的带宽。经过我的多次尝试，发现网上的教程大多有问题，而标准的用法介绍也是有些支支吾吾，这里总结下我的心得。
需要实现的目的：
对于本站及本站三级乃至多级域名都使用资源完全没有问题。
对于其他网站调用本站图片等资源，予以屏蔽。
屏蔽时给予返回图片或者转接。
有可能有一些资源就是需要外链的，需要允许。
直接访问资源是可以得到的，这一点主要是为了诸如插件调试、远程文件直接获取等其他获得资源方式的顺畅。
2. 防盗链代码
给出一个设计好的完整代码，向根目录下的 .htaccess 文件中写入（若没有，需新建）：
函数超链接开启 [复制到剪贴板] 查看代码 TEXT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16&#60;IfModule mod_rewrite.c&#62;
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_URI} !^/t/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http.*://heymu.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http.*://(.)+.heymu.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !thuirsa.org [NC]
RewriteCond %{HTTP_REFERER} !ikuaizi.com [NC]
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !xianguo.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]
RewriteCond %{HTTP_REFERER} !feedburner.com [NC]
RewriteCond %{HTTP_REFERER} !feedsky.com [NC]
RewriteRule .*.(jpg&#124;gif&#124;png&#124;bmp)$ t/warning.gif [L,NC]
&#60;/IfModule&#62;
说明一：需要Apache开启mod_rewrite模块，如果是虚拟主机，可以通过探针之类生成的phpinfo()查看是否已开启。
说明二：WordPress有可能自动生成了具有Rewrite的代码的.htaccess文件代码，则建议紧接 [...]]]></description>
			<content:encoded><![CDATA[<p>1. 为何要屏蔽盗链？<br />
Apache 中的 .htaccess 文件(也叫”分布式配置文件”)是 Apache 中相当重要的配置文件，其格式为纯文本，它提供了针对目录改变配置的方法，通过在一个特定的文档目录中放置一个包含一个或多个指令的文件，以作用于此目录及其所有子目录。<br />
通过.htaccess文件，可以实现简单地很多在IIS中很繁琐甚至无法实现的功能，如密码保护、禁止显示目录列表、阻止/允许特定的IP地址、实现网址的301 重定向等。<br />
正如上面所说，.htaccess文件将影响其所在的目录及其子目录，因此，如果我们要保护的内容位于网站内多个目录下，可以考虑将其放在根目录下；而如果图片有单独的子目录如“/images/”，则只需将其放置在该目录下。<br />
通过.htaccess来防止网站的图片、压缩文件、或视频等非Html文件被盗链的方法相当简单，通过在.htaccess文件中加入几句命令即 可保护我们宝贵的带宽。经过我的多次尝试，发现网上的教程大多有问题，而标准的用法介绍也是有些支支吾吾，这里总结下我的心得。<br />
需要实现的目的：<br />
对于本站及本站三级乃至多级域名都使用资源完全没有问题。<br />
对于其他网站调用本站图片等资源，予以屏蔽。<br />
屏蔽时给予返回图片或者转接。<br />
有可能有一些资源就是需要外链的，需要允许。<br />
直接访问资源是可以得到的，这一点主要是为了诸如插件调试、远程文件直接获取等其他获得资源方式的顺畅。<br />
2. 防盗链代码<br />
给出一个设计好的完整代码，向根目录下的 .htaccess 文件中写入（若没有，需新建）：<br />
函数超链接开启 [复制到剪贴板] 查看代码 TEXT<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10<br />
11<br />
12<br />
13<br />
14<br />
15<br />
16&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine On<br />
RewriteCond %{HTTP_REFERER} !^$<br />
RewriteCond %{REQUEST_URI} !^/t/.*$ [NC]<br />
RewriteCond %{HTTP_REFERER} !^http.*://heymu.com/.*$ [NC]<br />
RewriteCond %{HTTP_REFERER} !^http.*://(.)+.heymu.com/.*$ [NC]<br />
RewriteCond %{HTTP_REFERER} !thuirsa.org [NC]<br />
RewriteCond %{HTTP_REFERER} !ikuaizi.com [NC]<br />
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]<br />
RewriteCond %{HTTP_REFERER} !xianguo.com [NC]<br />
RewriteCond %{HTTP_REFERER} !google.com [NC]<br />
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]<br />
RewriteCond %{HTTP_REFERER} !feedburner.com [NC]<br />
RewriteCond %{HTTP_REFERER} !feedsky.com [NC]<br />
RewriteRule .*.(jpg|gif|png|bmp)$ t/warning.gif [L,NC]<br />
&lt;/IfModule&gt;</p>
<p>说明一：需要Apache开启mod_rewrite模块，如果是虚拟主机，可以通过探针之类生成的phpinfo()查看是否已开启。<br />
说明二：WordPress有可能自动生成了具有Rewrite的代码的.htaccess文件代码，则建议紧接 RewriteEngine On 一句之后加上上面代码中的 RewriteCond 与 RewriteRule 等几行代码。<br />
3. 防盗链代码分析与解释</p>
<p>函数超链接开启 [复制到剪贴板] 查看代码 TEXT<br />
1<br />
2&lt;IfModule mod_rewrite.c&gt;<br />
&lt;/IfModule&gt;</p>
<p>最外面的这一层是为了检验是否mod_rewrite打开了，如果没有打开就不会执行以下的代码。如果缺失本段代码，而恰恰Apache又没有安装此模块，则将会出现致命错误。本段代码在WordPress自生成的文件中已有。<br />
函数超链接开启 [复制到剪贴板] 查看代码 TEXT<br />
1RewriteEngine On</p>
<p>开启Rewrite功能，注意不要多次使用。本段代码在WordPress自生成的文件中已有。<br />
函数超链接开启 [复制到剪贴板] 查看代码 TEXT<br />
1RewriteCond %{HTTP_REFERER} !^$</p>
<p>这里是验证请求来源HTTP_REFERER，后面使用正则表达式来检测，本条将允许资源直接访问。<br />
函数超链接开启 [复制到剪贴板] 查看代码 TEXT<br />
1RewriteCond %{REQUEST_URI} !^/t/.*$ [NC]</p>
<p>这里是验证请求内容位置REQUEST_URI，本条允许访问/t/目录下的文件，你可以改成你喜欢的目录，用以外链。[NC]是表示大小写不分。<br />
函数超链接开启 [复制到剪贴板] 查看代码 TEXT<br />
1<br />
2RewriteCond %{HTTP_REFERER} !^http.*://heymu.com/.*$ [NC]<br />
RewriteCond %{HTTP_REFERER} !^http.*://(.)+.heymu.com/.*$ [NC]</p>
<p>这两句允许域名下或者域名子域名下的访问，同时包括http和https。<br />
函数超链接开启 [复制到剪贴板] 查看代码 TEXT<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8RewriteCond %{HTTP_REFERER} !thuirsa.org [NC]<br />
RewriteCond %{HTTP_REFERER} !ikuaizi.com [NC]<br />
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]<br />
RewriteCond %{HTTP_REFERER} !xianguo.com [NC]<br />
RewriteCond %{HTTP_REFERER} !google.com [NC]<br />
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]<br />
RewriteCond %{HTTP_REFERER} !feedburner.com [NC]<br />
RewriteCond %{HTTP_REFERER} !feedsky.com [NC]</p>
<p>这里是针对需要开启的网站允许外链，比如自己的其他网站、google图片搜索、RSS订阅等……当然，也可以选择不允许。<br />
函数超链接开启 [复制到剪贴板] 查看代码 TEXT<br />
1RewriteRule .*.(jpg|gif|png|bmp|css|js|swf)$ t/warning.gif [L,NC]</p>
<p>这里比较关键了，是选择需要防盗链的资源格式，然后选择转为某个地址，可以转为图片，也可以转为网站等，我这里就是转为t目录下的warning.gif文件。</p>
<p>这里比较让我疑惑的地方就是关于后面操作选择，R表示转接，L表示终止匹配、结束返回，NC仍然还是不区分大小写的意思。网上很多资料都是用R，但 是这里可能存在的一个问题就是R之后转接到的地址仍然会被这整个代码再次截获，从而一直不断请求，什么都显示不出。我的测试还是直接写[L,NC]为好， 即使转接后的地址仍然属于防盗链范围仍然可以正常运行（貌似此时这里的转接后地址需要写为相对地址，未完全测试）。而更稳妥的方法还是上面所写的，把t目 录索性就作为专门对外链接的目录。<br />
4. 效果测试<br />
这里需要一个综合测试，因为避免可能存在的错误，尤其是导致自己也无法正常使用资源。<br />
测试一：自己的主网站及其子目录，包括HTTPS方式，显示图片没有问题。<br />
测试二：主站三级域名下无问题。<br />
测试三：授权的网站是否能够正常显示。<br />
测试四：未授权的网站能够正常显示t目录下图片，正常显示其他目录下盗链后的警告图片。<br />
测试五：直接访问图片能正常显示。<br />
Apache防盗链测试OK！大功告成！<br />
PS：实验期间遇到一些问题，很多时候都不出效果，其中最后发现的一个bug是，上传.htaccess文件的时候曾经上传错了，将某个版本的文件上传到了image目录下，从而导致了无论外面怎么改，image目录下将同时遵守它“自己的规则”……<br />
From &#8211; <a href="http://tuibian.com/?p=869">http://tuibian.com/?p=869</a></p>
]]></content:encoded>
			<wfw:commentRss>http://werisa.com/?feed=rss2&amp;p=92</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>区别不同浏览器，CSS hack写法：</title>
		<link>http://werisa.com/?p=90</link>
		<comments>http://werisa.com/?p=90#comments</comments>
		<pubDate>Mon, 28 Dec 2009 13:38:04 +0000</pubDate>
		<dc:creator>werisa</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://werisa.com/?p=90</guid>
		<description><![CDATA[转自我们学习网


区别IE6、IE7与IE8、FF：       background:orange;*background:blue;



区别IE6与IE7：       background:green !important;background:blue;



区别IE7与IE8、FF：       background:orange; *background:green;



区别IE8、FF，IE7，IE6：       background:orange;*background:green !important;*background:blue;



注：IE都能识别*;标准浏览器(如FF)不能识别*；IE6能识别*，但不能识别 !important,IE7能识别*，也能识别!important;IE8,FF不能识别*，但能识别!important;




 IE6 IE7 FF、IE8 
* √ √ × 
!important × √ √ 






--------------------------------------------------------------------------------

另外再补充一个，下划线"_",
IE6支持下划线，IE7和firefox均不支持下划线。

于是大家还可以这样来区分IE6，IE7，firefox、IE8
: background:orange;*background:green;_background:blue; 

注：不管是什么方法，书写的顺序都是firefox、IE8的写在前面，IE7的写在中间，IE6的写在最后面。

转自我们学习网
]]></description>
			<content:encoded><![CDATA[<p style="margin: 3px">转自<a href="http://www.wearelearn.net/" target="_blank">我们学习网</a></p>
<div>区别<span>IE6、<span>IE7</span></span>与<span>IE8、<span>FF</span></span>：</div>
<div>       background:<span>orange</span>;<span>*</span>background:<span>blue</span>;</div>
<p style="margin: 3px"> </p>
<div>区别<span>IE6</span>与<span>IE7</span>：</div>
<div>       background:<span>green</span> <span>!important</span>;background:<span>blue</span>;</div>
<p style="margin: 3px"> </p>
<div>区别<span>IE7</span>与<span>IE8、<span>FF</span></span>：</div>
<div>       background:<span>orange</span>; <span>*</span>background:<span>green</span>;</div>
<p style="margin: 3px"> </p>
<div>区别IE8、<span>FF</span>，<span>IE7</span>，<span>IE6</span>：</div>
<div>       background:<span>orange</span>;<span>*</span>background:<span>green</span> <span>!important</span>;*background:<span>blue</span>;</div>
<p style="margin: 3px"> </p>
<div>注：IE都能识别*;标准浏览器(如FF)不能识别*；</div>
<div>IE6能识别*，但不能识别 !important,</div>
<div>IE7能识别*，也能识别!important;</div>
<div>IE8,FF不能识别*，但能识别!important;</div>
<p style="margin: 3px"> </p>
<table style="background-color: #000000" border="0" cellspacing="1" cellpadding="0">
<tbody>
<tr>
<td style="width: 120px;background-color: #ffffff;text-align: center"></td>
<td style="width: 120px;background-color: #ffffff;text-align: center">IE6</td>
<td style="width: 120px;background-color: #ffffff;text-align: center">IE7</td>
<td style="width: 120px;background-color: #ffffff;text-align: center">FF、IE8</td>
</tr>
<tr>
<td style="width: 120px;background-color: #ffffff;text-align: center">*</td>
<td style="width: 120px;background-color: #ffffff;text-align: center">√</td>
<td style="width: 120px;background-color: #ffffff;text-align: center">√</td>
<td style="width: 120px;background-color: #ffffff;text-align: center">×</td>
</tr>
<tr>
<td style="width: 120px;background-color: #ffffff;text-align: center">!important</td>
<td style="width: 120px;background-color: #ffffff;text-align: center">×</td>
<td style="width: 120px;background-color: #ffffff;text-align: center">√</td>
<td style="width: 120px;background-color: #ffffff;text-align: center">√</td>
</tr>
</tbody>
</table>
<p style="margin: 3px">
<hr />
<p style="margin: 3px">另外再补充一个，下划线&#8221;<span>_</span>&#8220;,<br />
IE6支持下划线，IE7和firefox均不支持下划线。</p>
<p>于是大家还可以这样来区分<span>IE6</span>，<span>IE7</span>，<span>firefox、IE8</span><br />
: background:<span>orange</span>;<span>*</span>background:<span>green</span>;<span>_</span>background:<span>blue</span>; </p>
<p>注：不管是什么方法，书写的顺序都是firefox、<span>IE8</span>的写在前面，IE7的写在中间，IE6的写在最后面。</p>
<p style="margin: 3px">转自<a href="http://www.wearelearn.net/" target="_blank">我们学习网</a></p>
]]></content:encoded>
			<wfw:commentRss>http://werisa.com/?feed=rss2&amp;p=90</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何让window.close()不提示</title>
		<link>http://werisa.com/?p=88</link>
		<comments>http://werisa.com/?p=88#comments</comments>
		<pubDate>Tue, 22 Dec 2009 08:23:55 +0000</pubDate>
		<dc:creator>werisa</dc:creator>
				<category><![CDATA[其他]]></category>

		<guid isPermaLink="false">http://werisa.com/?p=88</guid>
		<description><![CDATA[function Close() 
{ 
var ua=navigator.userAgent 
var ie=navigator.appName=="Microsoft Internet Explorer"?true:false 
if(ie) 
{ 
   var IEversion=parseFloat(ua.substring(ua.indexOf("MSIE ")+5,ua.indexOf(";",ua.indexOf("MSIE ")))) 
   if(IEversion&#60; 5.5) 
   { 
   var str = &#039;' 
     str += ''; 
     document.body.insertAdjacentHTML("beforeEnd", str); 
     document.all.noTipClose.Click(); 
   } 
    else 
   { 
     window.opener =null;
     window.open('','_self','');//for IE7
     window.close(); 
   } 
} 
else 
{ 
window.close() 
} 
} 
]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000080">function Close()<br />
{<br />
var ua=navigator.userAgent<br />
var ie=navigator.appName==&#8221;Microsoft Internet Explorer&#8221;?true:false<br />
if(ie)<br />
{<br />
   var IEversion=parseFloat(ua.substring(ua.indexOf(&#8220;MSIE &#8220;)+5,ua.indexOf(&#8220;;&#8221;,ua.indexOf(&#8220;MSIE &#8220;))))<br />
   if(IEversion&lt; 5.5)<br />
   {<br />
   var str = &#8216;&lt;object id=noTipClose classid=&#8221;clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11&#8243;&gt;&#8217;<br />
     str += &#8216;&lt;param name=&#8221;Command&#8221; value=&#8221;Close&#8221;&gt;&lt;/object&gt;&#8217;;<br />
     document.body.insertAdjacentHTML(&#8220;beforeEnd&#8221;, str);<br />
     document.all.noTipClose.Click();<br />
   }<br />
    else<br />
   {<br />
     window.opener =null;<br />
     window.open(&#8221;,&#8217;_self&#8217;,&#8221;);//for IE7<br />
     window.close();<br />
   }<br />
}<br />
else<br />
{<br />
window.close()<br />
}<br />
}<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://werisa.com/?feed=rss2&amp;p=88</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AS调用JS函数</title>
		<link>http://werisa.com/?p=84</link>
		<comments>http://werisa.com/?p=84#comments</comments>
		<pubDate>Mon, 14 Dec 2009 01:19:21 +0000</pubDate>
		<dc:creator>werisa</dc:creator>
				<category><![CDATA[其他]]></category>

		<guid isPermaLink="false">http://werisa.com/?p=84</guid>
		<description><![CDATA[import flash.external.*;
try {
//AS调用JS的alert函数
ExternalInterface.call("ControlAD");
}
catch (error) {
errorHandle(error);
}]]></description>
			<content:encoded><![CDATA[<p>import flash.external.*;<br />
try {<br />
//AS调用JS的alert函数<br />
ExternalInterface.call(&#8220;ControlAD&#8221;);<br />
}<br />
catch (error) {<br />
errorHandle(error);<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://werisa.com/?feed=rss2&amp;p=84</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PhotoShopCS实现文字做旧效果(仿扫描仪)</title>
		<link>http://werisa.com/?p=83</link>
		<comments>http://werisa.com/?p=83#comments</comments>
		<pubDate>Sat, 07 Nov 2009 00:53:40 +0000</pubDate>
		<dc:creator>werisa</dc:creator>
				<category><![CDATA[其他]]></category>

		<guid isPermaLink="false">http://www.werisa.com/articles/80</guid>
		<description><![CDATA[经过了大约2个小时的各种尝试，记录一下大概步骤：
步骤如下：
　１）敲上你想要的文字。注意，不要在字体面板中选择任何消除字体的效果，默认为&#8220;无&#8221;。
　２）删格化图层。并把图层改名为L1。
　３）Ctrl+J复制一个新图层，起名为L2。
　４）选择L2图层，滤镜-&#62;风格化-&#62;扩散，选择&#8220;变亮优先&#8221;，确定。
　５）滤镜-&#62;模糊-&#62;高斯模糊，半径设为0.3，确定。
　６）将当前层不透明度设为60%。
　７）选择L1图层，滤镜-&#62;风格化-&#62;扩散，选择&#8220;变暗优先&#8221;，确定。
　８）将当前层不透明度设为60%。
　９）将两个图层合并。
　１０）再次选择滤镜-&#62;风格化-&#62;扩散，选择&#8220;变暗优先&#8221;，确定。
　１１）然后，滤镜-&#62;模糊-&#62;模糊。
　１２）酌情调整色相/饱和度，完成。]]></description>
			<content:encoded><![CDATA[<p>经过了大约2个小时的各种尝试，记录一下大概步骤：</p>
<p>步骤如下：<br />
　１）敲上你想要的文字。注意，不要在字体面板中选择任何消除字体的效果，默认为&ldquo;无&rdquo;。<br />
　２）删格化图层。并把图层改名为L1。<br />
　３）Ctrl+J复制一个新图层，起名为L2。<br />
　４）选择L2图层，滤镜-&gt;风格化-&gt;扩散，选择&ldquo;变亮优先&rdquo;，确定。<br />
　５）滤镜-&gt;模糊-&gt;高斯模糊，半径设为0.3，确定。<br />
　６）将当前层不透明度设为60%。<br />
　７）选择L1图层，滤镜-&gt;风格化-&gt;扩散，选择&ldquo;变暗优先&rdquo;，确定。<br />
　８）将当前层不透明度设为60%。<br />
　９）将两个图层合并。<br />
　１０）再次选择滤镜-&gt;风格化-&gt;扩散，选择&ldquo;变暗优先&rdquo;，确定。<br />
　１１）然后，滤镜-&gt;模糊-&gt;模糊。<br />
　１２）酌情调整色相/饱和度，完成。</p>
]]></content:encoded>
			<wfw:commentRss>http://werisa.com/?feed=rss2&amp;p=83</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache+PHP+MySQL在Windows XP下的安装与配置</title>
		<link>http://werisa.com/?p=82</link>
		<comments>http://werisa.com/?p=82#comments</comments>
		<pubDate>Thu, 15 Oct 2009 13:43:43 +0000</pubDate>
		<dc:creator>werisa</dc:creator>
				<category><![CDATA[其他]]></category>

		<guid isPermaLink="false">http://www.werisa.com/articles/79</guid>
		<description><![CDATA[网上有很多类似的文章，要么过时了，要么不全面，新手看了很难懂，而且不明白其中的道理。因为我也是刚接触不久，深有体会，所以写下了这篇文章，希望对新手有所帮助。
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝相关信息＝＝＝＝＝＝＝＝＝＝＝＝＝
&#160;&#160;&#160;&#160;&#160; 操作系统：Windows XP SP2
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IIS：未安装
Apache版本：2.2.8&#160;&#160;&#160; 下载 (安装在C:\Program Files\Apache Software Foundation\Apache2.2)
&#160;&#160;&#160;&#160; PHP版本：5.2.5&#160;&#160;&#160; 下载 (安装在C:\php)
MySQL版本：5.0.51a下载 (安装在C:\Program Files\MySQL\MySQL Server 5.0)
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
软件的安装很简单，按提示一步一步操作，一般不会出什么问题，这里略过，主要讲一下如何配置。软件安装成功后，在IE地址栏中输入http://localhost测试应该会看到&#8220;It works!&#8221;，说明Apache安装是成功的。你应该根据你的安装路径做相应的修改。
(1)httpd.conf配置
打开httpd.conf，找到#LoadModule vhost_alias_module modules/mod_vhost_alias.so，在它的后面添加以下内容：
LoadModule php5_module &#34;C:/php/php5apache2_2.dll&#34;
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
PHPIniDir &#34;C:/php&#34;
找到DocumentRoot &#34;C:/Program Files/Apache Software Foundation/Apache2.2/htdocs&#34;，修改成Web文件的存放路径，如我的Web文件存放在F:/WebRoot目录下，就修改成：
DocumentRoot &#34;F:/WebRoot&#34;
找到&#60;Directory &#34;C:/Program Files/Apache Software Foundation/Apache2.2/htdocs&#34;&#62;，修改成Web文件的存放路径，跟上面的路径相同，修改成：
&#60;Directory &#34;F:/WebRoot&#34;&#62;
找到DirectoryIndex index.html，添加index.php：
DirectoryIndex index.html index.php
(2)php.ini配置
在PHP的安装目录下有php.ini-dist(默认配置)和php.ini-recommended(推荐配置)两个预置的配置文件，它们之间的区别是：推荐配置在安全性方面有所加强。根据需要选择，初始配置时最好选择php.ini-dist(因为它是默认的*^_^*)，复制并将其重命名为php.ini，就放在PHP的安装目录。(注意：php.ini-recommended中的short_open_tag是关闭的，这意味着标签&#60;? ?&#62;中的内容是不能被解析的，这种情况下查看PHP网页的源文件，看到的内容会跟你的源代码是一样的，正确的方法是使用&#60;?php ?&#62;，也推荐大家使用此标签。)
打开php.ini，找到extension_dir = &#34;./&#34;，修改成：
extension_dir = &#34;C:/php/ext&#34;
找到;extension=php_mysql.dll，把;去掉：
extension=php_mysql.dll
(3)libmysql.dll
将PHP目录下的libmysql.dll复制到%SystemRoot%/System32/目录中。用MySQL的bin目录中的libmysql.dll也行。
注意：
1.由于我安装的Apache版本是2.2.8，所以LoadModule语句应选择php5apache2_2.dll，否则会出现错误&#8220;The request operation has failed!&#8221;。网上很多相关文章中的Apache版本都2.0.XX的，他们选用的模块都是php5apache2.dll，不能够照搬，应该根据实际使用的Apache版本来选择该使用哪个dll文件。
2.PHPIniDir非常重要，其实PHPIniDir就是设置&#8220;php.ini&#8221;配置文件的路径，在httpd.conf中配置PHPIniDir，或者在注册表中设置，或者设置PHPRC环境变量，或者直接复制php.ini到%SystemRoot%目录中都是可行的。php.ini是按&#8220;httpd.conf中PHPIniDir指定的路径－＞HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath(Windows注册表位置)－＞PHPRC环境变量－＞当前工作目录(对于CLI)－＞%SystemRoot%目录&#8221;的顺序来搜索的。一个好的办法是用phpinfo()来检查php.ini文件的路径是否配置正确，看&#8220;Configuration File (php.ini) Path&#8221;和&#8220;Loaded Configuration File &#8221;。如果配置不正确或没有配置&#8220;Loaded Configuration File&#8221;将显示&#8220;none&#8221; ，如果没有配置PHPIniDir，则按默认的设置加载。
3.有些文章中说配置中牵涉到路径时该用&#8220;/&#8221;或&#8220;\&#8221;的问题，我测试好象并无问题，正反斜杠都没问题，不知道在低版本或Linux中是否也一样。
4.不要忘了配置php.ini文件中的extension_dir和去掉;extension=php_mysql.dll前面的分号。
5.错误&#8220;Fatal error: Call to undefined function mysql_connect() in XX on line YY&#8221;的大概意思是&#8220;致命错误：在XX文件YY行调用了未定义的函数mysql_connect()&#8221;，很显然是没有加载libmysql.dll引起的，跟php.ini文件的配置密切相关的，如果找不到libmysql.dll也会导致此错误(换句话说，就是libmysql.dll放的位置有问题。看(3)中说明)。
6.以上仅是个人之见，要想获得更多的信息，请访问他们的官方网站。
附：
Apache官网：http://www.apache.org/
&#160;&#160;&#160;&#160; PHP官网：http://www.php.net/
MySQL官网：http://www.mysql.com/]]></description>
			<content:encoded><![CDATA[<p>网上有很多类似的文章，要么过时了，要么不全面，新手看了很难懂，而且不明白其中的道理。因为我也是刚接触不久，深有体会，所以写下了这篇文章，希望对新手有所帮助。<br />
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝相关信息＝＝＝＝＝＝＝＝＝＝＝＝＝<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 操作系统：Windows XP SP2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IIS：未安装<br />
Apache版本：2.2.8&nbsp;&nbsp;&nbsp; 下载 (安装在C:\Program Files\Apache Software Foundation\Apache2.2)<br />
&nbsp;&nbsp;&nbsp;&nbsp; PHP版本：5.2.5&nbsp;&nbsp;&nbsp; 下载 (安装在C:\php)<br />
MySQL版本：5.0.51a下载 (安装在C:\Program Files\MySQL\MySQL Server 5.0)<br />
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝</p>
<p>软件的安装很简单，按提示一步一步操作，一般不会出什么问题，这里略过，主要讲一下如何配置。软件安装成功后，在IE地址栏中输入<a href="http://localhost">http://localhost</a>测试应该会看到&ldquo;It works!&rdquo;，说明Apache安装是成功的。你应该根据你的安装路径做相应的修改。</p>
<p>(1)httpd.conf配置<br />
打开httpd.conf，找到#LoadModule vhost_alias_module modules/mod_vhost_alias.so，在它的后面添加以下内容：<br />
LoadModule php5_module &quot;C:/php/php5apache2_2.dll&quot;<br />
AddType application/x-httpd-php .php<br />
AddType application/x-httpd-php-source .phps<br />
PHPIniDir &quot;C:/php&quot;</p>
<p>找到DocumentRoot &quot;C:/Program Files/Apache Software Foundation/Apache2.2/htdocs&quot;，修改成Web文件的存放路径，如我的Web文件存放在F:/WebRoot目录下，就修改成：<br />
DocumentRoot &quot;F:/WebRoot&quot;</p>
<p>找到&lt;Directory &quot;C:/Program Files/Apache Software Foundation/Apache2.2/htdocs&quot;&gt;，修改成Web文件的存放路径，跟上面的路径相同，修改成：<br />
&lt;Directory &quot;F:/WebRoot&quot;&gt;</p>
<p>找到DirectoryIndex index.html，添加index.php：<br />
DirectoryIndex index.html index.php</p>
<p>(2)php.ini配置<br />
在PHP的安装目录下有php.ini-dist(默认配置)和php.ini-recommended(推荐配置)两个预置的配置文件，它们之间的区别是：推荐配置在安全性方面有所加强。根据需要选择，初始配置时最好选择php.ini-dist(因为它是默认的*^_^*)，复制并将其重命名为php.ini，就放在PHP的安装目录。(注意：php.ini-recommended中的short_open_tag是关闭的，这意味着标签&lt;? ?&gt;中的内容是不能被解析的，这种情况下查看PHP网页的源文件，看到的内容会跟你的源代码是一样的，正确的方法是使用&lt;?php ?&gt;，也推荐大家使用此标签。)</p>
<p>打开php.ini，找到extension_dir = &quot;./&quot;，修改成：<br />
extension_dir = &quot;C:/php/ext&quot;</p>
<p>找到;extension=php_mysql.dll，把;去掉：<br />
extension=php_mysql.dll</p>
<p>(3)libmysql.dll<br />
将PHP目录下的libmysql.dll复制到%SystemRoot%/System32/目录中。用MySQL的bin目录中的libmysql.dll也行。</p>
<p>注意：<br />
1.由于我安装的Apache版本是2.2.8，所以LoadModule语句应选择php5apache2_2.dll，否则会出现错误&ldquo;The request operation has failed!&rdquo;。网上很多相关文章中的Apache版本都2.0.XX的，他们选用的模块都是php5apache2.dll，不能够照搬，应该根据实际使用的Apache版本来选择该使用哪个dll文件。</p>
<p>2.PHPIniDir非常重要，其实PHPIniDir就是设置&ldquo;php.ini&rdquo;配置文件的路径，在httpd.conf中配置PHPIniDir，或者在注册表中设置，或者设置PHPRC环境变量，或者直接复制php.ini到%SystemRoot%目录中都是可行的。php.ini是按&ldquo;httpd.conf中PHPIniDir指定的路径－＞HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath(Windows注册表位置)－＞PHPRC环境变量－＞当前工作目录(对于CLI)－＞%SystemRoot%目录&rdquo;的顺序来搜索的。一个好的办法是用phpinfo()来检查php.ini文件的路径是否配置正确，看&ldquo;Configuration File (php.ini) Path&rdquo;和&ldquo;Loaded Configuration File &rdquo;。如果配置不正确或没有配置&ldquo;Loaded Configuration File&rdquo;将显示&ldquo;none&rdquo; ，如果没有配置PHPIniDir，则按默认的设置加载。</p>
<p>3.有些文章中说配置中牵涉到路径时该用&ldquo;/&rdquo;或&ldquo;\&rdquo;的问题，我测试好象并无问题，正反斜杠都没问题，不知道在低版本或Linux中是否也一样。</p>
<p>4.不要忘了配置php.ini文件中的extension_dir和去掉;extension=php_mysql.dll前面的分号。</p>
<p>5.错误&ldquo;Fatal error: Call to undefined function mysql_connect() in XX on line YY&rdquo;的大概意思是&ldquo;致命错误：在XX文件YY行调用了未定义的函数mysql_connect()&rdquo;，很显然是没有加载libmysql.dll引起的，跟php.ini文件的配置密切相关的，如果找不到libmysql.dll也会导致此错误(换句话说，就是libmysql.dll放的位置有问题。看(3)中说明)。</p>
<p>6.以上仅是个人之见，要想获得更多的信息，请访问他们的官方网站。</p>
<p>附：<br />
Apache官网：<a href="http://www.apache.org/">http://www.apache.org/</a><br />
&nbsp;&nbsp;&nbsp;&nbsp; PHP官网：<a href="http://www.php.net/">http://www.php.net/</a><br />
MySQL官网：<a href="http://www.mysql.com/">http://www.mysql.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://werisa.com/?feed=rss2&amp;p=82</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>li自动换行</title>
		<link>http://werisa.com/?p=81</link>
		<comments>http://werisa.com/?p=81#comments</comments>
		<pubDate>Wed, 14 Oct 2009 23:42:48 +0000</pubDate>
		<dc:creator>werisa</dc:creator>
				<category><![CDATA[其他]]></category>

		<guid isPermaLink="false">http://www.werisa.com/articles/78</guid>
		<description><![CDATA[li样式的关键样式设置：
记录下来，省得每次都忘记。
white-space:nowrap;]]></description>
			<content:encoded><![CDATA[<p>li样式的关键样式设置：</p>
<p>记录下来，省得每次都忘记。</p>
<p>white-space:nowrap;</p>
]]></content:encoded>
			<wfw:commentRss>http://werisa.com/?feed=rss2&amp;p=81</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>存储过程与注入</title>
		<link>http://werisa.com/?p=80</link>
		<comments>http://werisa.com/?p=80#comments</comments>
		<pubDate>Mon, 13 Jul 2009 13:21:55 +0000</pubDate>
		<dc:creator>werisa</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[注入]]></category>

		<guid isPermaLink="false">http://www.werisa.com/articles/77</guid>
		<description><![CDATA[动态构建sql,不可sql注入
CREATE PROCEDURE [dbo].[MemberTestSelect2]
(
&#160;@UserName nvarchar(50),
&#160;@Password nvarchar(50)
)
AS
BEGIN
&#160;SET NOCOUNT ON
&#160;DECLARE @Err int
DECLARE @sqlString nvarchar(1000)
SELECT @sqlString ='SELECT * FROM [MemberTest] WHERE [UserName] = @UserName AND [Password]= @Password'
SELECT @sqlString
Exec sp_executesql @sqlString, N'@UserName nvarchar(50),@Password nvarchar(50)',@UserName, @Password
&#160;
&#160;SET @Err = @@Error
&#160;RETURN @Err
END
GO
===========================
动态构建sql,可sql注入
CREATE PROCEDURE [dbo].[MemberTestSelect2]
(
&#160;@UserName nvarchar(50),
&#160;@Password nvarchar(50)
)
AS
BEGIN
&#160;SET NOCOUNT ON
&#160;DECLARE @Err int
DECLARE @sqlString nvarchar(1000)
SELECT @sqlString ='SELECT * FROM [MemberTest] WHERE [UserName] = '''+@UserName+''' AND [Password]= '''+@Password+''''
SELECT @sqlString
Exec (@sqlString)
&#160;
&#160;SET @Err = @@Error
&#160;RETURN @Err
END
GO
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
不可入侵，原因，字符类型长度50, 非动态构建，不可再在里面写入or,exe等语句，即无注入点
CREATE PROCEDURE [dbo].[MemberTestSelect]
(
&#160;@UserName nvarchar(50),
&#160;@Password nvarchar(50)
)
AS
BEGIN
&#160;SET NOCOUNT ON
&#160;DECLARE @Err int
&#160;SELECT *
&#160;FROM [MemberTest]
&#160;WHERE
&#160; ([UserName] = @UserName AND
&#160;&#160; [Password]= @Password)
&#160;
&#160;SET @Err = @@Error
&#160;RETURN @Err
END
GO
========================
SELECT * FROM MemberTest
SELECT * FROM MemberTest WHERE UserName='1' AND Password='1' OR 1=1

SELECT * FROM MemberTest WHERE UserName='1' AND Password='1' OR 1=1--'

Exec MemberTestSelect '1', '1'-- OR 1=1'
Exec MemberTestSelect2 @UserName='1', @Password='1'' OR 1=1--'
======================================
存储过程可以防注入，这是不正确的
&#160;&#160;&#160;
&#160; 什么是注入?&#160;&#160;
&#160; select&#160;&#160; *&#160;&#160; from&#160;&#160; table&#160;
不能根据参数不同而动态生成不同的sql语句, 这个语句无论在哪儿都不能注入, 因为没有注入口&#160;&#160;
&#160; select&#160;&#160; *&#160;&#160; from&#160;&#160; table&#160;&#160; where&#160;&#160; id='传进来的变量'&#160;&#160;
&#160; 这就叫有注入口 ,&#160; 所有无论用sql语句还是sp都一样
存储过程也可注入, 只要是动态生成的，有注入口，（如2例）
但是一般存储过程的参数时，有长度，类型限止的，且一般都不是动态生成的
&#160;
本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/cxzhq2002/archive/2008/02/04/2082182.aspx]]></description>
			<content:encoded><![CDATA[<p>动态构建sql,不可sql注入</p>
<p>CREATE PROCEDURE [dbo].[MemberTestSelect2]<br />
(<br />
&nbsp;@UserName nvarchar(50),<br />
&nbsp;@Password nvarchar(50)<br />
)<br />
AS<br />
BEGIN<br />
&nbsp;SET NOCOUNT ON<br />
&nbsp;DECLARE @Err int</p>
<p>DECLARE @sqlString nvarchar(1000)<br />
SELECT @sqlString =&#8217;SELECT * FROM [MemberTest] WHERE [UserName] = @UserName AND [Password]= @Password&#8217;<br />
SELECT @sqlString<br />
Exec sp_executesql @sqlString, <a href="mailto:N'@UserName">N&#8217;@UserName</a> nvarchar(50),@Password nvarchar(50)&#8217;,@UserName, @Password<br />
&nbsp; <br />
&nbsp;SET @Err = @@Error</p>
<p>&nbsp;RETURN @Err<br />
END</p>
<p>GO</p>
<p>===========================</p>
<p>动态构建sql,可sql注入</p>
<p>CREATE PROCEDURE [dbo].[MemberTestSelect2]<br />
(<br />
&nbsp;@UserName nvarchar(50),<br />
&nbsp;@Password nvarchar(50)<br />
)<br />
AS<br />
BEGIN<br />
&nbsp;SET NOCOUNT ON<br />
&nbsp;DECLARE @Err int</p>
<p>DECLARE @sqlString nvarchar(1000)<br />
SELECT @sqlString =&#8217;SELECT * FROM [MemberTest] WHERE [UserName] = <a href="mailto:'''+@UserName+'''">&#8221;&#8217;+@UserName+&#8221;&#8217;</a> AND [Password]= <a href="mailto:'''+@Password+''''">&#8221;&#8217;+@Password+&#8221;&#8221;</a><br />
SELECT @sqlString<br />
Exec (@sqlString)<br />
&nbsp; <br />
&nbsp;SET @Err = @@Error</p>
<p>&nbsp;RETURN @Err<br />
END</p>
<p>GO</p>
<p>＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝</p>
<p>不可入侵，原因，字符类型长度50, 非动态构建，不可再在里面写入or,exe等语句，即无注入点</p>
<p>CREATE PROCEDURE [dbo].[MemberTestSelect]<br />
(<br />
&nbsp;@UserName nvarchar(50),<br />
&nbsp;@Password nvarchar(50)<br />
)<br />
AS<br />
BEGIN<br />
&nbsp;SET NOCOUNT ON<br />
&nbsp;DECLARE @Err int</p>
<p>&nbsp;SELECT *<br />
&nbsp;FROM [MemberTest]<br />
&nbsp;WHERE<br />
&nbsp; ([UserName] = @UserName AND<br />
&nbsp;&nbsp; [Password]= @Password)<br />
&nbsp; <br />
&nbsp;SET @Err = @@Error</p>
<p>&nbsp;RETURN @Err<br />
END</p>
<p>GO</p>
<p>========================</p>
<p>SELECT * FROM MemberTest</p>
<p>SELECT * FROM MemberTest WHERE UserName=&#8217;1&#8242; AND Password=&#8217;1&#8242; OR 1=1</p>
<p>
SELECT * FROM MemberTest WHERE UserName=&#8217;1&#8242; AND Password=&#8217;1&#8242; OR 1=1&#8211;&#8217;</p>
<p>
Exec MemberTestSelect &#8216;1&#8242;, &#8216;1&#8242;&#8211; OR 1=1&#8242;</p>
<p>Exec MemberTestSelect2 @UserName=&#8217;1&#8242;, @Password=&#8217;1&#8221; OR 1=1&#8211;&#8217;</p>
<p>======================================</p>
<p>存储过程可以防注入，这是不正确的<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 什么是注入?&nbsp;&nbsp; <br />
&nbsp; select&nbsp;&nbsp; *&nbsp;&nbsp; from&nbsp;&nbsp; table&nbsp; <br />
不能根据参数不同而动态生成不同的sql语句, 这个语句无论在哪儿都不能注入, 因为没有注入口&nbsp;&nbsp; <br />
&nbsp; select&nbsp;&nbsp; *&nbsp;&nbsp; from&nbsp;&nbsp; table&nbsp;&nbsp; where&nbsp;&nbsp; id=&#8217;传进来的变量&#8217;&nbsp;&nbsp; <br />
&nbsp; 这就叫有注入口 ,&nbsp; 所有无论用sql语句还是sp都一样</p>
<p>存储过程也可注入, 只要是动态生成的，有注入口，（如2例）<br />
但是一般存储过程的参数时，有长度，类型限止的，且一般都不是动态生成的</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/cxzhq2002/archive/2008/02/04/2082182.aspx">http://blog.csdn.net/cxzhq2002/archive/2008/02/04/2082182.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://werisa.com/?feed=rss2&amp;p=80</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>禁用页面缓存的终极解决方法，适用于（IE/FireFox）</title>
		<link>http://werisa.com/?p=79</link>
		<comments>http://werisa.com/?p=79#comments</comments>
		<pubDate>Tue, 23 Jun 2009 10:03:56 +0000</pubDate>
		<dc:creator>werisa</dc:creator>
				<category><![CDATA[asp.net]]></category>
		<category><![CDATA[缓存]]></category>

		<guid isPermaLink="false">http://www.werisa.com/articles/76</guid>
		<description><![CDATA[&#160;在web开发中合理使用缓存可以有效的提高网站的性能，但是在某些场合下因为缓存的存在会带来很多的问题。例如：因为缓存的存在会造成重复提交数据的问题，验证码图片不能正确显示的问题，等等。这个时候我们就要禁用页面缓存的功能。
&#160;
&#160;&#160;&#160;&#160;&#160;我们常用的做法是发送一个&#8220;no-cache&#8221;的指令，但是实际使用过程中我们发现，这个指令对IE是有效的，但是对Firefox却没有效，这是因为，使用该指令Firefox不缓存HTTPS pages 但是还是会缓存HTTP pages ，这是Firefox的一个BUG，解决的办法很简单，就是使用no-store代替no-cache，同时发送no-store和no-cache指令
&#160;
&#160;&#160;&#160;&#160;&#160;ASP.net中的处理方法，在不需要缓存的页面中添加如下代码
&#160;&#160;&#160;&#160;&#160;Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
&#160;&#160;&#160;&#160;&#160;Response.Cache.SetNoStore();]]></description>
			<content:encoded><![CDATA[<p>&nbsp;在web开发中合理使用缓存可以有效的提高网站的性能，但是在某些场合下因为缓存的存在会带来很多的问题。例如：因为缓存的存在会造成重复提交数据的问题，验证码图片不能正确显示的问题，等等。这个时候我们就要禁用页面缓存的功能。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们常用的做法是发送一个&ldquo;no-cache&rdquo;的指令，但是实际使用过程中我们发现，这个指令对IE是有效的，但是对Firefox却没有效，这是因为，使用该指令Firefox不缓存HTTPS pages 但是还是会缓存HTTP pages ，这是Firefox的一个BUG，解决的办法很简单，就是使用no-store代替no-cache，同时发送no-store和no-cache指令</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASP.net中的处理方法，在不需要缓存的页面中添加如下代码</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Cache.SetNoStore();</p>
]]></content:encoded>
			<wfw:commentRss>http://werisa.com/?feed=rss2&amp;p=79</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何使IIS支持中文域名</title>
		<link>http://werisa.com/?p=78</link>
		<comments>http://werisa.com/?p=78#comments</comments>
		<pubDate>Mon, 22 Jun 2009 10:56:47 +0000</pubDate>
		<dc:creator>werisa</dc:creator>
				<category><![CDATA[其他]]></category>
		<category><![CDATA[中文域名]]></category>

		<guid isPermaLink="false">http://www.werisa.com/articles/75</guid>
		<description><![CDATA[如何使IIS支持中文域名首先了解一下，如何才能使IIS支持中文域名。

            因为经过 Nameprep处理过的国际化域名是以 Unicode 序列的形式表示的。但现有的 DNS系统只支持用 ASCII字符表示的域名，所以要对 Unicode 序列进行 ACE （ASCII-compatible encoding） 编码，把 Unicode序列表示的域名转换成 ASCII 字符串表示的ACE 域名。

            PunyCode是一种专为国际化域名而设计的高效ACE 编码方式。它可以在Unicode序列和ASCII 字符串之间进行唯一的和可逆的转换。转换的过程中，Unicode 序列中的ASCII字符保持不变，国际化字符则用字母和数字来表示。它的实质是一种用数量有限的基本字符（字母和数字）来唯一地表示大字符集（Unicode）中的字符的通用算法。域名中的字符，包括 ASCII 码和 Unicode 码，都是作为整数进行处理。

            也就是说，要让IIS支持中文域名，只需要在输入中文域名的地方，输入中文域名的PunyCode编码便可。当然，具体的转换计算过程并不需要自己去做，这里给大家介绍两种获得域名的PunyCode的方法。

            （1）如果域名是在ORAY注册的，那么登陆ORAY的控制台，进入域名管理，在域名状态里面会显示该中文域名的PunyCode。

            图1 在ORAY的控制台查看域名的PUNYCODE

            （2）使用CNNIC提供的中文域名在线转码程序。打开http://www.cnnic.net.cn/html/Dir/2003/10/29/1112.htm 后，输入要转换的中文域名，然后选择&#8220;转成punycode&#8221;，提交便可。]]></description>
			<content:encoded><![CDATA[<table>
<tbody>
<tr>
<td>
<div class="cnt" id="blog_text">如何使IIS支持中文域名首先了解一下，如何才能使IIS支持中文域名。</p>
<p>            因为经过 Nameprep处理过的国际化域名是以 Unicode 序列的形式表示的。但现有的 DNS系统只支持用 ASCII字符表示的域名，所以要对 Unicode 序列进行 ACE （ASCII-compatible encoding） 编码，把 Unicode序列表示的域名转换成 ASCII 字符串表示的ACE 域名。</p>
<p>            PunyCode是一种专为国际化域名而设计的高效ACE 编码方式。它可以在Unicode序列和ASCII 字符串之间进行唯一的和可逆的转换。转换的过程中，Unicode 序列中的ASCII字符保持不变，国际化字符则用字母和数字来表示。它的实质是一种用数量有限的基本字符（字母和数字）来唯一地表示大字符集（Unicode）中的字符的通用算法。域名中的字符，包括 ASCII 码和 Unicode 码，都是作为整数进行处理。</p>
<p>            也就是说，要让IIS支持中文域名，只需要在输入中文域名的地方，输入中文域名的PunyCode编码便可。当然，具体的转换计算过程并不需要自己去做，这里给大家介绍两种获得域名的PunyCode的方法。</p>
<p>            （1）如果域名是在ORAY注册的，那么登陆ORAY的控制台，进入域名管理，在域名状态里面会显示该中文域名的PunyCode。</p>
<p>            图1 在ORAY的控制台查看域名的PUNYCODE</p>
<p>            （2）使用CNNIC提供的中文域名在线转码程序。打开<a title="http://www.cnnic.net.cn/html/Dir/2003/10/29/1112.htm" target="_blank" href="http://www.cnnic.net.cn/html/Dir/2003/10/29/1112.htm"><font color="#800080">http://www.cnnic.net.cn/html/Dir/2003/10/29/1112.htm</font></a> 后，输入要转换的中文域名，然后选择&ldquo;转成punycode&rdquo;，提交便可。</div>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://werisa.com/?feed=rss2&amp;p=78</wfw:commentRss>
		<slash:comments>125</slash:comments>
		</item>
	</channel>
</rss>
