<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[电脑老窝 - 编程]]></title>
<link>http://www.sokox.com/blog/</link>
<description><![CDATA[编程，数据库，sql，学习，杂谈，小说]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[sevengo@163.com(小骇)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>电脑老窝</title>
	<url>http://www.sokox.com/blog/images/logos.gif</url>
	<link>http://www.sokox.com/blog/</link>
	<description>电脑老窝</description>
</image>

			<item>
			<link>http://www.sokox.com/blog/article/biancheng/148.htm</link>
			<title><![CDATA[JavaScript实现网页图片等比例缩放效果]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[编程]]></category>
			<pubDate>Mon,16 Feb 2009 11:14:43 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=148</guid>
		<description><![CDATA[在处理网页图片时，特别是一些图片列表的应用里面，很难保证图片统一大小，直接设置图片大小又会导致图片拉伸，造成图片模糊，本文介绍的代码可以在图片加载完成后自动按比例调整图片大小。 <br/><br/>Javascript： <br/><br/><br/><br/>&lt;script language=&#34;javascript&#34; type=&#34;text/javascript&#34;&gt; <br/>&lt;!-- <br/>// 说明：用 JavaScript 实现网页图片等比例缩放 <br/><br/>function DrawImage(ImgD,FitWidth,FitHeight) <br/>{ <br/>var image=new Image(); <br/>image.src=ImgD.src; <br/>if(image.width&gt;0 &amp;&amp; image.height&gt;0) <br/>{ <br/>if(image.width/image.height&gt;= FitWidth/FitHeight) <br/>{ <br/>if(image.width&gt;FitWidth) <br/>{ <br/>ImgD.width=FitWidth; <br/>ImgD.height=(image.height*FitWidth)/image.width; <br/>} <br/>else <br/>{ <br/>ImgD.width=image.width; <br/>ImgD.height=image.height; <br/>} <br/>} <br/>else <br/>{ <br/>if(image.height&gt;FitHeight) <br/>{ <br/>ImgD.height=FitHeight; <br/>ImgD.width=(image.width*FitHeight)/image.height; <br/>} <br/>else <br/>{ <br/>ImgD.width=image.width; <br/>ImgD.height=image.height; <br/>} <br/>} <br/>} <br/>} <br/>//--&gt; <br/>&lt;script&gt;<br/> <br/><br/><br/>调用方式： <br/><br/><br/><br/>&lt;ccid_file values=&#34;1148202890&#34; alt=&#34;自动缩放后的效果&#34;<br/>onload=&#34;javascript:DrawImage(this,200,200);&#34; / /&gt;<br/> <br/><br/><br/>如果图片较大，建议在图片标签里面同时设置期望的图片大小，这样不会导致页面在加载中撑开，该大小不会影响最终缩放效果。可以修改上面的代码为： <br/><br/><br/><br/>&lt;ccid_file values=&#34;1148202890&#34; alt=&#34;自动缩放后的效果&#34;<br/>width=&#34;200&#34; height=&#34;200&#34; onload=&#34;javascript:DrawImage(this,200,200);&#34; / /&gt;<br/> <br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/biancheng/104.htm</link>
			<title><![CDATA[SQL注入:突破关键字过滤]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[编程]]></category>
			<pubDate>Wed,21 Jan 2009 16:42:21 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=104</guid>
		<description><![CDATA[一直以来都以为只有空格，tab键和注释符/**/可以用来切割sql关键字，前段时间在看了风迅cms注入漏洞那篇帖子，才知道原来回车也可以用来作为分割符（以前竟然没有想到，真是失败）。回车的ascii码是chr(13)&amp;chr(10)，至于为什么要两个连在一起，这个我也不知道。转换成url编码形式是%0d%0a，于是就可以用%0d%0a代替空格pass一些过滤空格的检查了。<br/>　　引申一下，只用%0d能正常执行语句吗？只用%0a呢？测试证明，用任意一种分割在mssql、mysql和access里面都是可以的。<br/>　　另外，关于mssql的多语句问题。我以前一直以为必须用分号作为语句的结尾，后来发现，完全不是那样。类似<br/>　　sel&#101;ct * from table exec xp_cmdshell&#39;xxxxxxxxxx&#39;<br/>　　sel&#101;ct * from table/**/exec xp_cmdshell&#39;xxxxxxxxxx&#39;<br/>　　sel&#101;ct * from table|---tab---|exec xp_cmdshell&#39;xxxxxxxxxx&#39;<br/>　　sel&#101;ct * from table|---enter---|exec xp_cmdshell&#39;xxxxxxxxxx&#39;<br/>　　的语句都是可以正常执行的。而我以前竟然一直不知道！不过这个貌似跟连接数据库驱动有关系，odbc可以正常执行，sqloledb的话就会报错。有兴趣的继续研究吧J<br/>　　这样，以后遇到带空格过滤关键字的拦截程序，又可以发挥发挥了。可能大家早就知道了，不管怎么说，发在这里吧！<br/>　　最近想起可能还有些ascii码可以用来在sql语句中代替空格，于是写个脚本测试了一下，结果在所有128个低位ascii字符中，chr(12)也可以在access里用，不过貌似chr(12)不能出现在and、or之类的关键词附近，原因不清楚。mysql中比access多一个chr(11)可以。至于mssql，挖日，直接从1到32的ascii码换成字符后都可以正常使用。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/biancheng/70.htm</link>
			<title><![CDATA[防SQL注入代码]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[编程]]></category>
			<pubDate>Tue,20 Jan 2009 17:27:06 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=70</guid>
		<description><![CDATA[防SQL注入代码都归在下面的五种方法之一，以后所有带有数据库连接或是传参过程的程序都可以加上下面其中的一种方法，目前这样就能有效的避免绝大部分的SQL攻击，所以我就不再每个页面一个一个注释了只要见到以下的代码就是为了防SQL注入所做修改<br/>一：<br/><br/>&nbsp;&nbsp; &#39;防止ＳＱＬ注入式攻击代码。<br/>&nbsp;&nbsp; 对地址栏输入的字符串进行检索，找出非法字符，转向指定页面。 <br/>Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx<br/>&#39;---定义部份&nbsp;&nbsp;头------<br/>Fy_Cl = 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;处理方式：1=提示信息,2=转向页面,3=先提示再转向<br/>Fy_Zx = &#34;/&#34;&nbsp;&nbsp;&nbsp;&nbsp;&#39;出错时转向的页面<br/>&#39;---定义部份&nbsp;&nbsp;尾------<br/>On Error Resume Next<br/>Fy_Url=Request.ServerVariables(&#34;QUERY_STRING&#34;)<br/>Fy_a=split(Fy_Url,&#34;&amp;&#34;)<br/>redim Fy_Cs(ubound(Fy_a))<br/>On Error Resume Next<br/>for Fy_x=0 to ubound(Fy_a)<br/>Fy_Cs(Fy_x) = left(Fy_a(Fy_x),instr(Fy_a(Fy_x),&#34;=&#34;)-1)<br/>Next<br/><br/>For Fy_x=0 to ubound(Fy_Cs)<br/>If Fy_Cs(Fy_x)&lt;&gt;&#34;&#34; Then<br/>If Instr(LCase(Request(Fy_Cs(Fy_x))),&#34;&#39;&#34;)&lt;&gt;0 o&#114; Instr(LCase(Request(Fy_Cs(Fy_x))),&#34;and&#34;)&lt;&gt;0 o&#114; Instr(LCase(Request(Fy_Cs(Fy_x))),&#34;sel&#101;ct&#34;)&lt;&gt;0 o&#114; Instr(LCase(Request(Fy_Cs(Fy_x))),&#34;up&#100;ate&#34;)&lt;&gt;0 o&#114; Instr(LCase(Request(Fy_Cs(Fy_x))),&#34;chr&#34;)&lt;&gt;0 o&#114; Instr(LCase(Request(Fy_Cs(Fy_x))),&#34;del&#101;te%20from&#34;)&lt;&gt;0 o&#114; Instr(LCase(Request(Fy_Cs(Fy_x))),&#34;;&#34;)&lt;&gt;0 o&#114; Instr(LCase(Request(Fy_Cs(Fy_x))),&#34;ins&#101;rt&#34;)&lt;&gt;0 o&#114; Instr(LCase(Request(Fy_Cs(Fy_x))),&#34;mid&#34;)&lt;&gt;0 o&#114; Instr(LCase(Request(Fy_Cs(Fy_x))),&#34;master.&#34;)&lt;&gt;0 Then<br/>Sel&#101;ct Case Fy_Cl<br/>&nbsp;&nbsp;Case &#34;1&#34;<br/>Response.Write &#34;&lt;Script Language=javascript&gt;alert(&#39;&nbsp;&nbsp;出现错误！参数 &#34;&amp;Fy_Cs(Fy_x)&amp;&#34; 的值中包含非法字符串！\n\n&nbsp;&nbsp;n&#39;);window.close();&lt;/Script&gt;&#34;<br/>&nbsp;&nbsp;Case &#34;2&#34;<br/>Response.Write &#34;&lt;Script Language=javascript&gt;location.href=&#39;&#34;&amp;Fy_Zx&amp;&#34;&#39;&lt;/Script&gt;&#34;<br/>&nbsp;&nbsp;Case &#34;3&#34;<br/>Response.Write &#34;&lt;Script Language=javascript&gt;alert(&#39;&nbsp;&nbsp;出现错误！参数 &#34;&amp;Fy_Cs(Fy_x)&amp;&#34;的值中包含非法字符串！\n\n&#39;);location.href=&#39;&#34;&amp;Fy_Zx&amp;&#34;&#39;;&lt;/Script&gt;&#34;<br/>End Sel&#101;ct<br/>Response.End<br/>End If<br/>End If<br/>Next<br/><br/><br/>&#39;判断提交地点。如不是由服务程序提交则返回首页<br/>referer=Cstr(Request.ServerVariables(&#34;HTTP_REFERER&#34;))<br/>ser_name=Cstr(Request.ServerVariables(&#34;SERVER_NAME&#34;))<br/>&#39;判断浏览器位置<br/>&#39;response.write &#34;\&#34;&amp; referer &amp;&#34;\&#34;&amp; ser_name<br/>&#39;response.end<br/>&#39;if mid(referer,8,len(ser_name))&lt;&gt;ser_name then<br/> &#39;&nbsp;&nbsp;response.redirect &#34;/&#34;<br/>&#39;end if<br/>&#39;防止ＳＱＬ注入式攻击代码<br/><br/>二：<br/><br/> &#39;防止ＳＱＬ注入式攻击代码。对请求值进行判断过滤，如果发现可疑代码终止程序执行，并给予提示<br/>&nbsp;&nbsp; Function SafeRequest(ParaName,ParaType)<br/>Dim ParaValue<br/>ParaValue=Request(ParaName)<br/>If ParaType=1 then<br/>If not isNumeric(ParaValue) then<br/>Response.write &#34;参数错误&#34; &amp; ParaName &amp; &#34;请不要乱动&#34;<br/>Response.end<br/>End if<br/>Else<br/>ParaValue=replace(ParaValue,&#34;&#39;&#34;,&#34;&#39;&#39;&#34;)<br/>End if<br/>SafeRequest=ParaValue<br/>End function<br/>function He(fString)<br/>if fString=&#34;&#34; o&#114; isnull(fString) then<br/>exit function<br/> end if<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = replace(fString, &#34;&gt;&#34;, &#34;&amp;gt;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = replace(fString, &#34;&lt;&#34;, &#34;&amp;lt;&#34;)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, CHR(32), &#34;&amp;nbsp;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, CHR(9), &#34;&amp;nbsp;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, CHR(34), &#34;&amp;quot;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, CHR(39), &#34;&amp;#39;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, CHR(13), &#34;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, CHR(10) &amp; CHR(10), &#34;&lt;/P&gt;&lt;P&gt; &#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, CHR(10), &#34;&lt;BR&gt; &#34;)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&#39;fString=ChkBadWords(fString)<br/>&nbsp;&nbsp;&nbsp;&nbsp;He = fString<br/>end function<br/>function Unhe(fString)<br/>if fString=&#34;&#34; o&#114; isnull(fString) then<br/>exit function<br/> end if<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = replace(fString, &#34;&amp;gt;&#34;, &#34;&gt;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = replace(fString, &#34;&amp;lt;&#34;, &#34;&lt;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, &#34;&amp;nbsp;&#34;,CHR(32) )<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, &#34;&amp;nbsp;&#34;,CHR(9) )<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, &#34;&amp;quot;&#34;, CHR(34))<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, &#34;&amp;#39;&#34;, CHR(39))<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, &#34;&#34;, CHR(13))<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, &#34;&lt;/P&gt;&lt;P&gt; &#34;, CHR(10) &amp; CHR(10))<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString, &#34;&lt;BR&gt; &#34;, CHR(10))<br/>&nbsp;&nbsp;&nbsp;&nbsp;fString = Replace(fString,&#34; &#34;,&#34;&amp;nbsp;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#39;fString=ChkBadWords(fString)<br/>&nbsp;&nbsp;&nbsp;&nbsp;unHe = fString<br/>end function<br/><br/>action=request(&#34;action&#34;)<br/><br/><br/>过滤代码方法的应用<br/>catalogID=saferequest(&#34;catalogID&#34;,1)<br/>productid=saferequest(&#34;productid&#34;,1)<br/><br/>type_id=saferequest(&#34;type_id&#34;,1)<br/>if type_id=&#34;&#34; o&#114; not isnumeric(type_id) then<br/>&nbsp;&nbsp;type_id=0<br/>else<br/>&nbsp;&nbsp;type_id=cint(type_id)<br/>end if<br/><br/>&#39;防止ＳＱＬ注入式攻击代码<br/><br/><br/>三：<br/>&#39;防止ＳＱＬ注入式攻击代码 主要用在数据库连接文件上将此文件放在数据库连接前面将会自动加载<br/>dim sql_str_gj&nbsp;&nbsp;<br/>SQL_str_gj = &#34;’|&#34;&#34;|{|}|[|]|\|:|;|&lt;|&gt;|?|,|.|`|~|!|@|$|%|^|(|)|and|exec|ins&#101;rt|sel&#101;ct|del&#101;te|up&#100;ate|count|*|%|chr|mid|master|truncate|char|declare|or&#34;&nbsp;&nbsp;<br/>SQL_str = split(SQL_str_gj,&#34;|&#34;)&nbsp;&nbsp;<br/>’防止Get方法注入 <br/>If Request.QueryString&lt;&gt;&#34;&#34; Then&nbsp;&nbsp;<br/>For Each SQL_Get In Request.QueryString&nbsp;&nbsp;<br/>For SQL_Data=0 To Ubound(SQL_inj)&nbsp;&nbsp;<br/>if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))&gt;0 Then&nbsp;&nbsp;<br/>Response.Write &#34;&lt;Script Language=javascript&gt;alert(’非法字符尝试注入！’);history.back(-1)&lt;/Script&gt;&#34;&nbsp;&nbsp;<br/>Response.end&nbsp;&nbsp;<br/>end if&nbsp;&nbsp;<br/>next&nbsp;&nbsp;<br/>Next&nbsp;&nbsp;<br/>End If&nbsp;&nbsp;<br/>’防止Post方法注入 <br/>If Request.Form&lt;&gt;&#34;&#34; Then&nbsp;&nbsp;<br/>For Each Sql_Post In Request.Form&nbsp;&nbsp;<br/>For SQL_Data=0 To Ubound(SQL_inj)&nbsp;&nbsp;<br/>if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))&gt;0 Then&nbsp;&nbsp;<br/>Response.Write &#34;&lt;Script Language=javascript&gt;alert(’参数中包含非法字符尝试注入’);history.back(-1)&lt;/Script&gt;&#34;&nbsp;&nbsp;<br/>Response.end&nbsp;&nbsp;<br/>end if&nbsp;&nbsp;<br/>next&nbsp;&nbsp;<br/>next&nbsp;&nbsp;<br/>end if <br/>%&gt; <br/>&#39;防止ＳＱＬ注入式攻击代码<br/><br/>四：<br/>&#39;防止ＳＱＬ注入式攻击代码<br/>&lt;%<br/><br/>&#39;--------自定义比较常见的特殊字符串主要用于页面之间传参之间的判断，此效果跟saferequest(str,n)效果是一样的如果有比较特殊的页面可以直接在lj_in里面加上特殊字符------------------<br/>Dim lj_Post,lj_Get,lj_In,lj_Inf,lj_Xh,lj_db,lj_dbstr<br/>&#39;自定义需要过滤的字串,用 &#34;|&#34; 分隔<br/>lj_In = &#34;&#39;|;|and|exec|ins&#101;rt|sel&#101;ct|del&#101;te%20from|up&#100;ate|count|*|%|chr|mid|master|truncate|char|declare|dro&#112;%20table|from|net%20user|xp_cmdshell|/add|net%20localgroup%20administrators|Asc|char&#34;<br/>&#39;----------------------------------<br/>%&gt;<br/><br/>&lt;%<br/>lj_Inf = split(lj_In,&#34;|&#34;)<br/>&#39;--------POST部份------------------<br/>If Request.Form&lt;&gt;&#34;&#34; Then<br/>For Each lj_Post In Request.Form<br/><br/>For lj_Xh=0 To Ubound(lj_Inf)<br/>If Instr(LCase(Request.Form(lj_Post)),lj_Inf(lj_Xh))&lt;&gt;0 Then<br/>Response.Write &#34;&lt;Script Language=JavaScript&gt;alert(&#39;请不要在参数中包含非法字符尝试注入！&#39;);&lt;/Script&gt;&#34;<br/>Response.Write &#34;非法操作！系统做了如下记录↓&lt;br&gt;&#34;<br/>Response.Write &#34;操作ＩＰ：&#34;&amp;Request.ServerVariables(&#34;REMOTE_ADDR&#34;)&amp;&#34;&lt;br&gt;&#34;<br/>Response.Write &#34;操作时间：&#34;&amp;Now&amp;&#34;&lt;br&gt;&#34;<br/>Response.Write &#34;操作页面：&#34;&amp;Request.ServerVariables(&#34;URL&#34;)&amp;&#34;&lt;br&gt;&#34;<br/>Response.Write &#34;提交方式：ＰＯＳＴ&lt;br&gt;&#34;<br/>Response.Write &#34;提交参数：&#34;&amp;XH_Post&amp;&#34;&lt;br&gt;&#34;<br/>Response.Write &#34;提交数据：&#34;&amp;Request.Form(lj_Post)<br/>Response.End<br/>End If<br/>Next<br/><br/>Next<br/>End If<br/>&#39;----------------------------------<br/><br/>&#39;--------GET部份-------------------<br/>If Request.QueryString&lt;&gt;&#34;&#34; Then<br/>For Each lj_Get In Request.QueryString<br/><br/>For lj_Xh=0 To Ubound(lj_Inf)<br/>If Instr(LCase(Request.QueryString(lj_Get)),lj_Inf(lj_Xh))&lt;&gt;0 Then<br/>Response.Write &#34;&lt;Script Language=JavaScript&gt;alert(&#39;请不要在参数中包含非法字符尝试注入！&#39;);&lt;/Script&gt;&#34;<br/>Response.Write &#34;非法操作！系统做了如下记录↓&lt;br&gt;&#34;<br/>Response.Write &#34;操作ＩＰ：&#34;&amp;Request.ServerVariables(&#34;REMOTE_ADDR&#34;)&amp;&#34;&lt;br&gt;&#34;<br/>Response.Write &#34;操作时间：&#34;&amp;Now&amp;&#34;&lt;br&gt;&#34;<br/>Response.Write &#34;操作页面：&#34;&amp;Request.ServerVariables(&#34;URL&#34;)&amp;&#34;&lt;br&gt;&#34;<br/>Response.Write &#34;提交方式：ＧＥＴ&lt;br&gt;&#34;<br/>Response.Write &#34;提交参数：&#34;&amp;lj_Get&amp;&#34;&lt;br&gt;&#34;<br/>Response.Write &#34;提交数据：&#34;&amp;Request.QueryString(lj_Get)<br/>Response.End<br/>End If<br/>Next<br/>Next<br/>End If<br/>&#39;----------------------------------<br/>%&gt;<br/><br/>&#39;防止ＳＱＬ注入式攻击代码<br/><br/>五：<br/>&#39;防止ＳＱＬ注入式攻击代码此主要用于传参之前的总体判断如留言板这类的提交参数<br/>其中n1,n2...是代表传入的参数<br/>&lt;%requeststr=request(&#34;n1&#34;)&amp;request(&#34;n2&#34;)&amp;request(&#34;n3&#34;)&amp;request(&#34;n4&#34;)<br/>substr=&#34;href&#34;<br/>substr1=&#34;www&#34;<br/>substr2=&#34;http&#34;<br/>substr3=&#34;url&#34;<br/>if InstrRev(requeststr,substr)=&#34;0&#34; and InstrRev(requeststr,substr1)=&#34;0&#34; and InstrRev(requeststr,substr2)=&#34;0&#34; and InstrRev(requeststr,substr3)=&#34;0&#34;&nbsp;&nbsp;&nbsp;&nbsp;then%&gt;<br/><br/><br/>程序代码正文<br/><br/><br/>&lt;%<br/>end if<br/>%&gt;<br/><br/><br/>&#39;防止ＳＱＬ注入式攻击代码<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/biancheng/69.htm</link>
			<title><![CDATA[ASP六大对象介绍]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[编程]]></category>
			<pubDate>Tue,20 Jan 2009 17:05:20 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=69</guid>
		<description><![CDATA[Application对象<br/><br/>Application对象是个应用程序级的对象，用来在所有用户间共享信息，并可以在Web应用程序运行期间持久地保持数据。<br/><br/>Application的属性：<br/><br/>方法如下：<br/><br/>Application对象没有内置的属性，但是我们可以自行创建其属性。<br/><br/>&lt;% Application(&#34;属性名&#34;)=值 %&gt;<br/><br/>其实大部分Application变量都　存放在Contents集合中，当你创建一个新的Application变量时，其实就是在Contents集合中添加了一项。下面两个脚本是等效的：<br/><br/>&lt;% Application(&#34;greeting&#34;)=&#34;hello!&#34; %&gt; 或 &lt;% Application.contents(&#34;greeting&#34;)=&#34;hello!&#34;由于Application变量存在集合里，所以如果想要全部显示，其方法我们已经多次使用，例如For Each循环。<br/><br/>以下为引用的内容：<br/>&lt;%<br/>For Each item IN Application.Contents<br/>Response.write(&#34;&lt;br&gt;&#34;&amp;item&amp;Application.Contents(item))<br/>next<br/>%&gt;&nbsp;&nbsp;<br/><br/><br/>Application的方法：<br/><br/>Application的方法只有两个方法：一个是Lock，另一个是Unlock。其中Lock方法用于保证同一时刻只能一个用户对Application操作。Unlock则用于取消Lock方法的限制。如：<br/><br/>以下为引用的内容：<br/>&lt;%<br/>Application.Lock<br/>Application(&#34;visitor_num&#34;)=Application(&#34;visitor_num&#34;) 1<br/>Application.Unlock<br/>%&gt;&nbsp;&nbsp;<br/><br/><br/>Application的事件：<br/><br/>1、Application_OnStart()<br/><br/>当事件应用程序启动时触发。<br/><br/>2、Application_OnEnd()<br/><br/>此事件应用程序结束时触发。<br/><br/>这两个事件过程都是必须定义在Global.asp文件中，一般把连接数据的函数定义在这两个事件，然后放在Global.asp中。例如：<br/><br/>以下为引用的内容：<br/>Sub Application_OnStart<br/>Application(&#34;tt18_ConnectionString&#34;) = &#34;driver={SQL <br/>Server};server=jeff;uid=sa;pwd=;database=test&#34; <br/>End Sub&nbsp;&nbsp;<br/><br/><br/>一个数组能够被定义成Application对象，不过这个数组只能作为一个对象保存，而不能用Application(0)取出其值。可以定义一个临时数组实现这种功能。如：<br/><br/>以下为引用的内容：<br/>&lt;%<br/>dim Array()<br/>Array=Application(&#34;array&#34;)<br/>for i = 0 to ubound(array)<br/>Response.write Array(i)<br/>next i<br/>%&gt;&nbsp;&nbsp;<br/><br/><br/>同样要修改这个Application对象也可以定义一个临时数组，把Application对象赋给数组，然后修改这个数组的元素，最后把数组赋回<br/>Application对象。如：<br/><br/>以下为引用的内容：<br/>&lt;%<br/>dim Array()<br/>Array=Application(&#34;array&#34;)<br/>Array(0)=&#34;jeff&#34;<br/>Array(1)=&#34;zhu&#34;<br/>Application.lock<br/>Application(&#34;array&#34;)=Array<br/>Application.unlock<br/>%&gt; <br/><br/><br/>ObjectContext对象<br/><br/>该对象用于控制Active Server Pages的事务处理。事务处理由Microsoft Transaction Server (MTS)管理。<br/><br/>事件<br/><br/>ObjectContext.OnTransactionAbort<br/><br/>由放弃的事务处理事件激发，在脚本完成处理后发生。<br/><br/>ObjectContext.OnTransactionCommit<br/><br/>由成功的事务处理事件激发，在脚本完成处理后发生。<br/><br/>方法<br/><br/>ObjectContext.SetAbort<br/><br/>显式的放弃一次事务处理。<br/><br/>ObjectContext.SetComplete<br/><br/>覆盖前面任何调用ObjectContext.SetAbort方法的调用。<br/><br/>Request对象<br/><br/>Request对象用于接受所有从浏览器发往你的服务器的请求内的所有信息。<br/><br/>集合<br/><br/>Request.ClientCertificate(key[SubField])<br/><br/>所有客户证书的信息的集合。对于Key，该集合具有如下的关键字：<br/><br/>Subject<br/><br/>证书的主题。包含所有关于证书收据的信息。能和所有的子域后缀一起使用。<br/><br/>Issuer<br/><br/>证书的发行人。包含所有关于证书验证的信息。除了CN外，能和所有的子域后缀一起使用。<br/><br/>VadidFrom<br/><br/>证书发行的日期。使用VBscript格式。<br/><br/>ValidUntil<br/><br/>该证书不在有效的时间。<br/><br/>SerialNumber<br/><br/>包含该证书的序列号。<br/><br/>Certificate<br/><br/>包含整个证书内容的二进制流，使用ASN.1格式。<br/><br/>对于SubField，Subject和Issuer关键字可以具有如下的子域后缀：（比如：SubjectOU或IssuerL）<br/><br/>C<br/><br/>起源国家。<br/><br/>O<br/><br/>公司或组织名称。<br/><br/>OU<br/><br/>组织单元。<br/><br/>CN<br/><br/>用户的常规名称。<br/><br/>L<br/><br/>局部。<br/><br/>S<br/><br/>州（或省）。<br/><br/>T<br/><br/>个人或公司的标题。<br/><br/>GN<br/><br/>给定名称。<br/><br/>I<br/><br/>初始。<br/><br/>当文件cervbs.inc(VBscript使用)或cerJavas.inc(Jscript使用)通过使用#INCLUDE导向包含在你的Active Server Page里时，下面两个标志可以使用：<br/><br/>ceCertPresent<br/><br/>指明客户证书是否存在，其值为TRUE或FALSE。<br/><br/>ceUnrecongnizedIssure<br/><br/>指明在该链表中的最后的证书的发行者是否未知，其值为TRUE或FALSE。<br/><br/>Request.Cookies(Cookie[(key).Attribute])<br/><br/>Cookie的集合。允许获得浏览器的Cookie。Cookie指明返回那一个Cookie。Key用于从Cookie字典中返回具有某一关键字的Cookie值。对于Attribute，你能使用属性HasKeys来确定某一Cookie是否具有子关键字。HasKeys的值为TRUE或FALSE。<br/><br/>Request.Form(Parameter)[(Index).Count]<br/><br/>填写在HTML的表单中所有的数据的集合。Parameter是在HTML表单中某一元素的名称。当某一参数具有不止一个值（比如，当在&lt;Sel&#101;ct&gt;中使用MULTIPLE属性时）时，使用Index。当某一参数具有多值时，Count指明多值个数。<br/><br/>Request.QueryString(Varible)[(Index).Count]<br/><br/>查询字符串的所有值的集合。Varible是在查询字符串某一变量的名称。当某一变量具有多于一个值时，使用Index。当某一参数具有多值时，Count指明值的个数。<br/><br/>Request.ServerVaribles(Server Environment Variable)<br/><br/>环境变量的集合。允许读取HTTP头。你可以通过使用HTTP_前缀来读取任何头信息。比如，HTTP_USER_AGENT接受客户代理HTTP头（浏览器类型）。除此外，你可以使用下表所示的变量获得任何环境信息。<br/><br/>ALL_HTTP<br/><br/>客户端发送的所有HTTP标头，他的结果都有前缀HTTP_。<br/><br/>ALL_RAW<br/><br/>客户端发送的所有HTTP标头,其结果和客户端发送时一样，没有前缀HTTP_ <br/><br/>APPL_MD_PATH<br/><br/>应用程序的元数据库路径。<br/><br/>APPL_PHYSICAL_PATH<br/><br/>与应用程序元数据库路径相应的物理路径。<br/><br/>AUTH_PASSWORD<br/><br/>当使用基本验证模式时，客户在密码对话框中输入的密码。<br/><br/>AUTH_TYPE<br/><br/>这是用户访问受保护的脚本时，服务器用于检验用户的验证方法。<br/><br/>AUTH_USER<br/><br/>代验证的用户名。<br/><br/>CERT_COOKIE<br/><br/>唯一的客户证书ID号。<br/><br/>CERT_FLAG<br/><br/>客户证书标志，如有客户端证书，则bit0为0。如果客户端证书验证无效，bit1被设置为1。<br/><br/>CERT_ISSUER<br/><br/>用户证书中的发行者字段。<br/><br/>CERT_KEYSIZE<br/><br/>安全套接字层连接关键字的位数，如128。<br/><br/>CERT_SECRETKEYSIZE<br/><br/>服务器验证私人关键字的位数。如1024。<br/><br/>CERT_SERIALNUMBER<br/><br/>客户证书的序列号字段。<br/><br/>CERT_SERVER_ISSUER<br/><br/>服务器证书的发行者字段<br/><br/>CERT_SERVER_SUBJECT<br/><br/>服务器证书的主题字段。<br/><br/>CERT_SUBJECT<br/><br/>客户端证书的主题字段。<br/><br/>CONTENT_LENGTH<br/><br/>客户端发出内容的长度。<br/><br/>CONTENT_TYPE<br/><br/>客户发送的form内容或HTTP PUT的数据类型。<br/><br/>GATEWAY_INTERFACE<br/><br/>服务器使用的网关界面。<br/><br/>HTTPS<br/><br/>如果请求穿过安全通道（SSL），则返回ON。如果请求来自非安全通道，则返回OFF。<br/><br/>HTTPS_KEYSIZE<br/><br/>安全套接字层连接关键字的位数，如128。<br/><br/>HTTPS_SECRETKEYSIZE<br/><br/>服务器验证私人关键字的位数。如1024。<br/><br/>HTTPS_SERVER_ISSUER<br/><br/>服务器证书的发行者字段。<br/><br/>HTTPS_SERVER_SUBJECT<br/><br/>服务器证书的主题字段。<br/><br/>INSTANCE_ID<br/><br/>IIS实例的ID号。<br/><br/>INSTANCE_META_PATH<br/><br/>响应请求的IIS实例的元数据库路径。<br/><br/>LOCAL_ADDR<br/><br/>返回接受请求的服务器地址。<br/><br/>LOGON_USER<br/><br/>用户登录Windows NT的帐号<br/><br/>PATH_INFO<br/><br/>客户端提供的路径信息。<br/><br/>PATH_TRANSLATED<br/><br/>通过由虚拟至物理的映射后得到的路径。<br/><br/>QUERY_STRING<br/><br/>查询字符串内容。<br/><br/>REMOTE_ADDR<br/><br/>发出请求的远程主机的IP地址。<br/><br/>REMOTE_HOST<br/><br/>发出请求的远程主机名称。<br/><br/>REQUEST_METHOD<br/><br/>提出请求的方法。比如GET、HEAD、POST等等。<br/><br/>script_NAME<br/><br/>执行脚本的名称。<br/><br/>SERVER_NAME<br/><br/>服务器的主机名、DNS地址或IP地址。<br/><br/>SERVER_PORT<br/><br/>接受请求的服务器端口号。<br/><br/>SERVER_PORT_SECURE<br/><br/>如果接受请求的服务器端口为安全端口时，则为1，否则为0。<br/><br/>SERVER_PROTOCOL<br/><br/>服务器使用的协议的名称和版本。<br/><br/>SERVER_SOFTWARE<br/><br/>应答请求并运行网关的服务器软件的名称和版本。<br/><br/>URL<br/><br/>提供URL的基本部分。<br/><br/>方法<br/><br/>Request.BinaryRead(Count)<br/><br/>接收一个HTML表单的未经过处理的内容。当调用此方法时，Count指明要接收多少字节。在调用此方法后，Count指明实际上接收到多少个字节。<br/><br/>属性<br/><br/>Request.TotalBytes<br/><br/>查询体的长度，以字节为单位<br/><br/>Response对象<br/><br/>Response对象用于向客户端浏览器发送数据，用户可以使用该对象将服务器的数据以HTML的格式发送到用户端的浏览器，它与Request组成了一对接收、发送数据的对象，这也是实现动态的基础。下面介绍它常用的属性和方法。<br/><br/>1、Buffer属性<br/><br/>该属性用于指定页面输出时是否要用到缓冲区，默认值为False。当它为True时，直到整个Active Server Page执行结束后才会将结果输出到浏览器上。如：<br/><br/>以下为引用的内容：<br/>&lt;%Response.Buffer=True%&gt;<br/>&lt;html&gt;<br/>&lt;Head&gt;<br/>&lt;title&gt;Buffer示例&lt;/title&gt;<br/>&lt;/head&gt;<br/>&lt;body&gt;<br/>&lt;%<br/>for i=1 to 500<br/>response.write(i &amp; &#34;&lt;br&gt;&#34;)<br/>next<br/>%&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;&nbsp;&nbsp;<br/><br/><br/>这页执行时，整个主页的所有内容会同时显示在浏览器上，这个主页会存在缓存区中直到脚本执行结束。<br/><br/>2、Expires属性<br/><br/>该属性用于设置浏览器缓存页面的时间长度（单位为分），必须在服务器端刷新。通过如下设置：<br/><br/>&lt;%Response.Expires=0%&gt;<br/><br/>通过在ASP文件中加入这一行代码，要求每次请求是刷新页面，因为Response一收到页面就会过期。<br/><br/>3、Write方法<br/><br/>该方法把数据发送到客户端浏览器，如：<br/><br/>&lt;%Response.write &#34;Hello,world!&#34;%&gt;<br/><br/>4、Redirect方法<br/><br/>该方法使浏览器可以重新定位到另一个URL上，这样，当客户发出Web请求时，客户端的浏览器类型已经确定，客户被重新定位到相应的页面。如：<br/><br/>以下为引用的内容：<br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;title&gt;Redirect示例&lt;/title&gt;<br/>&lt;/head&gt;<br/>&lt;body&gt;<br/>&lt;form aciton=&#34;formjump.asp&#34; method=&#34;post&#34;&gt;<br/>&lt;sel&#101;ct name=&#34;wh&#101;retogo&#34;&gt;<br/>&lt;option sel&#101;cted value=&#34;fun&#34;&gt;Fun&lt;/option&gt;<br/>&lt;option value=&#34;news&#34;&gt;News&lt;/option&gt;<br/>&lt;option value=&#34;sample&#34;&gt;Sample&lt;/option&gt;<br/>&lt;/sel&#101;ct&gt;<br/>&lt;input type=submit name=&#34;jump&#34; value=&#34;Jump&#34;&gt;<br/>&lt;/form&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt; <br/>　　以上是提交的表单，下面是处理表单的文件formjump.asp：<br/>&lt;%response.buff=true%&gt;<br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;title&gt;Redirect示例&lt;/title&gt;<br/>&lt;/head&gt;<br/>&lt;body&gt;<br/>&lt;%<br/>thisurl=&#34;<a href="http://www.tinyu.com/" target="_blank" rel="external">http://www.tinyu.com/</a>&#34;;<br/>wh&#101;re=Request.form(&#34;wh&#101;retogo&#34;)<br/>Sel&#101;ct Case wh&#101;re<br/>case &#34;fun&#34;<br/>response.redirect thisurl &amp; &#34;/fun/default.asp&#34;<br/>case &#34;news&#34;<br/>response.redirect thisurl &amp; &#34;/news/default.asp&#34;<br/>case &#34;sample&#34;<br/>response.redirect thisurl &amp; &#34;/sample/default.asp&#34;<br/>End Sel&#101;ct<br/>%&gt;<br/>&lt;/body&gt;<br/>&lt;html&gt; <br/><br/><br/>这个例子当用户选择了以后，按&#34;Jump&#34;按钮提交表单，服务器接到申请后调用formjump.asp判断后定位到相应的URL。不过这里有一点要注意，HTTP标题已经写入到客户浏览器，任何HTTP标题的修改必须在写入页内容之前，遇到这种问题时，可以如下做：<br/><br/>在文件的开始&lt;@ Language=..&gt;后写：<br/><br/>Response.Buffer=True<br/><br/>在结尾定：<br/><br/>Response.Flush<br/><br/>这里Flush是Response的一个方法，它必须是Buffer属性设置为True时才能使用，否则会产生一个运行模式错误。另外一个Clear方法也是用于清除被缓存的页面，同样要Buffer属性设置为True时才能使用。<br/><br/>5、End方法<br/><br/>该方法用于告知Active Server当遇到该方法时停止处理ASP文件。如果Response对象的Buffer属性设置为True，这时End方法即把缓存中的内容发送到客户并清除冲区。所以要取消所有向客户的输出民，可以先清除缓冲区，然后利用End方法。如：<br/><br/>以下为引用的内容：<br/>&lt;%<br/>Response.buffer=true<br/>On error resume next<br/>Err.clear<br/>if Err.number&lt;&gt;0 then<br/>Response.Clear<br/>Response.End<br/>end if<br/>%&gt;&nbsp;&nbsp;<br/><br/><br/>Server 对象<br/><br/>Server 对象提供对服务器上的方法和属性的访问。其中大多数方法和属性是作为实用程序的功能服务的。<br/><br/>语法<br/><br/>Server.property|method<br/><br/>属性<br/><br/>scriptTimeout：<br/><br/>scriptTimeout 属性指定脚本在结束前最大可运行多长时间。 当处理服务器组件时，超时限制将不再生效。<br/><br/>语法 Server.scriptTimeout = NumSeconds<br/><br/>参数 NumSeconds<br/><br/>指定脚本在被服务器结束前最大可运行的秒数。默认值为 90 秒。<br/><br/>注释<br/><br/>通过使用元数据库中的AspscriptTimeout属性可以为 Web 服务或 Web 服务器设置缺省的scriptTimeout值。scriptTimeout属性不能设置为小于在元数据库中指定的值。例如，如果NumSeconds设置为10，而元数据库设置包含了默认值90秒，则脚本在90秒后超时。但如果NumSeconds设置为100，则脚本在100秒后超时。<br/><br/>关于使用元数据库的详细信息，参阅 关于元数据库。<br/><br/>示例 以下示例中，如果服务器处理脚本超过 100 秒，将使之超时。<br/><br/>&lt;% Server.scriptTimeout = 100 %&gt;<br/><br/>以下示例获取 scriptTimeout 属性当前值，并将其存储在变量 TimeOut 中。<br/><br/>&lt;% TimeOut = Server.scriptTimeout %&gt;<br/><br/>方法<br/><br/>Cr&#101;ateObject <br/><br/>Cr&#101;ateObject 方法创建服务器组件的实例。如果该组件执行了 OnStartPage 和 OnEndPage 方法，则此时就会调用 OnStartPage 方法。有关服务器组件的详细信息，请参阅 可安装的 ASP 组件。<br/><br/>语法 Server.Cr&#101;ateObject( progID )<br/><br/>参数 progID 指定要创建的对象的类型。progID 的格式为 [Vendor.] component[.Version]。<br/><br/>注释 默认情况下，由 Server.Cr&#101;ateObject 方法创建的对象具有页作用域。这就是说，再当前 ASP 页处理完成之后，服务器将自动破坏这些对象。要创建有会话或应用程序作用域的对象，可以使用 &lt;OBJECT&gt; 标记并设置 session 或 APPLICATION 的 SCOPE 属性，也可以在对话及应用程序变量中存储该对象。<br/><br/>例如，在如下所示的脚本中，当 session 对象被破坏，即当对话超时时或 Abandon 方法被调用时，存储在会话变量中的对象也将被破坏。<br/><br/>&lt;% Set session(&#34;ad&#34;) = Server.Cr&#101;ateObject(&#34;MSWC.AdRotator&#34;)%&gt;<br/><br/>可以通过将变量设置为 Nothing 或新的值来破坏对象，如下所示。第一个例子释放 ad 对象，第二个例子用字串代替 ad 。<br/><br/>&lt;% session (&#34;ad&#34;) = Nothing %&gt;<br/><br/>&lt;% session (&#34;ad&#34;) = &#34; Other Valum &#34; %&gt;<br/><br/>不能创建与内建对象同名的对象实例。 例如，下列脚本将返回错误。<br/><br/>&lt;% Set Response = Server.Cr&#101;ateObject(&#34;Response&#34;) %&gt; <br/><br/>示例 &lt;% Set MyAd = Server.Cr&#101;ateObject(&#34;MSWC.AdRotator&#34;) %&gt;<br/><br/>上面的例子创建一个名为 MyAd 的 MSWC.AdRotator 服务器组件，MSWC.AdRotator 组件可用于在 Web 页上的自动轮换广告。<br/><br/>关于服务器组件的详细信息, 请参阅 Creating Components for ASP.<br/><br/>HTMLEncode HTMLEncode方法对指定的字符串应用 HTML 编码。 <br/><br/>语法 Server.HTMLEncode( string )<br/><br/>参数 string 指定要编码的字符串。<br/><br/>示例脚本 &lt;%= Server.HTMLEncode(&#34;The paragraph tag: &lt;P&gt;&#34;) %&gt;<br/><br/>输出 The paragraph tag: &lt;P&gt;<br/><br/>注意 以上输出将被 Web 浏览器显示为The paragraph tag: &lt;P&gt;如果查看一下源文件或以文本方式打开一个 Web 页，您就可以看到已编码的 HTML。<br/><br/>MapPath<br/><br/>MapPath 方法将指定的相对或虚拟路径映射到服务器上相应的物理目录上。<br/><br/>语法<br/><br/>Server.MapPath( Path )<br/><br/>参数<br/><br/>Path<br/><br/>指定要映射物理目录的相对或虚拟路径。若 Path 以一个正斜杠 (/) 或反斜杠 (\) 开始，则 MapPath 方法返回路径时将 Path 视为完整的虚拟路径。若 Path 不是以斜杠开始，则 MapPath 方法返回同 .asp 文件中已有的路径相对的路径。<br/><br/>注释<br/><br/>MapPath 方法不支持相对路径语法 (.) 或 (..)。例如，下列相对路径 ../MyDir/MyFile.txt 返回一个错误。<br/><br/>MapPath 方法不检查返回的路径是否正确或在服务器上是否存在。<br/><br/>因为 MapPath 方法只映射路径而不管指定的目录是否存在，所以，您可以先用 MapPath 方法映射物理目录结构的路径，然后将其传递给在服务器上创建指定目录或文件的组件。<br/><br/>示例<br/><br/>对于下列示例，文件data.txt和包含下列脚本的test.asp文件都位于目录C:\Inetpub\Wwwroot\script下。C:\Inetpub\Wwwroot目录被设置为服务器的宿主目录。<br/><br/>下列示例使用服务器变量 PATH_INFO 映射当前文件的物理路径。脚本<br/><br/>&lt;%= server.mappath(Request.ServerVariables(&#34;PATH_INFO&#34;))%&gt;&lt;BR&gt;<br/><br/>输出<br/><br/>c:\inetpub\wwwroot\script\test.asp&lt;BR&gt;<br/><br/>由于下列示例中的路径参数不是以斜杠字符开始的，所以它们被相对映射到当前目录，此处是 C:\Inetpub\Wwwroot\script。脚本<br/><br/>&lt;%= server.mappath(&#34;data.txt&#34;)%&gt;&lt;BR&gt;<br/><br/>&lt;%= server.mappath(&#34;script/data.txt&#34;)%&gt;&lt;BR&gt;<br/><br/>输出<br/><br/>c:\inetpub\wwwroot\script\data.txt&lt;BR&gt;<br/><br/>c:\inetpub\wwwroot\script\script\data.txt&lt;BR&gt;<br/><br/>接下来的两个示例使用斜杠字符指定返回的路径应被视为在服务器的完整虚拟路径。脚本<br/><br/>&lt;%= server.mappath(&#34;/script/data.txt&#34;)%&gt;&lt;BR&gt;<br/><br/>&lt;%= server.mappath(&#34;\script&#34;)%&gt;&lt;BR&gt;<br/><br/>输出<br/><br/>c:\inetpub\script\data.txt&lt;BR&gt;<br/><br/>c:\inetpub\script&lt;BR&gt;<br/><br/>下列示例演示如何使用正斜杠 (/) 或反斜杠 (\) 返回宿主目录的物理路径。脚本<br/><br/>&lt;%= server.mappath(&#34;/&#34;)%&gt;&lt;BR&gt;<br/><br/>&lt;%= server.mappath(&#34;\&#34;)%&gt;&lt;BR&gt;<br/><br/>输出<br/><br/>c:\inetpub\wwwroot&lt;BR&gt;<br/><br/><br/>c:\inetpub\wwwroot&lt;BR&gt;<br/><br/>URLEncode<br/><br/>URLEncode 方法将 URL 编码规则，包括转义字符，应用到指定的字符串。<br/><br/>语法<br/><br/>Server.URLEncode( string )<br/><br/>参数<br/><br/>String 指定要编码的字符串。<br/><br/>示例<br/><br/>脚本 &lt;%Response.Write(Server.URLEncode(&#34;<a href="http://www.tinyu.com" target="_blank" rel="external">http://www.tinyu.com</a>&#34;;)) %&gt;<br/><br/>输出 <a href="http://www.tinyu.com" target="_blank" rel="external">http://www.tinyu.com</a><br/><br/>session对象<br/><br/>Session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。每一访问者都会单独获得一个Session。在Web应用程序中，当一个用户访问该应用时，Session类型的变量可以供这个用户在该Web应用的所有页面中共享数据；如果另一个用户也同时访问该Web应用，他也拥有自己的Session变量，但两个用户之间无法通过session变量共享信息，而Application类型的变更则可以实现站点多个用户之间在所有页面中共享信息。<br/><br/>1、sessionID属性<br/><br/>该属性返回当前会话的唯一标志，为每一个session分配不同的编号。<br/><br/>我曾在开发过程中就遇到对用户的控制问题。它要实现的功能就是，针对某个网站的一个模块，当一个会员登录后正在看此模块时，另一个人用同样的会员名登录，就不能浏览这个模块。也就是说一个会员名同时只能一个人浏览此模块。我通过用会员名（假设为UserID，唯一）和SessionID来实现了控制。当会员登录时，给这个会员一个Session记录登录状态如：Session(&#34;Status&#34;)=&#34;Logged&#34;，同时把这个会员的Session.sessionID写入数据库。当他要浏览此模块时，先判断其是否登录，若已经登录再判断它的sessionID是否与数据库记录的相同，如果不同则不能访问。这样，当另一个用户用相同的会员名登录时，那么数据库中记录的就是新的sessionID，前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能在一些收费网站有很有特别作用，它防止了一个会员名给多个人浏览的问题，为公司保障了利益。<br/><br/>2、TimeOut属性<br/><br/>该属性用来定义用户Session对象的时限。如果用户在规定的时间内没有刷新网页，则session对象就会终止。一般默认为20分钟。<br/><br/>3、Abandon方法<br/><br/>该方法是Session对象的唯一方法，可以清除Session对象，用来消除用户的Session对象并释放其所占的资源。如： &lt;% session.Abandon %&gt;<br/><br/>4、Session_OnStart和session_OnEnd事件<br/><br/>和Application一样，当对象的例程每一次启动时触发Session_OnStart事件，然后运行session_Onstart事件的处理过程。也就是说，当服务器接收到应用程序中的URL的HTTP请求时，触发此事件，并建立一个session对象。同理，这个事件也必须定在Global.asa文件中。<br/><br/>当调用Session.Abandon方法时或者在TimeOut的时间内没有刷新，这会触发Session_OnEnd事件，然后执行里面的脚本。Session变量与特定的用户相联系，针对某一个用户赋值的Session变量是和其他用户的session变量完全独立的，不会存在相互影响。<br/>session应用一列：<br/><br/>与Application一样，一个被定义为Session类型的数组只能将整个数组作为一个对象，用户不能直接改变Session数组中某个元素的值。为了创建一个Session数组，需先定义一个普通的数组，并对它的每一个元素赋初值，最后把它定义为一个session数组。如：<br/><br/>以下为引用的内容：<br/><br/>&lt;%<br/>dim array()<br/>array=array(&#34;李&#34;,&#34;明&#34;,&#34;男&#34;)<br/>session(&#34;info&#34;)=array<br/>Response.write session(&#34;info&#34;)(0) &amp;&#34;-&#34;<br/>Response.write session(&#34;info&#34;)(1) &amp;&#34;-&#34;<br/>Response.write session(&#34;info&#34;)(2) &amp;&#34;&lt;br&gt;&#34;<br/>%&gt;<br/>&lt;hr&gt;<br/>&lt;%<br/>array(0)=&#34;天&#34;<br/>array(1)=&#34;宇&#34;<br/>array(2)=&#34;男&#34;<br/>session(&#34;info&#34;)=array<br/>Response.write session(&#34;info&#34;)(0) &amp; &#34;-&#34;<br/>Response.write session(&#34;info&#34;)(1) &amp; &#34;-&#34;<br/>Response.write session(&#34;info&#34;)(2) &amp; &#34;&lt;br&gt;&#34;<br/>%&gt;<br/> <br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/biancheng/42.htm</link>
			<title><![CDATA[sel&#101;ct from wh&#101;re 等的执行次序]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[编程]]></category>
			<pubDate>Mon,19 Jan 2009 16:20:34 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=42</guid>
		<description><![CDATA[sel&#101;ct <br/>from <br/>wh&#101;re <br/>group by<br/>having<br/>o&#114;der<br/>这6个句子的执行是有一定次序的,而新手往往注意不到这一点<br/>其中,<br/>o&#114;der by永远是最后一个执行<br/>sel&#101;ct是倒数第2个然后是依次执行<br/>from<br/>wh&#101;re<br/>group by<br/>having <br/>每执行一个语句,系统的后台就生成一个 中间结果表.<br/>就是我上面写的 比如:from从句的中间结果表，这样理解:在SQL语句执行完毕之后,得到我们想要的结果.<br/>其他的系统后台行为,肯定是执行完,就算了]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/biancheng/32.htm</link>
			<title><![CDATA[response的属性和方法]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[编程]]></category>
			<pubDate>Mon,19 Jan 2009 11:57:07 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=32</guid>
		<description><![CDATA[Response的属性和方法Response就是响应服务起器对浏览器请求的文件或数据，可以重定向，发送给浏览器，设置cookie <br/>Response属性: <br/>(1)Buffer属性，用语指定是否缓冲输出，常与后面的Clear,Flush,或End方法配合使用.为正确使用这些方法，Bluffer属性应在Asp文件的第一行被设置，如Response.Buffer <br/>(2)Charset属性.该属性将字符集名称附加到Response对象中Content-type标题的后面。对不含该属性的ASP页面，Content-type标题为:Content-type:text/html <br/>(3)ContentType属性。指定服务器响应的HTTP内容类型。若为指定该属性，默认为&#34;text/html&#34; <br/>(4)Expires属性.这是一个很实用的属性，用语指定浏览器上缓冲存储的也面离过时还有多少时间，若用户在某个页面过期又回到该页，就会显示缓冲区中的页面，若设Response.Expires=0,着可使缓存中的页面立即过期 <br/>(5)ExpiresAbsolute属性。用语指定缓存在浏览器中的页面确切的到过期日期和时间。在到过期之前，若用户又返回该页，则显示缓存中的页面，若为指定时间，则该页面当天午夜过期，若为指定日期，则在给页面在脚本运行当天的指定时间到期，例如&lt;%Response.ExpiresSbsolute=#Mar 10,2001 9:30:20#%&gt; <br/>(6) Status <br/>Response方法 <br/>(1)clear 方法。用语清除缓冲区中的所用的HTML输出的正文，但不清楚标题，当Response.Buffer设为true时，clear方法使用时才不会出错。该方法可处理错误情况 <br/>(2)End 方法.该方法可使用Web服务器停止处理脚本并返回当前的处理结果，如果此时Response.Buffer为true，可调用Response.End可将缓存输出 <br/>(3)Flush方法，用于立即发送缓存区中的输出，若Response.Buffer不为true，会导致输出错误 <br/>(4)Redirect方法,使浏览器立即重定向到程序指定的URL地址。一旦使用了该方法。任何在页中显式设置的响应正文内容都将被忽略。但此方法不向客户端发送该页设置的其他HTTP标题，而是产生一个将重定向URL作为链接高寒的自动响应正文。如: <br/>&lt;%Response.redirect&#34;<a href="http://www.sohu.com" target="_blank" rel="external">http://www.sohu.com</a>&#34;%&gt; <br/>(5)Write方法。该方法使用最多，其作用是将指定的表达式的值写到当前的HTTP网叶上输出。 <br/>(6)AddHeader <br/>(7) AppendTolog <br/>Response的集合 <br/>Response只有一个集合就是cookie. <br/>语法格式: Response.Cookie.cookie名[(key)|attribute]=cookie值]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/biancheng/31.htm</link>
			<title><![CDATA[编写通用的ASP防SQL注入攻击程序]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[编程]]></category>
			<pubDate>Mon,19 Jan 2009 11:56:27 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=31</guid>
		<description><![CDATA[SQL注入被那些菜鸟级别的所谓黑客高手玩出了滋味，发现现在大部分黑客入侵都是基于SQL注入实现的，哎，谁让这个入门容易呢，好了，不说废话了，现在我开始说如果编写通用的SQL防注入程序一般的http请求不外乎get 和 post,所以只要我们在文件中过滤所有post或者get请求中的参数信息中非法字符即可，所以我们实现http 请求信息过滤就可以判断是是否受到SQL注入攻击。 <br/><br/>　　IIS传递给asp.dll的get 请求是是以字符串的形式，，当 传递给Request.QueryString数据后，asp解析器会分析Request.QueryString的信息，，然后根据&#34;&amp;&#34;，分出各个数组内的数据所以get的拦截如下：<br/><br/>　　首先我们定义请求中不能包含如下字符：<br/><br/>&#39;|and|exec|ins&#101;rt|sel&#101;ct|del&#101;te|up&#100;ate|count|*|%|chr|mid|master|truncate|char|declare&nbsp;&nbsp;<br/><br/>　　各个字符用&#34;|&#34;隔开，，然后我们判断的得到的Request.QueryString，具体代码如下 ：<br/><br/>dim sql_injdata <br/>SQL_injdata = &#34;&#39;|and|exec|ins&#101;rt|sel&#101;ct|del&#101;te|up&#100;ate|count|*|%|chr|mid|master|truncate|char|declare&#34; <br/>SQL_inj = split(SQL_Injdata,&#34;|&#34;) <br/>If Request.QueryString＜＞&#34;&#34; Then <br/>　For Each SQL_Get In Request.QueryString <br/>　　For SQL_Data=0 To Ubound(SQL_inj) <br/>　　　if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))＞0 Then <br/>　　　　Response.Write &#34;＜Script Language=****＞alert(&#39;天下电影联盟SQL通用防注入系统提示↓nn请不要在参数中包含非法字符尝试注入！&#39;);history.back(-1)＜/Script＞&#34; <br/>　　　　Response.end <br/>　　　end if <br/>　　next <br/>　Next <br/>End If&nbsp;&nbsp;<br/><br/>　　这样我们就实现了get请求的注入的拦截，但是我们还要过滤post请求，所以我们还得继续考虑request.form,这个也是以数组形式存在的，我们只需要再进一次循环判断即可。代码如下：<br/><br/>If Request.Form＜＞&#34;&#34; Then <br/>　For Each Sql_Post In Request.Form <br/>　　For SQL_Data=0 To Ubound(SQL_inj) <br/>　　　if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))＞0 Then <br/>　　　　Response.Write &#34;＜Script Language=****＞alert(&#39;天下电影联盟SQL通用防注入系统提示↓nn请不要在参数中包含非法字符尝试注入！nn<a href="HTTP://www.521movie.com" target="_blank" rel="external">HTTP://www.521movie.com</a> &#39;);history.back(-1)＜/Script＞&#34; <br/>　　　　Response.end <br/>　　　end if <br/>　　next <br/>　next <br/>end if&nbsp;&nbsp;<br/><br/>　　好了大功告成，我们已经实现了get和post请求的信息拦截，你只需要在conn.asp之类的打开数据库文件之前引用这个页面即可。放心的继续开发你的程序，不用再考虑是否还会受到SQL注入攻击。难道不是么？ ]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/biancheng/27.htm</link>
			<title><![CDATA[asp:Property解释与例子 ]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[编程]]></category>
			<pubDate>Mon,19 Jan 2009 11:42:54 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=27</guid>
		<description><![CDATA[Property Get 语句<br/>在 Class 块中，声明构成用来取得（返回）的值的属性过程的主体的名称、参数和代码。<br/>[Public [Default]| Private] Property Get name [(arglist)]<br/>[statements]<br/>[[Set] name = e&#173;xpression]<br/>[Exit Property]<br/>[statements]<br/>[[Set] name = e&#173;xpression]<br/>End Property<br/>参数<br/>Public<br/>表明Property Get 过程可以被所有脚本中的其他过程访问。<br/>Default<br/>只与 Public 关键字一起使用，表明 Property Get 过程中定义的属性为类的缺省属性。<br/>Private<br/>表明 Property Get 过程只对定义它的 Class 块中的其他过程是可以访问的。<br/>name<br/>Property Get 过程的名称；遵守标准的变量命名规则，区别仅仅在于它可以与同一Class块中的Property Let 或 Property Set过程。<br/>arglist<br/>该变量列表代表了 Property Get 过程被调用时传递给它的参数。多个参数之间用逗号分隔开。Property Get 过程中的每个参数的名称必须与 Property Let 过程中的相应参数相同(如果有的话)。<br/>statements<br/>任意的一组语句，将在 Property Get 过程的主体中执行。<br/>Set<br/>在将对象作为 Property Get 过程的返回值时使用的关键字。<br/>e&#173;xpression<br/>Property Get 过程的返回值。<br/>说明<br/>如果未使用 Public 或 Private明确声明，则 Property Get 过程被缺省为公有的，即它们对于脚本中的其他所有过程都是可见的。Property Get过程中的局部变量的值在不同的过程调用之间是不保存的。<br/>在其他任何过程(例如 Function 或 Property Let) 内部都不能定义 Property Get 过程。<br/>Exit Property 语句将导致立即从 Property Get 过程中退出。程序将继续执行调用 Property Get 过程的语句之后的程序。Exit Property 语句可以出现在 Property Get 过程中的任何位置，次数不限。<br/>与Sub 和 Property Let 过程类似，Property Get 过程是能够接受参数的过程，可以执行一系列的语句，以及改变参数的值。然而，与Sub 和 Property Let 不同的是，Property Get 过程可以被用于表达式的右侧，用与使用Function 或属性名称相同的方式来返回属性的值。<br/>例子：<br/>Class myClass1<br/>Public a1,a2<br/>Public Property Get a3(ByVal a5)<br/>a3=a5＆&#34; good&#34;<br/>End Property<br/>End Class<br/><br/>Dim x<br/>Set x=New myClass1<br/>response.Write(&#34;x.a1+x.a2=&#34;＆x.a3(&#34;中国&#34;)＆&#34;〈br〉&#34;)<br/>x.a1=1<br/>x.a2=2<br/>Response.Write(&#34;x.a1=&#34;＆x.a1＆&#34;〈br〉&#34;)<br/>Response.Write(&#34;x.a2=&#34;＆x.a2＆&#34;〈br〉&#34;)<br/>运行结果为：<br/>x.a1+x.a2=中国 good<br/>x.a1=1<br/>x.a2=2<br/>对属性只读<br/>==============================================================================<br/>Property Let 语句<br/>在 Class 块中，声明名称、参数和代码等，它们构成了赋值（设置）的 Property 过程的主体。<br/>[Public | Private] Property Let name ([arglist,] value<br/>)<br/>[statement]<br/>[Exit Property]<br/>[statement]<br/>End Property<br/>参数<br/>Public<br/>表明 Property Let 过程可以被所有脚本中的其他所有过程访问。<br/>Private<br/>表明 Property Let 过程只能被定义之的 Class 块内的其他过程访问。<br/>name<br/>Property Let 过程的名称；遵守标准的变量命名规则，区别仅仅在于其名称可以与相同 Class 块中的 Property Get 或 Property Set 过程相同。<br/>arglist<br/>该变量列表代表了在调用时被传递到 Property Let 过程的参数。多个参数之间用逗号隔开。Property Let 过程的每个参数的名字必须与 Property Get 过程中的相应参数相同。此外， Property Let 过程的参数比相应的 Property Get 过程总要多一个。该参数为被赋予属性的值。<br/>value<br/>该变量中包含要赋予属性的值。当过程被调用时，该参数将出现在调用表达式的右侧。<br/>statement<br/>任意的一组语句，将在 Property Let 过程的主体内执行。<br/>注意每个 Property Let 语句必须为所定义的属性定义至少一个参数。该参数（在存在多个参数时的最后一个参数）包含了当 Property Let 语句被调用时要赋予属性的值。该参数在前面的语法中被称为value。<br/>说明<br/>如果未明确地使用 Public 或 Private进行指定，Property Let 过程被缺省设置为公有的，即它们对于脚本内的其他所有过程都是可见的。Property Let过程中的局部变量的值在不同的过程调用之间是不被保存的。<br/>在其他任何过程（例如 Function 或 Property Get）的内部不能够定义 Property Let 过程。<br/>Exit Property 语句将导致立即从 Property Let 过程中退出。程序将从调用 Property Let 过程的语句之后的点继续执行。Exit Property 语句可以出现在 Property Let 过程中的任何位置，次数不限。<br/>与 Function 和 Property Get 过程类似，Property Let 过程是一个单独的过程，它可以接受参数，执行一系列的语句，还可以改变参数的值。不过，与Function 和 Property Get 过程不同的是，它们两者都返回一个值，而Property Let过程只能用于属性赋值表达式的左侧。<br/>例子：<br/>Class myClass1<br/>Public a1,a2<br/>Public Property Let a3(ByVal a5)<br/>a3=a5 ＆ &#34; good&#34;<br/>a1=a5<br/>End Property<br/>End Class<br/><br/>Dim x<br/>Set x=New myClass1<br/>x.a3=8<br/>response.Write(&#34;x.a1+x.a2=&#34;＆x.a1＆&#34;〈br〉&#34;)<br/>x.a1=1<br/>x.a2=2<br/>Response.Write(&#34;x.a1=&#34;＆x.a1＆&#34;〈br〉&#34;)<br/>Response.Write(&#34;x.a2=&#34;＆x.a2＆&#34;〈br〉&#34;)<br/>运行结果为：<br/>x.a1+x.a2=8<br/>x.a1=1<br/>x.a2=2<br/><br/>对属性只写，必须有一个参数用于接受外来的赋值<br/>===================================================================================<br/>Property Set 语句<br/>在 Class 块中，声明名称、参数和代码，这些构成了将引用设置到对象的 Property 过程的主体。<br/>[Public | Private] Property Set name(<br/>[arglist,] reference<br/>)<br/>[statement]<br/>[Exit Property]<br/>[statement]<br/>End Property<br/>参数<br/>Public<br/>表明 Property Set 过程可以被所有脚本中的其他所有过程访问。<br/>Private<br/>表明 Property Set 过程只能被声明之的同一 Class 块中的其他过程访问。<br/>name<br/>Property Set 过程的名称；遵守标准的变量命名规则，不过该名称可以与同一个 Class 块中的 Property Get 或 Property Let 过程相同。<br/>arglist<br/>变量列表，代表在 Property Set 过程被调用时传递给它的参数。多个参数之间用逗号分隔开。此外，Property Set 过程将总是比它相应的 Property Get 过程多一个参数。这个多出来的参数是被赋予的对象。<br/>reference<br/>变量，其中包含被用于对象引用赋值的右侧的对象引用。<br/>statement<br/>将要在 Property Set 过程主体中执行的任何一组语句。<br/>注意每个 Property Set 语句都必须为所定义的过程定义至少一个参数。当 Property Set 语句所定义的过程被调用时，该必需参数（在多个参数时为最后一个参数）中将为属性提供实际的对象引用。在前面的语法中，该参数被称为引用。<br/>说明<br/>除非使用 Public 或 Private 明确地进行指定，否则 Property Set 过程被设置为缺省的公有模式，即脚本中的其他所有过程都是可见的。在不同的过程调用时，Property Set 过程中的局部变量是不保存的。<br/>在其他任何过程（例如Function或Property Let）中都不能够定义Property Set过程。<br/>Exit Property 语句将导致立即从 Property Set 过程中退出。程序将继续执行调用 Property Set 过程之后的语句。Exit Property 语句的数量不受限制，可以出现在 Property Set 过程中的任何位置。<br/>与 Function 和 Property Get 过程类似，Property Set 过程是一个单独的过程，它可以有若干参数，执行一系列的语句，还可以改变参数的值。然而，与 Function 和 Property Get 过程不同的是，函数和过程都可以返回值，而 Property Set 过程对象引用赋值（Set 语句）的左侧。<br/>例子：<br/>Class myClass1<br/>Public a1,a2<br/>Private a5<br/>Public Property Set a3(reference)<br/>Dim conn,connStr<br/>connStr=&#34;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&#34; ＆ Server.MapPath(&#34;count.mdb&#34;)<br/>Set conn = Server.Cr&#101;ateObject(&#34;ADODB.Connection&#34;)<br/>conn.Open connStr<br/>reference.open &#34;Sel&#101;ct * FROM wenzi&#34;,conn,1,1<br/>a5=reference.recordcount<br/>conn.Close<br/>Set conn=Nothing<br/>End Property<br/>Public Property Get a3()<br/>a3=a5<br/>End Property<br/>End Class<br/><br/>Dim x<br/>Set x=New myClass1<br/>Set x.a3=server.Cr&#101;ateObject(&#34;ADODB.Recordset&#34;)<br/>response.Write(&#34;x.a1+x.a2=&#34;＆x.a3＆&#34;〈br〉&#34;)<br/>x.a1=1<br/>x.a2=2<br/>Response.Write(&#34;x.a1=&#34;＆x.a1＆&#34;〈br〉&#34;)<br/>Response.Write(&#34;x.a2=&#34;＆x.a2＆&#34;〈br〉&#34;)<br/>运行结果：<br/>x.a1+x.a2=21900<br/>x.a1=1<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/biancheng/26.htm</link>
			<title><![CDATA[asp中的动态数组]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[编程]]></category>
			<pubDate>Mon,19 Jan 2009 11:42:24 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=26</guid>
		<description><![CDATA[&lt;% <br/>Dim array1(),i<br/><br/>ReDim array1(3)<br/>array1(3)=10<br/>response.Write(array1(3)&amp;&#34;&lt;br&gt;&#34;)<br/>i=15<br/>ReDim array1(i)<br/>Response.Write(UBound(array1))<br/>%&gt;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/biancheng/22.htm</link>
			<title><![CDATA[定时提醒代码]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[编程]]></category>
			<pubDate>Mon,19 Jan 2009 11:10:47 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=22</guid>
		<description><![CDATA[var alertTime=&#34;2008-6-13 12:12&#34;;&nbsp;&nbsp;提醒日期<br/>function ShowAlert(){<br/>&nbsp;&nbsp;&nbsp;&nbsp; if(now==alertTime)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert()<br/>&nbsp;&nbsp;&nbsp;&nbsp; else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setTimeout(&#34;ShowAlert()&#34;,3000); //3000表示三秒检验一次<br/>} <br/><br/><br/>这是定时提醒]]></description>
		</item>
		
</channel>
</rss>
