文章标签 ‘ASP’
ServerVariables
ServerVariables 集合检索预定的环境变量。
语法
Request.ServerVariables (server environment variable)
asp判断页面来路是否为指定的域名,其他域名或者直接输入网址都将做跳转,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <% on error resume next Dim strComeUrl,strHosturl,strHostname strComeUrl=lcase(trim(request.ServerVariables("HTTP_REFERER"))) strHosturl=lcase(trim(request.servervariables("HTTP_HOST"))) strHosturl=split(strHosturl,".") If ubound(strHosturl)=1 Then'1级 strHostname=strHosturl(0)&chr(46)&strHosturl(1) ElseIf ubound(strHosturl)=2 Then '2级 strHostname=strHosturl(1)&chr(46)&strHosturl(2) ElseIf ubound(strHosturl)=3 Then '3级 strHostname=strHosturl(1)&chr(46)&strHosturl(2)&chr(46)&strHosturl(3) End If If instr(strComeUrl,strHostname)<1 Then response.redirect ("/") response.End End If %> |
用VB新建一个ActiveX DLL项目
工程 – 引用 – “Microsoft Active Server Pages Object”对象库
阅读全文…
现在blog程序一般都是utf-8编码的,要在网站里加入其它的程序的话,如果不是utf-8而是gb32的话,在页面转换的时候很容易出现打开的页面时乱码,经过查找资料和测试,总结出现在最好的一个方法,先了解一下基础的代码:
1 2 3 4 5 6 7 | <%@ codepage=65001%>UTF-8 <%@ codepage=936%>简体中文 <%@ codepage=950%>繁体中文 <%@ codepage=437 %>美国/加拿大英语 <%@ codepage=932 %>日文 <%@ codepage=949 %>韩文 <%@ codepage=866 %>俄文 |
codepage指定了IIS按什么编码读取传递过来的串串(表单提交,地址栏传递等)。出乱码的原因也就是网站要整合的时候模块编码不一样引起的。就像我的博客一样,整合的时候都会出这个问题,因为BLOG是Utf-8的,近来很多网友都在为这个问题咨询,我尝试了很多种方法。
最方便的方法如下:
不要转换任何模块网页的编码该utf-8的还是utf-8,该Gb22312的还是Gb2312,在Utf-8模块的包文件(如conn.asp,但是要注意conn.asp必须是在第一行调用)最前面加上
1 2 | <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <%Session.CodePage=65001%> |
在GB2312模块的包文件最前面加上
1 2 | <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <%Session.CodePage=936%> |
其他编码的类推。
记得当年asp木马出来的时候号称“永不被杀的木马”,呵呵,时至今日,随便什么杀毒软件都能将其杀得片甲不留^_^呵呵,受到木马换壳躲避杀毒软件思路影响,我们也可以给asp木马“加壳”(呵呵,当然不是用UPX等)。还等什么?请往下看。
其实这个思路很简单,就是把asp代码编码,执行时再解码。这里有两个方法,一是用微软的工具Script Encoder;二是利用asp的execute函数。
先说说Script Encoder。这个东东可以在微软官方网站免费下到,而且还附赠详细使用说明,这里就不多说了吧。但是经过它加密后的文件会有
1 | <%@ LANGUAGE = VBScript.Encode %> |
呵呵,露马脚了,管理员看到这句话就知道这个asp文件被加密了。那怎么解密呢?现在知道了吧,微软的Script Encoder不保险,所以呢,我们要自己写一个程序出来“加壳”。
asp的execute函数是拿来执行字符串的,即是说可以把asp语句写成字符串,然后用execute来执行。比如这行代码:
1 | execute("response.write(""hackerXfiles"")") |
执行后的效果等同于执行
1 | response.write("hackerXfiles") |
这里由于execute函数里的东东是字符串,故遇到引号要双写。呵呵,既然execute里是字符串,那么我们就可以把里面的东东拿来加密了。
给大家提供一个VB的加密解密程序
点击下载VB版的ASP加密解密程序ASPJM.rar
怎么加密呢?呵呵,就用最简单的移位法好了。请看ASP加密代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | but=1 cc=replace(nr,vbcrlf,"狼") for i= 1 to len(cc) if mid(cc,i,1)<>"狼" then pk=asc(mid(cc,i,1))+but if pk>126 then pk=pk-95 elseif pk<32 then pk=pk+95 end if temp=temp&chr(pk) else temp=temp&"狼" end if next temp=replace(temp,"""","""""") response.write(temp) |
这段代码就是asp下的循环移位法。那个变量but就是移位的位数,可修改。呵呵,怎么叫循环呢?因为程序会比较字符的ascii码,当大于126或者小于32时就会处理,使范围在32~126之间。因为这样可以避免出现windows不能显示的字符。这也是一开始就把回车换行符替换掉的原因。
那就让我们来看看用上面代码把
1 | response.write("hackerXfiles") |
加密后的结果:“sftqpotf/xsjuf)#ibdlfsYgjmft#*”,嘿嘿,这回神仙也看不懂了吧^_^
既然加了密,当然要解密啦,看ASP解密代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function UnEncode(temp) but=1 '这个是移位法所移的位数!注意修改此处与加密时使用的一致 for i =1 to len(temp) if mid(temp,i,1)<>"狼" then pk=asc(mid(temp,i,1))-but if pk>126 then pk=pk-95 elseif pk<32 then pk=pk+95 end if a=a&chr(pk) else a=a&vbcrlf end if next UnEncode=a end function |
呵呵,现在知道怎么执行了吧,只需调用这个解密函数就是:
1 | execute(UnEncode("sftqpotf/xsjuf)#ibdlfsYgjmft#*")) |
怎么样,是不是顺利执行了!
刚刚装的IIS居然出现了下面的错误:
Server Application Error
The server has encountered an error while loading an application during the processing of your request. Please refer to the event log for more detail information. Please contact the server administrator for assistance.
访问所有的html文件都正常,就是asp文件不能正常打开!
查看日志,日志中W3SVC出现警告错误:
服务器无法加载应用程序 '/LM/W3SVC/1/ROOT'。错误是 '没有注册类别
'。
有关此消息的详细信息,请访问 Microsoft 联机支持站点: http://www.microsoft.com/contentredirect.asp。有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
网上找了好多方法都没有解决,最后还是在微软的网站上找到了解决方法:
原文地址:http://www.microsoft.com/china/technet/community/columns/insider/iisi0305.mspx
具体方法在命令行下运行下列命令:
1 2 3 | cd %windir%\system32\inetsrv rundll32 wamreg.dll, CreateIISPackage regsvr32 asptxn.dll |
(请注意,CreateIISPackage 区分大小写。)
下面提供一些网上其他的解决方法:
1、停掉iis
2、查看iis 配置数据库密码:
第一步先修改相关文件使查看到的******变为可显示:
在c:\inetpub\adminscripts 找到adsutil.vbs (根据装系统时设定的不同,有的路径可能不一样)
用记事本打开此文件
查找 issecureproperty = true (只有一个符合字段,在一个条件语句里面)
将 issecureproperty = true 改为 issecureproperty = false
保存关闭。第二步执行查看密码命令:
开始->运行输入cmd回车 打开命令行工具
输入 cd c:\inetpub\adminscripts(进入adminscripts目录,视你机器路径而定)
获取 iwam 帐户密码命令:cscript.exe adsutil.vbs get w3svc/wamuserpass
你还可以获取 iusr 帐户密码,我没有用到
命令为:cscript.exe adsutil.vbs get w3svc/anonymoususerpass
输入以上命令,按回车可分别拿到iwam和iusr的密码。3、右键单击 我的电脑->管理,打开计算机管理界面
打开 本地用户和组->用户
右键单击 启动iis进程帐号 iwam_**** (注:****一般是计算机名)
点击设置密码,设置为刚才你得到的iwam密码。4、更改组件服务中的密码
开始->运行输入cmd回车 打开命令行工具
先输入 cd c:\inetpub\adminscripts
然后输入 cscript.exe synciwam.vbs -v系统会提示出来一大堆字符,不用管它。关闭窗口然后启动iis,报错信息应该没有了。
使用了TCP/IP,ADO及XML(需要安装Microsoft XML 4.0。)。分服务器和客户端两部分,服务器可以多用户同时连接。远程连接Access数据库有很多方法,我以前已经比较详细的回答过(见下面所列的5种方法),我现在这个例子属于其中的第3种方法(不需要使用RDS或Web服务器)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | <%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%> <!--#include file="connect.asp"--> <!--#include file="news.asp"--> <% var DataSet,sql,DataList; var i=0; var j=0; DataList=new News(); DataSet=Server.CreateObject("Adodb.recordset"); sql="select * from News where ngroup='集团新闻' order by id desc"; DataSet.Open(sql,DataConn,1,1); //是否有数据 if ((DataSet.eof)&&(DataSet.bof)) { Response.Write("<br />" ); Response.Write("=== 暂无 ==="); Response.Write("<br /><br />"); Response.End(); } //记录总数 NumRecords=DataSet.RecordCount; //设定每页最大记录数 PageSize=3; //总页数 NumPages=Math.ceil(NumRecords/PageSize); //当前页 i=Request.QueryString("CurrentPageID").Count; if (i==0) { CurrentPageID=1; } else { CurrentPageID=parseInt(Request.QueryString("CurrentPageID")); } //初始化 PreviousPageID=CurrentPageID-1; NextPageID=CurrentPageID+1; HomePage=1; EndPage=NumPages; //内容列表 DataSet.MoveFirst; DataSet.Move((CurrentPageID-1)*PageSize,1); while (!DataSet.eof && j<pageSize) { Response.Write("<a href=show.asp?id="+DataSet("id")+" target=\"_blank\">"+DataSet("subject")+"</a><br />"); j=j+1; DataSet.MoveNext; } //设定URL if (CurrentPageID == HomePage) { Response.Write("<p class='Normal'><a href=list.asp?CurrentPageID="+HomePage+">首页</a> "); Response.Write("上一页 "); Response.Write("<a href=list.asp?CurrentPageID="+NextPageID+">下一页</a> "); Response.Write("<a href=list.asp?CurrentPageID="+EndPage+">尾页</a> </p>"); } else if (CurrentPageID == EndPage) { Response.Write("<p class='Normal'><a href=list.asp?CurrentPageID="+HomePage+">首页</a> "); Response.Write("<a href=list.asp?CurrentPageID="+PreviousPageID+">上一页</a> "); Response.Write("下一页 "); Response.Write("<a href=list.asp?CurrentPageID="+EndPage+">尾页</a> </p>"); } else { Response.Write("<p class='Normal'><a href=list.asp?CurrentPageID="+HomePage+">首页</a> "); Response.Write("<a href=list.asp?CurrentPageID="+PreviousPageID+">上一页</a> "); Response.Write("<a href=list.asp?CurrentPageID="+NextPageID+">下一页</a> "); Response.Write("<a href=list.asp?CurrentPageID="+EndPage+">尾页</a> </p>"); } %> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | <html> <head> <meta NAME="AUTHOUR" Content="Clang"> <meta NAME="CreateDate" Content="2004-10-28"> <meta NAME="Keywords" Content="Clang"> <meta http-equiv=content-type content="text/html; charset=gb2312"> <script language=javascript> //'+-------------------------------------------- //'+ FileName: //'+ Created : Clang //'+ FuncDesc: 使用ASP与JAVASCRIPT配合实现多个复选框数据关联显示 //'+ www.clang.cn //'+--------------------------------------------- //第一个复选框的内容 var Clang_Array1 = new Array(); /*以下部分,可以使用ASP动态生成*/ Clang_Array1[Clang_Array1.length]=new Array('1','分类1'); //分类ID,分类名称 Clang_Array1[Clang_Array1.length]=new Array('2','分类2'); Clang_Array1[Clang_Array1.length]=new Array('3','分类3'); Clang_Array1[Clang_Array1.length]=new Array('4','分类4'); Clang_Array1[Clang_Array1.length]=new Array('5','分类5'); Clang_Array1[Clang_Array1.length]=new Array('6','分类6'); Clang_Array1[Clang_Array1.length]=new Array('7','分类7'); Clang_Array1[Clang_Array1.length]=new Array('8','分类8'); /////////////////////////////////////////////////////// //第三个复选框的内容 var Clang_Array3 = new Array(); /*以下部分,可以使用ASP动态生成*/ Clang_Array3[Clang_Array3.length]=new Array('1','1','小类1.1'); //分类ID,小类ID,小类名称 Clang_Array3[Clang_Array3.length]=new Array('1','2','小类1.2'); Clang_Array3[Clang_Array3.length]=new Array('1','3','小类1.3'); Clang_Array3[Clang_Array3.length]=new Array('2','4','小类2.4'); Clang_Array3[Clang_Array3.length]=new Array('2','5','小类2.5'); Clang_Array3[Clang_Array3.length]=new Array('2','6','小类2.6'); Clang_Array3[Clang_Array3.length]=new Array('2','7','小类2.7'); Clang_Array3[Clang_Array3.length]=new Array('3','8','小类3.8'); Clang_Array3[Clang_Array3.length]=new Array('4','9','小类4.9'); Clang_Array3[Clang_Array3.length]=new Array('4','10','小类4.10'); Clang_Array3[Clang_Array3.length]=new Array('4','11','小类4.11'); Clang_Array3[Clang_Array3.length]=new Array('4','12','小类4.12'); Clang_Array3[Clang_Array3.length]=new Array('5','13','小类5.13'); Clang_Array3[Clang_Array3.length]=new Array('5','14','小类5.14'); Clang_Array3[Clang_Array3.length]=new Array('6','15','小类6.15'); Clang_Array3[Clang_Array3.length]=new Array('6','16','小类6.16'); Clang_Array3[Clang_Array3.length]=new Array('6','17','小类6.17'); Clang_Array3[Clang_Array3.length]=new Array('6','18','小类6.18'); Clang_Array3[Clang_Array3.length]=new Array('6','19','小类6.19'); Clang_Array3[Clang_Array3.length]=new Array('7','20','小类7.20'); Clang_Array3[Clang_Array3.length]=new Array('8','21','小类8.21'); Clang_Array3[Clang_Array3.length]=new Array('8','22','小类8.22'); /////////////////////////////////////////////////////// function Clang_AddOnTo(obj,val,txt){ //增加一项 if(Clang_CheckExists(obj,val,txt)) { alert('选项已存在:['+obj.id+']'+'\n Value: '+ val+'\n Text: '+txt); return; } var opt=new Option(); opt.value=val; opt.text=txt; obj.options.add(opt,0); } function Clang_InitListObject(obj,array){//初始化列表 if(array.length){ for(var i=0;i<array.length;i++){ Clang_AddOnTo(obj,array[i][0],array[i][1]); } } else { alert('无数据'); } } function Clang_AddTo(src,obj){//往指定列表添加选项 for(var i=0;i<src.length;i++){ if(src.options[i].selected){ Clang_AddOnTo(obj,src.options[i].value,src.options[i].text); } } } function Clang_SelectAll(obj){ //选中全部选项 for(var i=0;i<obj.length;i++){ obj.options[i].selected = true; } } function Clang_ClearAll(obj){//删除全部选项 if(obj.length-1>=0){ for(var i=obj.length-1;i>=0;i--){ obj.remove(i); } } } function Clang_RemoveOne(obj){//删除选定项 for(var i=obj.length-1;i>=0;i--){ if(obj.options[i].selected){ obj.remove(i); } } } function Clang_CheckExists(obj,val,txt){//检查项是否已存在 if(obj.length<0) return false; for(var i=0;i<obj.length;i++){ if(obj.options[i].value==val && obj.options[i].text==txt) { return true; } } return false; } function Clang_ListTo(src,obj,array){//显示子类 if(array.length){ var j=0; for(var i=0;i<src.length;i++){ if(src.options[i].selected){ j+=Clang_AddSpecList(src.options[i].value,array,obj); } } alert('共发现'+j+'个小类。'); } else { alert('无数据'); } } function Clang_AddSpecList(classid,array,obj){//搜索子类 var j=0; for(var i=0;i<array.length;i++){ if(array[i][0]==classid){ Clang_AddOnTo(obj,array[i][1],array[i][2]); j++; } } return j; } </script> <style type=text/css></style> <title></title> </head> <body> <table> <tr><td colspan=4><input type=button value='初始化复选框一' onclick='Clang_InitListObject(select1,Clang_Array1)'><br /><br /> <tr><td>复选框一:<td><select multiple id=select1 size=8></select> <td><input type=button value='添加' onclick='Clang_AddTo(select1,select2)'> ==> <td>复选框二:<br /><== <input type=button value='删除' onclick='Clang_RemoveOne(select2)'> <input type=button value='全删' onclick='Clang_ClearAll(select2)'> <td><select multiple id=select2 size=8></select> <td><input type=button value='列出相关' onclick='Clang_ListTo(select2,select3,Clang_Array3)'> ==> <td>复选框三:<br /><== <input type=button value='删除' onclick='Clang_RemoveOne(select3)'> <input type=button value='全删' onclick='Clang_ClearAll(select3)'> <td><select multiple id=select3 size=8></select><br /> </table> </body> </html> |
Cookie是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个Web站点会话之间持久地保持数据。Request和Response对象都有一组Cookie。
1 | Request.cookie |
集合是一系列Cookie,从客户端与HTTP Request一起发送到Web服务器。反过来,如果你希望把Cookie发送到客户机,就可以使用
1 | Response.cookie |
1、ExpiresAbsolute属性
该属性可以赋一个日期,过了这个日期Cookie就不能再被使用了。通过给Expires属性赋一个过期的日期,就可以删除Cookie。如:
1 | <%Response.cookies("passtime").expiresAbsolute="1/1/99"%> |
2、Domain属性
该属性定义Cookie要传送的唯一域。如:Cookie只传送给Microsoft的人,则可以使用以下代码。
1 | <%Response.Cookies("domain").Domain="www.microsoft.com"%> |
3、ASP用来写入Cookie即向客户机发送Cookie的语法如下:
1 | Response.Cookie("Cookie名").[("键名").属性]=内容 |
如果某个ASP文件要创建一个Cookie,则下面的代码可以放在ASP文件的第一个<html>之前,以避免产生错误.
1 2 3 4 | <%Response.Cookies("CookieName")="NewCookie" %> <html> ...... </html> |
4、同样ASP用Request对象的Cookies集合来读取Cookie,如:
1 | <%Response.write Request.Cookies("CookieName")%> |
下面以一个完整的例子来说明Cookie:
1 2 3 4 5 6 7 8 9 10 11 12 | <% dim Num Num=Request.Cookies("Visit_num") if Num>0 then Num=Num+1 Response.write "您已是第" & Num & "次访问本站点了。" else Response.write "欢迎您首次访问本站。" Num=1 end if Response.Cookies("Visit_num")=Num %> |
在该例子中,首先读取Cookies变量Visit_num,看用户端计算机是否保存有Cookies变量。如果有该变量,则说明用户已经访问过该页面,同时输入出访问次数。如果用户是首次访问该页面,则其计算机内不会有Cookies变量,程序会显示“欢迎”字样,然后将Cookies变量Visit_num存到用户计算机中,以便该用户下一次访问该页面时给出“访问的次数”信息。
5、Cookie字典
有时在一个页面中可能需要定义很多个Cookies变量,为了更好地管理它,在Cookies组件中常引入一人的概念“子键”。引用它的语法如下:
1 | Request.Cookies("变更名")("子键名") |
如下面的Cookie创建一个名为”Dictionary”的字典,其中保存了三个键值:
1 2 3 4 5 | <% Response.Cookie("info")("Myname")="jeff" Response.Cookie("info")("Gender")="male" Response.Cookie("info")("Myheight")="172" %> |
事实上客户机上的Cookie字典是以字符串的形式存在:
1 | info=Myname=jeff&Gender=male&Myheight=172 |
如果用户没有指定“子键”名而直接引用Cookies变量,将会返回一个包含所有的“子键”名及值的字符串。例如上面这个例子包含三个“子键”:”Myname”、”Gender”和”Myheight”,当用户没有指定其“子键”而直接通过
1 | Request.Cookies("info") |
来引用时,则会得到下列字符串:
1 | info=Myname=jeff&Gender=male&Myheight=172 |
如果要把Cookie中读取的所有数据,可以用下面的代码得到:
1 2 3 4 5 6 7 8 9 10 | <%For each cookie in Request.Cookies if Not cookie.HasKeys then Response.write cookie & "=" & Request.Cookies(cookie) Else for each key in Request.Cookies(cookie) Response.write cookie&"("&key&")"&"="& Request.Cookies(cookie)(key) next end if next %> |

