<?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>刺客 &#187; Asp</title>
	<atom:link href="http://blog.cike.org/tag/asp/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.cike.org</link>
	<description>刘益民中文网</description>
	<lastBuildDate>Mon, 03 May 2010 06:23:27 +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>[转]精妙SQL语句收集</title>
		<link>http://blog.cike.org/2007/sql-favorites/</link>
		<comments>http://blog.cike.org/2007/sql-favorites/#comments</comments>
		<pubDate>Wed, 04 Jul 2007 03:06:12 +0000</pubDate>
		<dc:creator>cike</dc:creator>
				<category><![CDATA[后端]]></category>
		<category><![CDATA[Asp]]></category>
		<category><![CDATA[Sql]]></category>

		<guid isPermaLink="false">http://temp.cike.org/2007/07/%e7%b2%be%e5%a6%99sql%e8%af%ad%e5%8f%a5%e6%94%b6%e9%9b%86/</guid>
		<description><![CDATA[<p>说明：复制表(只复制结构,源表名：a 新表名：b) SQL: select * into b from a where 1&#60;&#62;1 说明：拷贝表(拷贝数据,源表名：a 目标表名：b) SQL: insert into b(a, b, c) select d,e,f from b; 说明：显示文章、提交人和最后回复时间 SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate fr...</p>]]></description>
			<content:encoded><![CDATA[<p>说明：复制表(只复制结构,源表名：a 新表名：b)<br />
SQL: select * into b from a where 1&lt;&gt;1</p>
<p>说明：拷贝表(拷贝数据,源表名：a 目标表名：b)<br />
SQL: insert into b(a, b, c) select d,e,f from b;</p>
<p>说明：显示文章、提交人和最后回复时间<br />
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b</p>
<p>说明：外连接查询(表名1：a 表名2：b)<br />
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c</p>
<p>说明：日程安排提前五分钟提醒<br />
SQL: select * from 日程安排 where datediff(&#8216;minute&#8217;,f开始时间,getdate())&gt;5</p>
<p>说明：两张关联表，删除主表中已经在副表中没有的信息<br />
SQL:<br />
delete from info where not exists ( select * from infobz where info.infid=infobz.infid )</p>
<p>说明：&#8211;<br />
SQL:<br />
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE FROM TABLE1,(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DATE,&#8217;YYYY/MM&#8217;) = TO_CHAR(SYSDATE, &#8216;YYYY/MM&#8217;)) X, (SELECT NUM, UPD_DATE, STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DATE,&#8217;YYYY/MM&#8217;) = TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, &#8216;YYYY/MM&#8217;) ¦¦ &#8216;/01&#8242;,&#8217;YYYY/MM/DD&#8217;) &#8211; 1, &#8216;YYYY/MM&#8217;) ) Y, WHERE X.NUM = Y.NUM （+）AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) &lt;&gt; X.STOCK_ONHAND ) B WHERE A.NUM = B.NUM</p>
<p>说明：&#8211;<br />
SQL:<br />
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称=&#8217;&#8221;&amp;strdepartmentname&amp;&#8221;&#8216; and 专业名称=&#8217;&#8221;&amp;strprofessionname&amp;&#8221;&#8216; order by 性别,生源地,高考总成绩</p>
<p>说明：<br />
从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源）<br />
SQL:<br />
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, &#8216;yyyy&#8217;) AS telyear, SUM(decode(TO_CHAR(a.telfeedate, &#8216;mm&#8217;), &#8216;01&#8242;, a.factration)) AS JAN, SUM(decode(TO_CHAR(a.telfeedate, &#8216;mm&#8217;), &#8216;02&#8242;, a.factration)) AS FRI, SUM(decode(TO_CHAR(a.telfeedate, &#8216;mm&#8217;), &#8216;03&#8242;, a.factration)) AS MAR, SUM(decode(TO_CHAR(a.telfeedate, &#8216;mm&#8217;), &#8216;04&#8242;, a.factration)) AS APR, SUM(decode(TO_CHAR(a.telfeedate, &#8216;mm&#8217;), &#8216;05&#8242;, a.factration)) AS MAY, SUM(decode(TO_CHAR(a.telfeedate, &#8216;mm&#8217;), &#8216;06&#8242;, a.factration)) AS JUE,SUM(decode(TO_CHAR(a.telfeedate, &#8216;mm&#8217;), &#8216;07&#8242;, a.factration)) AS JUL, SUM(decode(TO_CHAR(a.telfeedate, &#8216;mm&#8217;), &#8216;08&#8242;, a.factration)) AS AGU, SUM(decode(TO_CHAR(a.telfeedate, &#8216;mm&#8217;), &#8216;09&#8242;, a.factration)) AS SEP, SUM(decode(TO_CHAR(a.telfeedate, &#8216;mm&#8217;), &#8216;10&#8242;, a.factration)) AS OCT, SUM(decode(TO_CHAR(a.telfeedate, &#8216;mm&#8217;), &#8216;11&#8242;, a.factration)) AS NOV,SUM(decode(TO_CHAR(a.telfeedate, &#8216;mm&#8217;), &#8216;12&#8242;, a.factration)) AS DEC FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration FROM TELFEESTAND a, TELFEE b WHERE a.tel = b.telfax) a GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, &#8216;yyyy&#8217;)</p>
<p>说明：四表联查问题：<br />
SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where &#8230;..</p>
<p>说明：得到表中最小的未使用的ID号<br />
SQL:<br />
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID FROM Handle WHERE NOT HandleID IN (SELECT a.HandleID &#8211; 1 FROM Handle a)</p>
<p> </p>
<p>1.按姓氏笔画排序:<br />
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as</p>
<p>2.数据库加密:<br />
select encrypt(&#8216;原始密码&#8217;)<br />
select pwdencrypt(&#8216;原始密码&#8217;)<br />
select pwdcompare(&#8216;原始密码&#8217;,'加密后密码&#8217;) = 1&#8211;相同；否则不相同 encrypt(&#8216;原始密码&#8217;)<br />
select pwdencrypt(&#8216;原始密码&#8217;)<br />
select pwdcompare(&#8216;原始密码&#8217;,'加密后密码&#8217;) = 1&#8211;相同；否则不相同</p>
<p>3.取回表中字段:<br />
declare @list varchar(1000),@sql nvarchar(1000)<br />
select @list=@list+&#8217;,'+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name=&#8217;表A&#8217;<br />
set @sql=&#8217;select &#8216;+right(@list,len(@list)-1)+&#8217; from 表A&#8217;<br />
exec (@sql)</p>
<p>4.查看硬盘分区:<br />
EXEC master..xp_fixeddrives</p>
<p>5.比较A,B表是否相等:<br />
if (select checksum_agg(binary_checksum(*)) from A)<br />
    =<br />
   (select checksum_agg(binary_checksum(*)) from B)<br />
print &#8216;相等&#8217;<br />
else<br />
print &#8216;不相等&#8217;</p>
<p>6.杀掉所有的事件探察器进程:<br />
DECLARE hcforeach CURSOR GLOBAL FOR SELECT &#8216;kill &#8216;+RTRIM(spid) FROM master.dbo.sysprocesses<br />
WHERE program_name IN(&#8216;SQL profiler&#8217;,N&#8217;SQL 事件探查器&#8217;)<br />
EXEC sp_msforeach_worker &#8216;?&#8217;</p>
<p>7.记录搜索:<br />
开头到N条记录<br />
Select Top N * From 表<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
N到M条记录(要有主索引ID)<br />
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID  Desc<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
N到结尾记录<br />
Select Top N * From 表 Order by ID Desc</p>
<p>8.如何修改数据库的名称:<br />
sp_renamedb &#8216;old_name&#8217;, &#8216;new_name&#8217;</p>
<p>9：获取当前数据库中的所有用户表<br />
select Name from sysobjects where xtype=&#8217;u&#8217; and status&gt;=0</p>
<p>10：获取某一个表的所有字段<br />
select name from syscolumns where id=object_id(&#8216;表名&#8217;)</p>
<p>11：查看与某一个表相关的视图、存储过程、函数<br />
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like &#8216;%表名%&#8217;</p>
<p>12：查看当前数据库中所有存储过程<br />
select name as 存储过程名称 from sysobjects where xtype=&#8217;P&#8217;</p>
<p>13：查询用户创建的所有数据库<br />
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name=&#8217;sa&#8217;)<br />
或者<br />
select dbid, name AS DB_NAME from master..sysdatabases where sid &lt;&gt; 0&#215;01</p>
<p>14：查询某一个表的字段和数据类型<br />
select column_name,data_type from information_schema.columns<br />
where table_name = &#8216;表名&#8217;</p>
<p>[n].[标题]:<br />
Select * From TableName Order By CustomerName</p>
<p>[n].[标题]:<br />
Select * From TableName Order By CustomerName</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cike.org/2007/sql-favorites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP自定义函数收藏[2007-6-29更新]</title>
		<link>http://blog.cike.org/2007/asp-function/</link>
		<comments>http://blog.cike.org/2007/asp-function/#comments</comments>
		<pubDate>Fri, 29 Jun 2007 02:27:44 +0000</pubDate>
		<dc:creator>cike</dc:creator>
				<category><![CDATA[后端]]></category>
		<category><![CDATA[Asp]]></category>
		<category><![CDATA[函数]]></category>

		<guid isPermaLink="false">http://temp.cike.org/?p=56</guid>
		<description><![CDATA[<p>把功能写成自定义函数调用，可以减少重复无意义的代码重写，爽！看的程序多了，函数也见多了，收集起来出书：》，坚持更新</p>]]></description>
			<content:encoded><![CDATA[<div class="code">&lt;%<br />
&#8216;名称：判断文件名是否合法 文件名不能包含非法字符<br />
&#8216;用法：略<br />
&#8216;收集：by <a href="http://cike.org/">http://cike.org</a><br />
&#8216;==============================================<br />
Function isFilename(aFilename)<br />
 Dim sErrorStr,iNameLength,i<br />
 isFilename=TRUE<br />
 sErrorStr=Array(&#8220;/&#8221;,&#8221;\&#8221;,&#8221;:&#8221;,&#8221;*&#8221;,&#8221;?&#8221;,&#8221;"&#8221;",&#8221;&lt;&#8221;,&#8221;&gt;&#8221;,&#8221;|&#8221;)<br />
 iNameLength=Len(aFilename)<br />
 If iNameLength&lt;1 Or iNameLength=null Then<br />
  isFilename=FALSE<br />
 Else<br />
  For i=0 To 8<br />
   If instr(aFilename,sErrorStr(i)) Then<br />
    isFilename=FALSE    <br />
   End If<br />
  Next<br />
 End If<br />
End Function</div>
<p>&#8216;==============================================<br />
&#8216;名称：去掉字符串头尾的连续的回车和空格<br />
&#8216;用法：略<br />
&#8216;收集：by <a href="http://cike.org/">http://cike.org</a><br />
&#8216;==============================================<br />
function trimVBcrlf(str)<br />
 trimVBcrlf=rtrimVBcrlf(ltrimVBcrlf(str))<br />
end function</p>
<p>&#8216;==============================================<br />
&#8216;名称：去掉字符串开头的连续的回车和空格<br />
&#8216;用法：略<br />
&#8216;收集：by <a href="http://cike.org/">http://cike.org</a><br />
&#8216;==============================================<br />
function ltrimVBcrlf(str)<br />
 dim pos,isBlankChar<br />
 pos=1<br />
 isBlankChar=true<br />
 while isBlankChar<br />
  if mid(str,pos,1)=&#8221; &#8221; then<br />
   pos=pos+1<br />
  elseif mid(str,pos,2)=VBcrlf then<br />
   pos=pos+2<br />
  else<br />
   isBlankChar=false<br />
  end if<br />
 wend<br />
 ltrimVBcrlf=right(str,len(str)-pos+1)<br />
end function</p>
<p>&#8216;==============================================<br />
&#8216;名称：去掉字符串末尾的连续的回车和空格<br />
&#8216;用法：略<br />
&#8216;收集：by <a href="http://cike.org/">http://cike.org</a><br />
&#8216;==============================================<br />
function rtrimVBcrlf(str)<br />
 dim pos,isBlankChar<br />
 pos=len(str)<br />
 isBlankChar=true<br />
 while isBlankChar and pos&gt;=2<br />
  if mid(str,pos,1)=&#8221; &#8221; then<br />
   pos=pos-1<br />
  elseif mid(str,pos-1,2)=VBcrlf then<br />
   pos=pos-2<br />
  else<br />
   isBlankChar=false<br />
  end if<br />
 wend<br />
 rtrimVBcrlf=rtrim(left(str,pos))<br />
end function</p>
<p>&#8216;判断Email是否有效,返回1表示正确<br />
Function isEmail(aEmail)<br />
 Dim iLocat,v,iLength,i,checkletter<br />
 If instr(aEmail,&#8221;@&#8221;) = 0 Or instr(aEmail,&#8221;.&#8221;) = 0 Then<br />
  isEmail=0<br />
  EXIT FUNCTION<br />
 End If<br />
 iLocat=instr(aEmail,&#8221;@&#8221;)<br />
 If instr(iLocat,aEmail,&#8221;.&#8221;)=0 Or instr(iLocat+1,aEmail,&#8221;@&#8221;)&gt;0 Then<br />
  isEmail=0<br />
  EXIT FUNCTION<br />
 End If<br />
 If left(aEmail,1)=&#8221;.&#8221; Or right(aEmail,1)=&#8221;.&#8221; Or left(aEmail,1)=&#8221;@&#8221; Or right(aEmail,1)=&#8221;@&#8221; Then<br />
  isEmail=0<br />
  EXIT FUNCTION<br />
 End If<br />
 v=&#8221;1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-.@&#8221;<br />
 iLength=len(aEmail)<br />
 For i=1 To iLength<br />
  checkletter=mid(aEmail,i,1)<br />
  If instr(v,checkletter)=0 Then<br />
   isEmail=0<br />
   EXIT FUNCTION<br />
  End If<br />
 Next<br />
 isEmail=1<br />
End Function</p>
<p>&#8216;测试用:显示服务器信息<br />
Sub showServer<br />
 Dim name<br />
 Response.write &#8221;&lt;Table border=1 bordercolor=lightblue CELLSPACING=0&gt;&#8221;<br />
 for each name in request.servervariables<br />
  Response.write &#8221;&lt;tr&gt;&#8221;<br />
  Response.write &#8221;&lt;td&gt;&#8221;&amp;name&amp;&#8221;&lt;/td&gt;&#8221;<br />
  Response.write &#8221;&lt;td&gt;&#8221;&amp;request.servervariables(name)&amp;&#8221;&lt;br&gt;&lt;/td&gt;&#8221;<br />
  Response.write &#8221;&lt;/tr&gt;&#8221;<br />
 next<br />
 Response.write &#8221;&lt;/table&gt;&#8221;<br />
End Sub</p>
<p>&#8216;测试用:显示Rs结果集以及字段名称<br />
Sub showRs(rs)<br />
 Dim strTable,whatever<br />
 Response.write &#8221;&lt;center&gt;&lt;table&gt;&lt;tr&gt;&#8221;<br />
 for each whatever in rs.fields<br />
  response.write &#8221;&lt;td&gt;&lt;b&gt;&#8221; &amp; whatever.name &amp; &#8221;&lt;/B&gt;&lt;/TD&gt;&#8221;<br />
 next<br />
 strTable = &#8221;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&#8221;&amp;rs.GetString(,,&#8221;&lt;/td&gt;&lt;td&gt;&#8221;,&#8221;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&#8221;,&#8221; &#8221;) &amp;&#8221;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&gt;&#8221;<br />
 Response.Write(strTable)<br />
End Sub</p>
<p>&#8216;用HTML格式显示文本<br />
Function txt2Html(str)<br />
 if isnull(str) then<br />
  txt2Html=&#8221;"<br />
  exit Function<br />
 end if<br />
 str=Replace(str,chr(34),&#8221;"&#8221;)<br />
 str=Replace(str,&#8221;&lt;&#8221;,&#8221;&lt;&#8221;)<br />
 str=Replace(str,&#8221;&gt;&#8221;,&#8221;&gt;&#8221;)<br />
 str=Replace(str,chr(13)+chr(10),&#8221;&lt;br&gt;&#8221;)<br />
 str=Replace(str,chr(9),&#8221;    &#8221;)<br />
 str=Replace(str,&#8221; &#8221;,&#8221; &#8221;)<br />
 txt2Html=str<br />
End Function</p>
<p>&#8216;测试用:显示调试错误信息<br />
Sub showError<br />
 Dim sErrMsg<br />
 sErrMsg=Err.Source&amp;&#8221; &#8221;&amp;Err.Description<br />
 Response.write &#8221;&lt;center&gt;&#8221;&amp;sErrMsg&amp;&#8221;&lt;/center&gt;&#8221;<br />
 Err.clear<br />
End Sub</p>
<p>&#8216;显示文字计数器<br />
Sub showCounter<br />
Dim fs,outfile,filename,count<br />
filename=server.mappath(&#8220;count.txt&#8221;)<br />
Set fs = CreateObject(&#8220;Scripting.FileSystemObject&#8221;)<br />
If fs.fileExists(filename) Then<br />
 Set outfile=fs.openTextFile(filename,1)<br />
 count=outfile.readline<br />
 count=count+1<br />
 Response.write &#8221;&lt;center&gt;浏览人次：&#8221;&amp;count&amp;&#8221;&lt;center&gt;&#8221;<br />
 outfile.close<br />
 Set outfile=fs.CreateTextFile(filename)<br />
 outfile.writeline(count)<br />
Else<br />
 Set outfile=fs.openTextFile(filename,8,TRUE)<br />
 count=0<br />
 outfile.writeline(count)<br />
END IF<br />
outfile.close<br />
set fs=nothing<br />
End Sub<br />
%&gt;</p>
<p>Array() <br />
　FUNCTION: 返回一个数组 <br />
　SYNTAX: Array(list) <br />
　ARGUMENTS: 字符，数字均可 <br />
　EXAMPLE: &lt;%<br />
Dim myArray()<br />
For i = 1 to 7<br />
　 Redim Preserve myArray(i)<br />
　 myArray(i) = WeekdayName(i)<br />
Next<br />
%&gt; <br />
　RESULT: 建立了一个包含7个元素的数组myArray<br />
myArray(&#8220;Sunday&#8221;,&#8221;Monday&#8221;, &#8230; &#8230; &#8221;Saturday&#8221;) <br />
　<br />
CInt() <br />
　FUNCTION: 将一个表达式转化为数字类型 <br />
　SYNTAX: CInt(expression) <br />
　ARGUMENTS: 任何有效的字符均可 <br />
　EXAMPLE: &lt;%<br />
f = &#8221;234&#8243;<br />
response.write cINT(f) + 2<br />
%&gt; <br />
　RESULT: 236<br />
转化字符&#8221;234&#8243;为数字&#8221;234&#8243;，如果字符串为空，则返回0值　 <br />
　<br />
CreateObject() <br />
　FUNCTION: 建立和返回一个已注册的ACTIVEX组件的实例。 <br />
　SYNTAX: CreateObject(objName) <br />
　ARGUMENTS: objName 是任何一个有效、已注册的ACTIVEX组件的名字. <br />
　EXAMPLE: &lt;%<br />
Set con = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
%&gt; <br />
　RESULT:　<br />
　<br />
CStr() <br />
　FUNCTION: 转化一个表达式为字符串. <br />
　SYNTAX: CStr(expression) <br />
　ARGUMENTS: expression 是任何有效的表达式。 <br />
　EXAMPLE: &lt;%<br />
s = 3 + 2<br />
response.write &#8221;The result is: &#8221; &amp; cStr(s)<br />
%&gt; <br />
　RESULT: 转化数字“5”为字符“5”。 <br />
　<br />
Date() <br />
　FUNCTION: 返回当前系统日期. <br />
　SYNTAX: Date() <br />
　ARGUMENTS: None. <br />
　EXAMPLE: &lt;%=Date%&gt; <br />
　RESULT: 8/4/99 <br />
　<br />
DateAdd() <br />
　FUNCTION: 返回一个被改变了的日期。 <br />
　SYNTAX: DateAdd(timeinterval,number,date) <br />
　ARGUMENTS: timeinterval is the time interval to add; number is amount of <br />
time intervals to add; and date is the starting date. <br />
　EXAMPLE: &lt;%<br />
currentDate = #8/4/99#<br />
newDate = DateAdd(&#8220;m&#8221;,3,currentDate)<br />
response.write newDate<br />
%&gt;</p>
<p>&lt;%<br />
currentDate = #12:34:45 PM#<br />
newDate = DateAdd(&#8220;h&#8221;,3,currentDate)<br />
response.write newDate<br />
%&gt; <br />
　RESULT: 11/4/99<br />
3:34:45 PM</p>
<p>&#8220;m&#8221; = &#8221;month&#8221;;<br />
&#8220;d&#8221; = &#8221;day&#8221;;</p>
<p>If currentDate is in time format then,<br />
&#8220;h&#8221; = &#8221;hour&#8221;; <br />
&#8220;s&#8221; = &#8221;second&#8221;; <br />
　<br />
DateDiff() <br />
　FUNCTION: 返回两个日期之间的差值 。 <br />
　SYNTAX: DateDiff(timeinterval,date1,date2 [, firstdayofweek ][, <br />
firstweekofyear]]) <br />
　ARGUMENTS: timeinterval 表示相隔时间的类型，如“M“表示“月”。 <br />
　EXAMPLE: &lt;%<br />
fromDate = #8/4/99#<br />
toDate = #1/1/2000#<br />
response.write &#8221;There are &#8221; &amp; _<br />
　 DateDiff(&#8220;d&#8221;,fromDate,toDate) &amp; _<br />
　 &#8221; days to millenium from 8/4/99.&#8221;<br />
%&gt; <br />
　RESULT: 从8/4/99 到2000年还有 150 天. <br />
　<br />
Day() <br />
　FUNCTION: 返回一个月的第几日　. <br />
　SYNTAX: Day(date) <br />
　ARGUMENTS: date 是任何有效的日期。　<br />
　EXAMPLE: &lt;%=Day(#8/4/99#)%&gt; <br />
　RESULT: 4 <br />
　<br />
FormatCurrency() <br />
　FUNCTION: 返回表达式，此表达式已被格式化为货币值　 <br />
　SYNTAX: FormatCurrency(Expression [, Digit ][, LeadingDigit ][, Paren ][, <br />
GroupDigit]]]]) <br />
　ARGUMENTS:　Digit 指示小数点右侧显示位数的数值。默认值为 -1，指示使用的是<br />
计算机的区域设置; LeadingDigit 三态常数，指示是否显示小数值小数点前面的<br />
零。　<br />
　EXAMPLE: &lt;%=FormatCurrency(34.3456)%&gt; <br />
　RESULT: $34.35 <br />
　<br />
FormatDateTime() <br />
　FUNCTION: 返回表达式，此表达式已被格式化为日期或时间 <br />
　SYNTAX: FormatDateTime(Date, [, NamedFormat]) <br />
　ARGUMENTS: NamedFormat 指示所使用的日期/时间格式的数值，如果省略，则使用 <br />
vbGeneralDate. <br />
　EXAMPLE: &lt;%=FormatDateTime(&#8220;08/4/99&#8243;, vbLongDate)%&gt; <br />
　RESULT: Wednesday, August 04, 1999 <br />
　<br />
FormatNumber() <br />
　FUNCTION: 返回表达式，此表达式已被格式化为数值. <br />
　SYNTAX: FormatNumber(Expression [, Digit ][, LeadingDigit ][, Paren ][, <br />
GroupDigit]]]]) <br />
　ARGUMENTS:　Digit 指示小数点右侧显示位数的数值。默认值为 -1，指示使用的是<br />
计算机的区域设置。; LeadingDigit i指示小数点右侧显示位数的数值。默认值为 -<br />
1，指示使用的是计算机的区域设置。; Paren 指示小数点右侧显示位数的数值。默认<br />
值为 -1，指示使用的是计算机的区域设置。; GroupDigit i指示小数点右侧显示位数<br />
的数值。默认值为 -1，指示使用的是计算机的区域设置。. <br />
　EXAMPLE: &lt;%=FormatNumber(45.324567, 3)%&gt; <br />
　RESULT: 45.325 <br />
　<br />
FormatPercent() <br />
　FUNCTION: 返回表达式，此表达式已被格式化为尾随有 % 符号的百分比（乘以 <br />
100 ）。 (%) <br />
　SYNTAX: FormatPercent(Expression [, Digit ][, LeadingDigit ][, Paren ][, <br />
GroupDigit]]]]) <br />
　ARGUMENTS: 同上. <br />
　EXAMPLE: &lt;%=FormatPercent(0.45267, 3)%&gt; <br />
　RESULT: 45.267% <br />
　<br />
Hour() <br />
　FUNCTION: 以24时返回小时数. <br />
　SYNTAX: Hour(time) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%=Hour(#4:45:34 PM#)%&gt; <br />
　RESULT: 16<br />
(Hour has been converted to 24-hour system) <br />
　<br />
Instr() <br />
　FUNCTION: 返回字符或字符串在另一个字符串中第一次出现的位置. <br />
　SYNTAX: Instr([start, ] strToBeSearched, strSearchFor [, compare]) <br />
　ARGUMENTS: Start为搜索的起始值，strToBeSearched接受搜索的字符串　<br />
strSearchFor要搜索的字符.compare比较方式（详细见ASP常数） <br />
　EXAMPLE: &lt;%<br />
strText = &#8221;This is a test!!&#8221;<br />
pos = Instr(strText, &#8221;a&#8221;)<br />
response.write pos<br />
%&gt; <br />
　RESULT: 9 <br />
　<br />
InstrRev() <br />
　FUNCTION: 同上，只是从字符串的最后一个搜索起 <br />
　SYNTAX: InstrRev([start, ] strToBeSearched, strSearchFor [, compare]) <br />
　ARGUMENTS: 同上. <br />
　EXAMPLE: &lt;%<br />
strText = &#8221;This is a test!!&#8221;<br />
pos = InstrRev(strText, &#8221;s&#8221;)<br />
response.write pos<br />
%&gt; <br />
　RESULT: 13</p>
<p>　<br />
Int() <br />
　FUNCTION: 返回数值类型,不四舍五入，注意取值是不大于它的整数。 <br />
　SYNTAX: Int(number) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%=INT(32.89)%&gt;　 &lt;%=int(-3.33)%&gt;<br />
　RESULT: 32　　-4<br />
　<br />
IsArray() <br />
　FUNCTION: 判断一对象是否为数组，返回布尔值　. <br />
　SYNTAX: IsArray(name) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
strTest = &#8221;Test!&#8221;<br />
response.write IsArray(strTest)<br />
%&gt; <br />
　RESULT: False <br />
　<br />
IsDate() <br />
　FUNCTION: 判断一对象是否为日期，返回布尔值 <br />
　SYNTAX: IsDate(expression) <br />
　ARGUMENTS: expression is any valid expression. <br />
　EXAMPLE: &lt;%<br />
strTest = &#8221;8/4/99&#8243;<br />
response.write IsDate(strTest)<br />
%&gt; <br />
　RESULT: True <br />
　<br />
IsEmpty() <br />
　FUNCTION: 判断一对象是否初始化，返回布尔值. <br />
　SYNTAX: IsEmpty(expression) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
Dim i<br />
response.write IsEmpty(i)<br />
%&gt; <br />
　RESULT: True <br />
　<br />
IsNull() <br />
　FUNCTION: 判断一对象是否为空，返回布尔值. <br />
　SYNTAX: IsNull(expression) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
Dim i<br />
response.write IsNull(i)<br />
%&gt; <br />
　RESULT: False <br />
　<br />
IsNumeric() <br />
　FUNCTION: 判断一对象是否为数字，返回布尔值. <br />
　SYNTAX: IsNumeric(expression) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
i = &#8221;345&#8243;<br />
response.write IsNumeric(i)<br />
%&gt; <br />
　RESULT: True<br />
就算数字加了引号，ASP还是认为它是数字。 <br />
　<br />
IsObject() <br />
　FUNCTION: 判断一对象是否为对象，返回布尔值. <br />
　SYNTAX: IsObject(expression) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
Set con = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
response.write IsObject(con)<br />
%&gt; <br />
　RESULT: True <br />
　<br />
LBound() <br />
　FUNCTION: 返回指定数组维的最小可用下标. <br />
　SYNTAX: Lbound(arrayname [, dimension]) <br />
　ARGUMENTS: ; dimension 指明要返回哪一维下界的整数。使用 1 表示第一维，2 <br />
表示第二维，以此类推。如果省略 dimension 参数，默认值为 1. <br />
　EXAMPLE: &lt;%<br />
i = Array(&#8220;Monday&#8221;,&#8221;Tuesday&#8221;,&#8221;Wednesday&#8221;)<br />
response.write LBound(i)<br />
%&gt; <br />
　RESULT: 0 <br />
　<br />
LCase() <br />
　FUNCTION:　 返回字符串的小写形式 <br />
　SYNTAX: Lcase(string) <br />
　ARGUMENTS: string is any valid string expression. <br />
　EXAMPLE: &lt;%<br />
strTest = &#8221;This is a test!&#8221;<br />
response.write LCase(strTest)<br />
%&gt; <br />
　RESULT: this is a test! <br />
　<br />
Left() <br />
　FUNCTION: 返回字符串左边第length个字符以前的字符（含第length个字符). <br />
　SYNTAX: Left(string, length) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
strTest = &#8221;This is a test!&#8221;<br />
response.write Left(strTest, 3)<br />
%&gt; <br />
　RESULT: Thi <br />
　<br />
Len() <br />
　FUNCTION: 返回字符串的长度. <br />
　SYNTAX: Len(string | varName) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
strTest = &#8221;This is a test!&#8221;<br />
response.write Len(strTest)<br />
%&gt; <br />
　RESULT: 15 <br />
　<br />
LTrim() <br />
　FUNCTION: 去掉字符串左边的空格. <br />
　SYNTAX: LTrim(string) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
strTest = &#8221; This is a test!&#8221;<br />
response.write LTrim(strTest)<br />
%&gt; <br />
　RESULT: This is a test! <br />
　<br />
Mid() <br />
　FUNCTION: 返回特定长度的字符串(从start开始,长度为length). <br />
　SYNTAX: Mid(string, start [, length]) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
strTest = &#8221;This is a test! Today is Monday.&#8221;<br />
response.write Mid(strTest, 17, 5)<br />
%&gt; <br />
　RESULT: Today <br />
　<br />
Minute() <br />
　FUNCTION: 返回时间的分钏. <br />
　SYNTAX: Minute(time) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%=Minute(#12:45:32 PM#)%&gt; <br />
　RESULT: 45 <br />
　<br />
Month() <br />
　FUNCTION: 返回日期. <br />
　SYNTAX: Month(date) <br />
　ARGUMENTS: date is any valid date expression. <br />
　EXAMPLE: &lt;%=Month(#08/04/99#)%&gt; <br />
　RESULT: 8 <br />
　<br />
MonthName() <br />
　FUNCTION: Returns a string identifying the specified month. <br />
　SYNTAX: MonthName(month, [, Abb]) <br />
　ARGUMENTS: month is the numeric representation for a given month; Abb <br />
(optional) is a boolean value used to display month abbreviation. True <br />
will display the abbreviated month name and False (default) will not show <br />
the abbreviation. <br />
　EXAMPLE: &lt;%=MonthName(Month(#08/04/99#))%&gt; <br />
　RESULT: August <br />
　<br />
Now() <br />
　FUNCTION: Returns the current system date and time. <br />
　SYNTAX: Now() <br />
　ARGUMENTS: None <br />
　EXAMPLE: &lt;%=Now%&gt; <br />
　RESULT: 8/4/99 9:30:16 AM <br />
　<br />
Replace() <br />
　FUNCTION: Returns a string in which a specified sub-string has been <br />
replaced with another substring a specified number of times. <br />
　SYNTAX: Replace(strToBeSearched, strSearchFor, strReplaceWith [, start <br />
][, count ][, compare]]]) <br />
　ARGUMENTS: strToBeSearched is a string expression containing a sub-<br />
string to be replaced; strSearchFor is the string expression to search for <br />
within strToBeSearched; strReplaceWith is the string expression to replace <br />
sub-string strSearchFor; start (optional) is the numeric character <br />
position to begin search; count (optional) is a value indicating the <br />
comparision constant. <br />
　EXAMPLE: &lt;% <br />
strTest = &#8221;This is an apple!&#8221;<br />
response.write Replace(strTest, &#8221;apple&#8221;, &#8221;orange&#8221;)<br />
%&gt; <br />
　RESULT: This is an orange! <br />
　<br />
Right() <br />
　FUNCTION: 返回字符串右边第length个字符以前的字符（含第length个字符). <br />
　SYNTAX: Right(string, length) <br />
　ARGUMENTS: . <br />
　EXAMPLE: &lt;% <br />
strTest = &#8221;This is an test!&#8221;<br />
response.write Right(strTest, 3)<br />
%&gt; <br />
　RESULT: st! <br />
　<br />
Rnd() <br />
　FUNCTION: 产生一个随机数. <br />
　SYNTAX: Rnd [ (number) ] <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
Randomize()<br />
response.write RND()<br />
%&gt; <br />
　RESULT: 任何一个在0 到 1 之间的数 <br />
　<br />
Round() <br />
　FUNCTION: 返回按指定位数进行四舍五入的数值. <br />
　SYNTAX: Round(expression [, numRight]) <br />
　ARGUMENTS: numRight数字表明小数点右边有多少位进行四舍五入。如果省略，则 <br />
Round 函数返回整数. <br />
　EXAMPLE: &lt;%<br />
i = 32.45678<br />
response.write Round(i)<br />
%&gt; <br />
　RESULT: 32 <br />
　<br />
Rtrim() <br />
　FUNCTION: 去掉字符串右边的字符串. <br />
　SYNTAX: Rtrim(string) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
strTest = &#8221;This is a test!! &#8221;<br />
response.write RTrim(strTest)<br />
%&gt; <br />
　RESULT: This is a test!! <br />
　<br />
Second() <br />
　FUNCTION: 返回秒. <br />
　SYNTAX: Second(time) <br />
　ARGUMENTS: . <br />
　EXAMPLE: &lt;%=Second(#12:34:28 PM#)%&gt; <br />
　RESULT: 28 <br />
　<br />
StrReverse() <br />
　FUNCTION: 反排一字符串 <br />
　SYNTAX: StrReverse(string) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
strTest = &#8221;This is a test!!&#8221;<br />
response.write StrReverse(strTest)<br />
%&gt; <br />
　RESULT: !!tset a si sihT <br />
　<br />
Time() <br />
　FUNCTION: 返回系统时间. <br />
　SYNTAX: Time() <br />
　ARGUMENTS: . <br />
　EXAMPLE: &lt;%=Time%&gt; <br />
　RESULT: 9:58:28 AM <br />
　<br />
Trim() <br />
　FUNCTION: 去掉字符串左右的空格. <br />
　SYNTAX: Trim(string) <br />
　ARGUMENTS: string is any valid string expression. <br />
　EXAMPLE: &lt;%<br />
strTest = &#8221; This is a test!! &#8221;<br />
response.write Trim(strTest)<br />
%&gt; <br />
　RESULT: This is a test!! <br />
　<br />
UBound() <br />
　FUNCTION: 返回指定数组维数的最大可用下标. <br />
　SYNTAX: Ubound(arrayname [, dimension]) <br />
　ARGUMENTS: ; dimension (optional) 指定返回哪一维上界的整数。1 表示第一<br />
维，2 表示第二维，以此类推。如果省略 dimension 参数，则默认值为 1. <br />
　EXAMPLE: &lt;%<br />
i = Array(&#8220;Monday&#8221;,&#8221;Tuesday&#8221;,&#8221;Wednesday&#8221;)<br />
response.write UBound(i)<br />
%&gt; <br />
　RESULT: 2 <br />
　<br />
UCase() <br />
　FUNCTION: 返回字符串的大写形式. <br />
　SYNTAX: UCase(string) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
strTest = &#8221;This is a test!!&#8221;<br />
response.write UCase(strTest)<br />
%&gt; <br />
　RESULT: THIS IS A TEST!! <br />
　<br />
VarType() <br />
　FUNCTION: 返回指示变量子类型的值 <br />
　SYNTAX: VarType(varName) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%<br />
i = 3<br />
response.write varType(i)<br />
%&gt; <br />
　RESULT: 2(数字)详见&#8221;asp常数&#8221; <br />
　<br />
WeekDay() <br />
　FUNCTION: 返回在一周的第几天. <br />
　SYNTAX: WeekDay(date [, firstdayofweek]) <br />
　ARGUMENTS: . <br />
　EXAMPLE: &lt;%<br />
d = #8/4/99#<br />
response.write Weekday(d)<br />
%&gt; <br />
　RESULT: 4(星期三) <br />
　<br />
WeekDayName() <br />
　FUNCTION: 返回一周第几天的名字. <br />
　SYNTAX: WeekDayName(weekday [, Abb ][, firstdayofweek]]) <br />
　ARGUMENTS: Abb可选。Boolean 值，指明是否缩写表示星期各天的名称。如果省<br />
略， 默认值为 False，即不缩写星期各天的名称.firstdayofweek指明星期第一天的<br />
数值 <br />
　EXAMPLE: &lt;%<br />
d = #8/4/99#<br />
response.write WeekdayName(Weekday(d))<br />
%&gt; <br />
　RESULT: Wednesday <br />
　<br />
Year() <br />
　FUNCTION: 返回当前的年份. <br />
　SYNTAX: Year(date) <br />
　ARGUMENTS:　<br />
　EXAMPLE: &lt;%=Year(#8/4/99#)%&gt; <br />
　RESULT: 1999</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cike.org/2007/asp-function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asp中如何设计跨越域的Cookies !已实践</title>
		<link>http://blog.cike.org/2007/cookies-domain/</link>
		<comments>http://blog.cike.org/2007/cookies-domain/#comments</comments>
		<pubDate>Tue, 24 Apr 2007 01:38:54 +0000</pubDate>
		<dc:creator>cike</dc:creator>
				<category><![CDATA[后端]]></category>
		<category><![CDATA[Asp]]></category>
		<category><![CDATA[Cookies]]></category>

		<guid isPermaLink="false">http://temp.cike.org/2007/04/asp%e4%b8%ad%e5%a6%82%e4%bd%95%e8%ae%be%e8%ae%a1%e8%b7%a8%e8%b6%8a%e5%9f%9f%e7%9a%84cookies/</guid>
		<description><![CDATA[首先，我们对Cookie做一个简单的介绍，说明如何利用ASP来维护cookie。 　　Cookie是存储在客户端计算机中的一个小文件，这就意味着每当一个用户访问你的站点，你就可以秘密地在它的硬盘上放置一个包含有关信息的文件。这个文件几乎可以包含任何你打算设置的信息，包括用户信息、站点状态等等。这样的话，就有一个潜在的危险:这些信息有可能被黑客读取。为了防止这个问题的发生，一个有效的办法就是cookie只能被创建它的域所存取。这就是说:比如ytu.edu.cn只能访问ytu.edu.cn创建的co...]]></description>
			<content:encoded><![CDATA[<p>首先，我们对Cookie做一个简单的介绍，说明如何利用ASP来维护cookie。</p>
<p>　　Cookie是存储在客户端计算机中的一个小文件，这就意味着每当一个用户访问你的站点，你就可以秘密地在它的硬盘上放置一个包含有关信息的文件。这个文件几乎可以包含任何你打算设置的信息，包括用户信息、站点状态等等。这样的话，就有一个潜在的危险:这些信息有可能被黑客读取。为了防止这个问题的发生，一个有效的办法就是cookie只能被创建它的域所存取。这就是说:比如ytu.edu.cn只能访问ytu.edu.cn创建的cookie。通常来讲，这没有什么问题；但是，如果需要两个不同域上的两个不同站点共享保存在cookie中的用户信息，该如何处理呢?当然可以选择复制用户信，但是，如果你需要用户只能在一个站点上注册，并且自东成为另外一个站点的注册用户呢?或者，两个站点共享一个用户数据库，而又需要用户自动登录呢?这时候，跨越域共享cookie是最好的解决方案。<br />
　　这里，先看一些ASP处理cookie的代码，以便以后便于引用参考。</p>
<p>　</p>
<div class="code">　&#8217;创建Cookie</div>
<p>　　Response.Cookies(&#8220;MyCookie&#8221;).Expires=Date+365</p>
<p>　　Response.Cookies(&#8220;MyCookle&#8221;).Domain=&#8221;mydomaln.com&#8221;</p>
<p>　　Response.Cookies(&#8220;MyCookle&#8221;)(&#8220;Username&#8221;)=strUsername</p>
<p>　　Response.Cookies(&#8220;MyCookle&#8221;)(&#8220;Password&#8221;)=strPassword</p>
<p>　　读写cookie非常简单，上面的代码创建一个cookie并给cookie设置属性:域、过期时间，以及其他一些保存在cookie中的值。这里，strUsename，strPassword是在前面某个地方设置的变量。然后，通过下面的语句在cookie中读取。</p>
<p class="code">　　&#8217;读取Cookie</p>
<p>　　datExpDate=Request.Cookies(&#8220;MyCookie&#8221;)</p>
<p>　　strDomaln=Request.Cookies(&#8220;MyCookle&#8221;).Domain</p>
<p>　　strUsername=Request.Cookies(&#8220;MyCookle&#8221;)(&#8220;Username&#8221;)</p>
<p>　　strPassword=Request.Cookies(&#8220;MyCookie&#8221;)(&#8220;Password&#8221;)</p>
<p>　　更详细的信息，可以参考ASP的资料。</p>
<p>　　实现</p>
<p>　　简单地共享cookie的诀窍是重定向，一般过程为:</p>
<p>　　1.一个用户点击siteA.com。</p>
<p>　　2.如果用户没有siteA.com的cookie，就把用户重定向到siteB.com。</p>
<p>　　3.如果用户有siteB.com的cookie，把用户连同一个特殊的标志(将在下面解释)重定向回siteA.com，否则，只把用户重定向到siteA.com。</p>
<p>　　4.在siteA.com创建cookie。</p>
<p>　　看起来很简单，仔细分析一下:siteA.com和siteB.com共享相同的用户设置，所以，如果用户有siteB.com的cookie(已经注册)，siteA.com能够同样读取cookie、提供cookie所允许的特性。这样，访问siteA.com的用户就如同访问了siteB.com。</p>
<p>　　这个检查的环节应该在siteA.com中的文件所包含一个cookies.inc中实现。让我们看一下这段代码:</p>
<div class="code">　　l—1</div>
<p>　　&#8217;SiteA.com&#8221;检查cookie</p>
<p>　　If Request.Querystring(&#8220;Checked&#8221;)＜＞&#8221;True&#8221; then</p>
<p>　　If not Request.Cookies(&#8220;SiteA_Cookie&#8221;).Haskeys then</p>
<p>　　&#8217;重走向到siteB.com</p>
<p>　　Response.Redlrect(&#8220;http://www.siteB.com/cookie.asp&#8221;)</p>
<p>　　End if</p>
<p>　　End if</p>
<p>　　如果用户有一个siteA.com的cookie，则不需要做任何事情了；第一个if语句用来消除无限的循环。让我们看一下siteB.com上的cookie.asp文件来获得进一步的理解。</p>
<div class="code">　　1—2</div>
<p>　　&#8217;SiteB.com</p>
<p>　　&#8217;检查cookie</p>
<p>　　If not Request.Cookies(&#8220;SlteB_Cookle&#8221;).Haskeys then</p>
<p>　　&#8217;重定向到 siteA.com</p>
<p>　　Response.Redirect(&#8220;http://www.siteA.com/index.asp&#8221;&amp;&#8221;?checked=True&#8221;)</p>
<p>　　Else</p>
<p>　　&#8217;获取username</p>
<p>　　strUsername=Request.Cookies(&#8220;SiteB_Cookie&#8221;)(&#8220;Username&#8221;)</p>
<p>　　&#8217;将用户连同一个特殊的标志返回到siteA.com</p>
<p>　　Response.Redlrect(&#8220;http://www.siteA.com/index.asp&#8221;&amp;&#8221;?checked=True&#8221;&amp;&#8221;identrfer=&#8221;&amp;strUsername)</p>
<p>　　End if</p>
<p>　　如果用户在siteB.com上仍没有cookie，于是，将他送回到siteA.com，并且通过在查询语句中提供一个叫做&#8221;checkd&#8221;的参数让应用程序知道你已经检查过cookie了。否则，将用户送回到siteB.com，并退出循环。　　然而，如果用户拥有siteB.com的cookie，我们需要将用户送回siteA.com并告诉siteA.com。为此，我们在数据库中附加一个唯一的标志，username。所以，我们扩展siteA.com中的代码。</p>
<div class="code">　　l—3</div>
<p>　　&#8217;SiteA.com 　&#8230;</p>
<p>　　&#8230;</p>
<p>　　&#8217;检查标志</p>
<p>　　If Request.Querystring(&#8220;identifier&#8221;)＜＞&#8221;" then</p>
<p>　　strUsername=Request.Querystring(&#8220;identifier&#8221;)</p>
<p>　　&#8217;记录到数据库</p>
<p>　　Response.Cookies(&#8220;siteA_Cookie&#8221;).Expires=Date+365</p>
<p>　　Response.Cookies(&#8220;SiteA_Cookie&#8221;).Domain=&#8221;siteA.com&#8221;</p>
<p>　　Response.Cookies(&#8220;siteA_Cookie&#8221;)(&#8220;Username&#8221;)=strUsername</p>
<p>　　End if</p>
<p>　　最后，我们回到siteA.com。文件的第一部分(l－l)检查是否完成了cookie的检查，由于可以明显地知道已经完成(由语句中的&#8221;checked&#8221;参数表明)，进行到l—3所示的程序的第二部分。如果存在特殊的标志，我们就可以在siteA.com创建cookie。使用这个特殊的标志(在这里是username)，我们可以在任何需要的时候查询数据库。然后，设置cookie，显示页面的其他部分。如果没有指定的标志，也没必要担心，只要简单地显示页面的余下部分。</p>
<p>　　这样，毫不费力地，siteA.com拥有了和siteB.com一样的cookie。我们可以传输更多的信息而不只是一个标志，并且，将网络流量控制在最小范围内。</p>
<p>　　要注意一点，即使用户拥有siteA.com上的cookie，仍需要检查siteB.com。通常来讲，这不是必须的，也会节约时间。但是，一旦用户在siteB.com更改个人信息?这样做，会保持所有信息的同步。</p>
<p>　　Cookie环</p>
<p>　　要完成这些，我们需要两个文件:一个在原始站点服务器(siteA.com)，完成检查；一个在参考服务器(siteB.com)，验证用户。如果有一台参考服务器包含有需要的所有用户信息或cookie，就可以增加随意多的原始服务器，所需要做的就是在所有要共享cookie的服务器上增加cookie.inc文件。</p>
<p>　　也可以以相反的次序执行，例如，如果siteB.com是原始服务器，而siteA.com包含用户信息。访问过siteA.com却从未访问过siteB.com的用户也可以登录到siteA.com，并且拥有所有的曾经的设置。注意，如果拥有多个参考服务器，这样将会很使人迷惑，并且消耗过多的资源，因为必须将用户重定向到每一台参考服务器。</p>
<p>　　理论上讲，可以拥有一个所有站点都共享相同的用户的网络。最可行的方案就是建立共享cookie环。将参考服务器列表存储在一个地方（备份服务器），以便每个参考服务器可以查找并决定重定向用户的下一个站点。记住一定要通过查询字符串的意思跟踪用户是在哪个原始服务器开始。这样信息的传输非常迅速，这个环节变得越来越可行。</p>
<p>　　这里还存在一些问题，首先是反应时间。对用户而言，他们最好不知道过程是怎样的。他所需的时间依赖于siteA.com、siteB.com之间的连接，有可能会比较长，在实现cookie环时可能会更长。</p>
<p>　　再一个主要问题，就是每一个实现者大都会面对无限的重定向。这有很多原因，例如:用户的测览器不支持cookie。这就需要再设计代码来监测用户浏览器的性能。</p>
<p>　　最好，还需要注意安全问题。如果有些黑客发现了其中的诀窍，他可能会得到cookie中的信息。最简单的防范办法就是保护参考服务器，只允许原始服务器访问Cookie.asp文件。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cike.org/2007/cookies-domain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>虚拟主机实现二级域名绑定的ASP代码</title>
		<link>http://blog.cike.org/2007/vhost-domain/</link>
		<comments>http://blog.cike.org/2007/vhost-domain/#comments</comments>
		<pubDate>Fri, 20 Apr 2007 12:09:55 +0000</pubDate>
		<dc:creator>cike</dc:creator>
				<category><![CDATA[后端]]></category>
		<category><![CDATA[Asp]]></category>
		<category><![CDATA[主机]]></category>
		<category><![CDATA[域名]]></category>
		<category><![CDATA[解析]]></category>

		<guid isPermaLink="false">http://temp.cike.org/2007/04/%e4%b8%8d%e6%94%af%e6%8c%81%e6%b3%9b%e8%a7%a3%e6%9e%90%e8%99%9a%e6%8b%9f%e4%b8%bb%e6%9c%ba%e7%bb%91%e5%ae%9a%e5%a4%9a%e5%9f%9f%e5%90%8d%e7%9a%84asp%e4%bb%a3%e7%a0%81/</guid>
		<description><![CDATA[如果有有一个ASP空间，而你又想放置多个多个站点或DOMAIN，这些代码可以帮到你第一个&#60;%if Request.ServerVariables(&#34;SERVER_NAME&#34;)=&#34;www.netbei.com&#34; thenresponse.redirect &#34;zkj&#34;elseresponse.redirect &#34;i.htm&#34;end if%&#62;第二个&#60;% select case request.server...]]></description>
			<content:encoded><![CDATA[<p>如果有有一个ASP空间，而你又想放置多个多个站点或DOMAIN，这些代码可以帮到你<br />
第一个<br />
&lt;%if Request.ServerVariables(&#8220;SERVER_NAME&#8221;)=&#8221;www.netbei.com&#8221; then<br />
response.redirect &#8220;zkj&#8221;<br />
else<br />
response.redirect &#8220;i.htm&#8221;<br />
end if%&gt;</p>
<p>第二个<br />
&lt;%<br />
select case request.servervariables(&#8220;http_host&#8221;)<br />
case &#8220;www.netbei.com&#8221;<br />
Server.Transfer(&#8220;v3.htm&#8221;)<br />
case &#8220;www.aspcn.net&#8221; &#8216;2<br />
Server.Transfer(&#8220;i.htm&#8221;)<br />
case &#8220;www.netbei.cn&#8221; &#8216;3<br />
Server.Transfer(&#8220;netbei.htm&#8221;)<br />
&#8216;&#8230;&#8230; 继续添加 &#8230;&#8230;<br />
end select<br />
%&gt;</p>
<p>第三个<br />
&lt;%if instr(Request.ServerVariables<br />
(&#8220;SERVER_NAME&#8221;),&#8221;kekexi.com&#8221;)&gt;0 then 6<br />
response.redirect &#8220;index.asp&#8221;<br />
else if instr(Request.ServerVariables<br />
(&#8220;SERVER_NAME&#8221;),&#8221;4668.com&#8221;)&gt;0<br />
response.redirect &#8220;x/index.asp&#8221;<br />
else if instr(Request.ServerVariables<br />
(&#8220;SERVER_NAME&#8221;),&#8221;web315.com&#8221;)&gt;0 thenr<br />
esponse.redirect &#8220;index3.asp&#8221;<br />
end if<br />
end if<br />
end if%&gt;</p>
<p>第四个<br />
&lt;%if Request.ServerVariables(&#8220;SERVER_NAME&#8221;)=&#8221;www.netbei.com&#8221; then<br />
response.redirect &#8220;index1.asp&#8221;<br />
else if Request.ServerVariables(&#8220;SERVER_NAME&#8221;)=&#8221;<a href="http://www.cike.org">www.cike.org</a>&#8221; then<br />
response.redirect &#8220;index2.asp&#8221;<br />
else if Request.ServerVariables(&#8220;SERVER_NAME&#8221;)=&#8221;www.163.com&#8221; then<br />
response.redirect &#8220;index3.asp&#8221;<br />
end if<br />
end if<br />
end if%&gt;</p>
<p>第二种方法：<br />
 <br />
&lt;%<br />
dim domainname,result<br />
domainname=Request.ServerVariables(&#8220;SERVER_NAME&#8221;)<br />
result=right(domainname,12)<br />
if result=&#8221;my.netbei.com&#8221; then<br />
%&gt;<br />
&lt;!&#8211;#include file=mynetbei.asp &#8211;&gt;<br />
&lt;%<br />
Elseif result=&#8221;rtisancn.com&#8221; then<br />
%&gt;<br />
&lt;!&#8211;#include file=artisan.asp &#8211;&gt;<br />
&lt;%<br />
Elseif result=&#8221;gn.netbei.com&#8221; then<br />
%&gt;<br />
&lt;!&#8211;#include file=web.asp &#8211;&gt;<br />
&lt;%<br />
Elseif result=&#8221;.forwest.com&#8221; then<br />
%&gt;<br />
&lt;!&#8211;#include file=forwest_com.asp &#8211;&gt;<br />
&lt;%<br />
Else<br />
%&gt;<br />
&lt;!&#8211;#include file=netbei.asp &#8211;&gt;<br />
&lt;%<br />
End if<br />
%&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cike.org/2007/vhost-domain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP生成静态UTF-8文件</title>
		<link>http://blog.cike.org/2007/utf8-file/</link>
		<comments>http://blog.cike.org/2007/utf8-file/#comments</comments>
		<pubDate>Tue, 06 Feb 2007 02:28:08 +0000</pubDate>
		<dc:creator>cike</dc:creator>
				<category><![CDATA[后端]]></category>
		<category><![CDATA[Asp]]></category>
		<category><![CDATA[UTF-8]]></category>
		<category><![CDATA[静态]]></category>

		<guid isPermaLink="false">http://temp.cike.org/2007/02/asp%e7%94%9f%e6%88%90%e9%9d%99%e6%80%81utf-8%e6%96%87%e4%bb%b6/</guid>
		<description><![CDATA[之前用FSO生成UNI编码,+UTF-8,结果不被GOOGLE认识,浏览到时正常]]></description>
			<content:encoded><![CDATA[<p>&lt;%@ CODEPAGE=65001 %&gt;<br />
&lt;% Option Explicit %&gt;<br />
&lt;% Response.Charset=&#8221;UTF-8&#8243; %&gt;<br />
&lt;% Response.Buffer=True %&gt;<br />
&lt;%<br />
dim strFullName,strContent,strCharset,objStream<br />
strFullName=&#8221;d:\asp\blog\admin\3.asp&#8221;<br />
strContent=&#8221;test&#8221;<br />
strCharset=&#8221;utf-8&#8243;<br />
On Error Resume Next</p>
<p>Set objStream = Server.CreateObject(&#8220;ADODB.Stream&#8221;)<br />
 With objStream<br />
 .Type = 2<br />
 .Mode = 3<br />
 .Open<br />
 .Charset = strCharset<br />
 .Position = objStream.Size<br />
 .WriteText = strContent<br />
 .SaveToFile strFullName,2<br />
 .Close<br />
 End With<br />
 Set objStream = Nothing</p>
<p>%&gt;</p>
<p>之前用FSO生成UNI编码,+UTF-8,结果不被GOOGLE认识,浏览到时正常</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cike.org/2007/utf8-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
