Category Archive: ASP/ASP.net

五月 26th, 2018

HTTP 错误 500.19 – Internal Server Error
无法访问请求的页面,因为该页的相关配置数据无效。

解决办法1:注册IIS

1、“开始”->“运行”->cmd
2、输入: cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
(如果为4.0是为:C:\Windows\Microsoft.NET\Framework\v4.0.30319)
(注:.net framework安装目录,根据实际安装目录为准)
3、输入: aspnet_regiis -i

四月 30th, 2018

日志的轮转是一种日志管理策略,可以简化管理。

以/var/log/messages日志文件为例:

先分四步讲解下轮转的过程。

1.系统只有messages文件,还没有轮转

touch messages

2.第一次轮转生成messages.1

mv messages messages.1

touch messages

3.第二次轮转生成messages.2

mv messages.1 messages.2

mv messages messages.1

touch messages

4.第三次轮转生成messages.3

mv messages.2 messages.3

mv messages.1 messages.2

mv messages messages.1

toouch messages

这样日志达到一定条件就会这样不断生成新的文件,可以看出,日志的轮转其本质就是旧文件的移动和新文件的创建。

———————————————————————-

日志的轮转其主配置文件为/etc/logrotate.conf

[root@localhost ~]# cat /etc/logrotate.conf|grep -v ^# |grep -v ^$

weekly

rotate 4

create

include /etc/logrotate.d

/var/log/wtmp {

monthly

minsize 1M

create 0664 root utmp

rotate 1

}

全局配置:

weekly :表示所有日志每周进行一次轮转

rotate 4 :表示所有日志默认只保留一个旧文件

create :由于旧文件被轮转了,所以新建一个日志文件来存储日志

include /etc/logrotate.d :次配置文件所在目录

 

/var/log/wtmp为局部配置:

monthly :表示所有日志每周进行一次轮转

minsize 1M :轮转日志的最小大小

create 0664 root utmp :创建文件时,指定权限、属主和属组

rotate 1 :保留一个旧文件

这全局配置和局部配置就类似C++中类的继承。

———————————————————————-

自定义日志轮转:

自定义日志轮转前要了解下面几个命令:

需要执行的外部命令放在sharedscripts和endscript两行之间

prerotate : logrotate命令运行前执行脚本内容

postrotate:logrotate命令运行后执行脚本内容

———————————————————————-

下面说个实例:

配置/var/log/mytest.log日志文件记录所有日志,并加上高级权限a;

echo “*.info/var/log/mytest.log”>>/etc/syslog.conf

/etc/init.d/syslog restart

chattr +a /var/log/mytest.log

轮转配置

vim /etc/logrotate.d/mytest

/var/log/mytest.log{

mothly

size=10M

rotate 5

compress压缩保存

sharedscripts

prerotate

/usr/bin/chattr -a /var/log/mytest.log

endscripts

sharedscripts

postrotate

/usr/bin/kill -HUP syslog  以HUP方式从新加载服务,相当于从新读取配置文件,不改变进程id号

/usr/bin/chattr +a /var/log/mytest.log

endscripts

}

最后可以用下这个命令:

# logrotate -v /etc/logrotate.conf

测试有没有日志需要轮转-f 强制轮转

 

三月 27th, 2018

限制一个ip只能访问一次,现在将asp代码分享给大家:

<% 
'///////////////////////////////////////////////////// 
'// // 
'//作用:一个IP地址只允许访问本页一次 // 
'//引用:<!-- #include file="Check_Ip.asp" --> // 
'// // 
'///////////////////////////////////////////////////// 

'Response.Charset = 936 '设置输出编码为简体中文 
'Response.Buffer = false '关闭缓冲区 

Dim Fso,ts,IpList,Cfs 

'设置Cookies函数 
Function SetCookie() 
Response.Cookies("IsBrow") = "Brow" 
Response.Cookies("IsBrow").Expires = Date+365 
End Function 

'记录IP地址函数 
Function WriteIp(FileName, IpAddress) 
Set Fso = Server.CreateObject("Scripting.FileSystemObject") 
Set ts = Fso.OpenTextFile(Server.MapPath(FileName),8,true) 
ts.WriteLine IpAddress 
ts.Close 
Set ts = Nothing 
Set Fso = Nothing 
End Function 

'读取IP地址函数 
Function ReadIpList(FileName) 
Set Fso = Server.CreateObject("Scripting.FileSystemObject") 
If Not Fso.FileExists(Server.MapPath(FileName)) Then 
CreateFile("Iplist.txt") 
Exit Function 
End If 

Set ts = Fso.OpenTextFile(Server.MapPath(FileName)) 
Iplist = ts.ReadAll 
ts.Close 
Set ts = Nothing 
Set Fso = Nothing 
ReadIpList = Iplist 
End Function 

'创建文件函数 
Function CreateFile(FileName) 
Set Fso = Server.CreateObject("Scripting.FileSystemObject") 
Set Cfs = Fso.CreateTextFile(Server.MapPath(FileName)) 
Cfs.Close 
Set Cfs = Nothing 
Set Fso = Nothing 
End Function 

'关闭当前IE窗口函数(注:IE6下通过,其他浏览器未测试) 
Function CloseWindow() 
'Response.Write "<script>window.location='javascript:window.opener=null;window.close();'</script>" 
Response.Redirect "http://www.baidu.com" 
End Function 

Ip = Request.ServerVariables("REMOTE_ADDR") '获取浏览者IP地址 

Cookie = Request.Cookies("IsBrow") '获取当前Cookies 
'Response.Write Cookie 

If Request.ServerVariables("HTTP_X_FORWARDED_FOR") <> "" Then 
Response.Write "本站不允许使用代理访问" 
Response.End() 
Else 
If Cookie = "Brow" Then 
CloseWindow() 
Else 
If Instr(ReadIpList("Iplist.txt"),Ip) <> 0 Then 
CloseWindow() 
Else 
WriteIp "Iplist.txt" , Ip 
End If 
SetCookie() 
End If 
End If 
%>

以上就是分享给大家的asp实现代码,希望对大家的学习有所帮助。

三月 27th, 2018

在ASP中进行数据库操作时

复制代码代码如下:
rs.Open strsql,conn,1,3
while not rs.eof    //对象关闭时,不允许操作。

找了好久,最后在strsql中发现问题所在……

原因是:

这个strsql = “exec ***”,用的是存储过程,而这个***存储过程中的最后加了一句“print @sql”,导致这个问题,注释掉就OK了……

三月 23rd, 2018
之前用的是记住密码突然之间后台无法登陆了, 一直提示密码错误, 什么问题, 太让人纠结了, 求解答

所见即所得:密码错误建议修改, 因为后台无法登陆只能从数据库修改, 修改方法如下:

一个比较简单的方法就是进数据库改,找到表 dede_admin,把密码改为f297a57a5a743894a0e4,这一串是dede默认密码的加密代码,密码是admin,这样你就可以进入后台把密码改成你想要的了。

或者将数据库密码修改为123456 , 然后在进入后台修改, 修改方式

数据库的密码是经过加密的,所见并非所得。把密码改成c3949ba59abbe56e057f  密码就会初始为:123456

以上用到的操作手法, 建立在支持数据库在线管理的前提下, 如果无法直接操作数据库, 以上方法无效。

五月 30th, 2017

为什么要写这个教程呢?

主要是为了解决把网站部署在虚拟主机上的人,因为你根本不能去配置虚拟主机 所以,用下面的方法,可以实现不配置IIS而使老版本IIS运行MVC。

 

 

首先,给大家推荐2个MVC的学习好去处:

1、重典MVC视频教程:http://www.youku.com/playlist_show/id_2416830.html

2、微软官方MVC教程:http://www.asp.net/mvc/learn(英文,但是…我这样没过4级的都可以轻易看懂了…)

看本文的人必须要有MVC基础,所以很多名词我就不解释了

在老版本的IIS中架设MVC有1个条件:必须安装 Framwork 3.5,SP1不是必须的。所以如果你的虚拟主机是2.0的,那就免谈了。现在市面上一般都升级到3.5了

如果你不具备这个最简单的条件,那你的服务器也就根本不能使用MVC架构的网站了

好了,接下来介绍下我们要做的几个步骤

1、复制几个缺失的运行库到bin文件夹

老版本不能运行主要原因当然是因为缺失dll文件啦,其中最重要的是mvc核心库

前三个在C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 2中

System.Web.Mvc.dll

System.Web.Mvc.xml

Microsoft.Web.Mvc.Build.dll

下面2个是 3.5 sp1的动态链接库,去有sp1的电脑上复制下就可以了

System.Web.Routing.dll

System.Web.Abstractions.dll

2、在根目录新建Default.aspx页面,并在后台写入代码

老版本IIS会验证文件是否存在,所以必须新建一个页面,然后在写上代码就可以了

 

复制代码
1 public partial class _Default : Page
2 {
3 public void Page_Load(object sender, System.EventArgs e)
4 {
5 HttpContext.Current.RewritePath(Request.ApplicationPath);
6 IHttpHandler httpHandler = new MvcHttpHandler();
7 httpHandler.ProcessRequest(HttpContext.Current);
8 }
9 }
10
复制代码

 

3、设置Route路由表

为了充分利用mvc的新特性,强烈建议你在建设网站的时候全部采用 controller[/action][/id].aspx 这样的形式

有方括号代表可省略,但是不能只省略action而不省略id(其实可以实现,但是有限制和注意点,我这里先介绍基本的)

主参数就是id,如果有多个 http参数,就需要用显示GET传送了

controller/action/id.aspx?page=1

下面就是Global.asax文件里的Route设置

 

//默认匹配
routes.MapRoute(“NoAction”, “{controller}.aspx”, new { controller = “home”, action = “index”, id = “” });//无Action的匹配
routes.MapRoute(“NoID”, “{controller}/{action}.aspx”, new { controller = “home”, action = “index”, id = “” });//无ID的匹配
routes.MapRoute(“Default”, “{controller}/{action}/{id}.aspx”, new { controller = “home”, action = “index”, id = “” });//默认匹配
routes.MapRoute(“Root”, “”, new { controller = “home”, action = “index”, id = “” });//根目录匹配

 

这样配置后,别人访问你的网站还是想以前的asp.net一样,全部是以aspx为后缀名。

这样配置后你的虚拟主机也就不会出问题了

OK,3个步骤完成后把你的网站发布到虚拟空间吧!一般不会有问题

本网站就是用MVC架构的,下面给个下载地址,是Default文件和那5个库文件

注意一下,自己更改下Default.aspx和Default.aspx.cs文件里的命名空间,其实不改也不会出问题

TAGS:
四月 24th, 2017

    其实对于ping这个命令,我们经常会使用到,我们常常用它来检测到目的服务器的是不是联通的,还有查看域名的解析,用处还是很多的,但是原理我们可能不是很熟悉,下面是关于原理的和报文格式的介绍,可以加深我们对这个命令的理解。
    ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。在Unix/Linux,序列号从0开始计数,依次递增。而Windows ping程序的ICMP序列号是没有规律。
    ICMP协议在实际传输中数据包:20字节IP首部 + 8字节ICMP首部+ 1472字节<数据大小>38字节
    ICMP报文格式:IP首部(20字节)+8位类型+8位代码+16位校验和+(不同的类型和代码,格式也有所不同)
Ping工作过程——
假定主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,都在同一子网内,则当你在主机A上运行“Ping 192.168.1.2”后,都发生了些什么呢?
首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.1.2”一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“192.168.1.2”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并在一个映射表中查找出IP地址192.168.1.2所对应的物理地址(也叫MAC地址,熟悉网卡配置的朋友不会陌生,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
    其中映射表由ARP实现。ARP(Address Resolution Protocol)是地址解析协议,是一种将IP地址转化成物理地址的协议。ARP具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于OSI的第二层)的MAC地址。

主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。

即先由IP地址,在网络层传输,然后再根据mac地址由数据链路层传送到目的主机
ICMP——

1.IMCP协议介绍

前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。

当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。

尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下

  1. ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送)
  2. 目的地址是广播地址或多播地址的IP数据报。
  3. 作为链路层广播的数据报。
  4. 不是IP分片的第一片。
  5. 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。

虽然里面的一些规定现在还不是很明白,但是所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的。

ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:

  1. ping查询
  2. 子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)
  3. 时间戳查询(可以用来同步时间)

而差错报文则产生在数据传送发生错误的时候。就不赘述了。

2.ICMP的应用–ping

ping可以说是ICMP的最著名的应用,当我们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。一般的信息如下:

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

Ping statistics for 10.4.24.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到, ping给出来了传送的时间和TTL的数据。我给的例子不太好,因为走的路由少,有兴趣地可以ping一下国外的网站比如sf.net,就可以观察到一些 丢包的现象,而程序运行的时间也会更加的长。
ping还给我们一个看主机到目的主机的路由的机会。这是因为,ICMP的ping请求数据报在每经过一个路由器的时候,路由器都会把自己的ip放到该数 据报中。而目的主机则会把这个ip列表复制到回应icmp数据包中发回给主机。但是,无论如何,ip头所能纪录的路由列表是非常的有限。如果要观察路由, 我们还是需要使用更好的工具,就是要讲到的Traceroute(windows下面的名字叫做tracert)。

3.ICMP的应用–Traceroute

Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。

Traceroute的原理是非常非常的有意思,它受到目的主机的IP后,首先给目的主机发送一个TTL=1(还记得TTL是什么吗?)的UDP(后面就 知道UDP是什么了)数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。

有人要问,我怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较 小的端口,比如说80,比如说23,等等。而traceroute发送的是端口号>30000(真变态)的UDP报,所以到达目的主机的时候,目的 主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道,主机到了

三月 30th, 2017

Global.asa 文件是一个可选的文件,它可包含可被 ASP 应用程序中每个页面访问的对象、变量以及方法的声明。

Global.asa 文件

Global.asa 文件是一个可选的文件,它可包含可被 ASP 应用程序中每个页面访问的对象、变量以及方法的声明。所有合法的浏览器脚本都能在 Global.asa 中使用。

Global.asa 文件可包含下列内容:

  • Application 事件
  • Session 事件
  • <object> 声明
  • TypeLibrary 声明
  • #include 指令

注释:Global.asa 文件须存放于 ASP 应用程序的根目录中,且每个应用程序只能有一个 Global.asa 文件。

Global.asa 中的事件

在 Global.asa 中,我们可以告知 application 和 session 对象在启动和结束时做什么事情。完成这项任务的代码被放置在事件操作器中。Global.asa 文件能包含四种类型的事件:

Application_OnStart – 此事件会在首位用户从 ASP 应用程序调用第一个页面时发生。此事件会在 web 服务器重起或者 Global.asa 文件被编辑之后发生。”Session_OnStart” 事件会在此事件发生之后立即发生。

Session_OnStart – 此事件会在每当新用户请求他或她的在 ASP 应用程序中的首个页面时发生。

Session_OnEnd – 此事件会在每当用户结束 session 时发生。在规定的时间(默认的事件为 20 分钟)内如果没有页面被请求,session 就会结束。

Application_OnEnd – 此事件会在最后一位用户结束其 session 之后发生。典型的情况是,此事件会在 Web 服务器停止时发生。此子程序用于在应用程序停止后清除设置,比如删除记录或者向文本文件写信息。

Global.asa 文件可能类似这样:

<script language="vbscript" runat="server">

sub Application_OnStart
  'some code
end sub

sub Application_OnEnd
  'some code
end sub

sub Session_OnStart
  'some code
end sub

sub Session_OnEnd
  'some code
end sub

</script>

注释:由于无法使用 ASP 的脚本分隔符 (<% 和 %>) 在 Global.asa 文件中插入脚本,我们需使用 HTML 的 <script> 元素。

<object> 声明

可通过使用 <object> 标签在 Global.asa 文件中创建带有 session 或者 application 作用域的对象。

注释:<object> 标签应位于 <script> 标签之外。

语法:

<object runat="server" scope="scope" id="id"
{progid="progID"|classid="classID"}>
....
</object>
参数 描述
scope 设置对象的作用域(作用范围)(Session 或者 Application)。
id 为对象指定一个唯一的 id。
ProgID 与 ClassID 关联的 id。ProgID 的格式是:[Vendor.]Component[.Version]。

ProgID 或 ClassID 必需被指定。

ClassID 为 COM 类对象指定唯一的 id。

ProgID 或 ClassID 必需被指定。

实例

第一个实例创建了一个名为 “MyAd” 且使用 ProgID 参数的 session 作用域对象:

<object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator">
</object>

第二个实例创建了名为 “MyConnection” 且使用 ClassID 参数的

<object runat="server" scope="application" id="MyConnection"
classid="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
</object>

在此 Global.asa 文件中声明的这些对象可被应用程序中的任何脚本使用。

GLOBAL.ASA:

<object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator">
</object>

您可以从 ASP 应用程序中的任意页面引用此 “MyAd” 对象:

某个 .ASP 文件:

<%=MyAd.GetAdvertisement("/banners/adrot.txt")%>

TypeLibrary 声明

TypeLibrary (类型库)是一个容器,其中装有对应于 COM 对象的 DLL 文件。通过在 Global.asa 中包含对 TypeLibrary 的调用,可以访问 COM 对象的常量,同时 ASP 代码也能更好地报告错误。假如您的站点的应用程序依赖于已在类型库中声明过数据类型的 COM 对象,您可以在 Global.asa 中对类型库进行声明。

语法:

<!--METADATA TYPE="TypeLib"
file="filename"
uuid="typelibraryuuid"
version="versionnumber"
lcid="localeid"
-->
参数 描述
file 规定指向类型库的绝对路径。参数 file 或者 uuid,两者缺一不可。
uuid 规定了针对类型库的唯一的标识符。参数 file 或者 uuid,两者缺一不可。
version 可选。用于选择版本。假如没有找到指定的版本,将使用最接近的版本。
lcid 可选。用于类型库的地区标识符。

错误值

服务器会返回以下的错误消息之一:

错误 代码 描述
ASP 0222 Invalid type library specification
ASP 0223 Type library not found
ASP 0224 Type library cannot be loaded
ASP 0225 Type library cannot be wrapped

注释:METADATA 标签可位于 Global.asa 文件中的任何位置(在 <script> 标签的内外均可)。不过,我们还是推荐将 METADATA 标签放置于 Global.asa 文件的顶部。

限定

关于可以在 Global.asa 文件中引用的内容的限定:

你无法显示 Global.asa 文件中的文本。此文件无法显示信息。

你只能在 Application_OnStart 和 Application_OnEnd 子例程中使用 Server 和 Application 对象。在 Session_OnEnd 子例程中,你可以使用 Server、Application 和 Session 对象。在 Session_OnStart 子例程中,你可使用任何内建的对象。

如何使用子例程

Global.asa 常用于对变量进行初始化。

下面的例子展示如何检测访问者首次到达站点的确切时间。时间存储在名为 “started” 的 Session 对象中,并且 “started” 变量的值可被应用程序中的任何 ASP 页面访问:

<script language="vbscript" runat="server">
sub Session_OnStart
Session("started")=now()
end sub
</script>

Global.asa 也可用于控制页面访问。

下面的例子展示如何把每位新的访问者重定向到另一个页面,在这个例子中会定向到 “newpage.asp” 这个页面:

<script language="vbscript" runat="server">
sub Session_OnStart
Response.Redirect("newpage.asp")
end sub
</script>

我们还可以在 Global.asa 中包含函数。

在下面的例子中,当 Web 服务器启动时,Application_OnStart 子例程也会启动。随后,Application_OnStart 子例程会调用另一个名为 “getcustomers” 的子例程。”getcustomers” 子例程会打开一个数据库,然后从 “customers” 表中取回一个记录集。此记录集会赋值给一个数组,在不查询数据库的情况下,任何 ASP 页面都能够访问这个数组:

<script language="vbscript" runat="server">

sub Application_OnStart
getcustomers
end sub

sub getcustomers 
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"
set rs=conn.execute("select name from customers")
Application("customers")=rs.GetRows
rs.Close
conn.Close
end sub

</script>

Global.asa 实例

在这个例子中,我们要创建一个可计算当前访客的 Global.asa 文件。

Application_OnStart 设置当服务器启动时,Application 变量 “visitors” 的值为 0。

每当有新用户访问时,Session_OnStart 子例程就会给变量 “visitors” 加 1。

每当 Session_OnEnd 子例程被触发时,此子例程就会从变量 “visitors” 减 1。

Global.asa 文件:

<script language="vbscript" runat="server">

Sub Application_OnStart
Application("visitors")=0
End Sub

Sub Session_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
End Sub

Sub Session_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
End Sub

</script>

此 ASP 文件会显示当前用户的数目:

<html>
<head>
</head>
<body>
<p>There are <%response.write(Application("visitors"))%> online now!</p>
</body>
</html>
一月 9th, 2017

在 Win2008(iis 7.0)和Win2003(iis 6.0) 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击。
指定 ASP 请求的实体主体中允许大小为 200,000 (IIS6为204,800) 个字节,在 iis 6.0 之前的版本中,没有限制。

这就造成了文件上传不能超过200k,而事实上是提交数据不能超过200k,你可以发一个很长的帖子试试,也会出现这个错误。
IIS7.0的修改方法如下:
打开IIS管理器–双击“IIS”中的“ASP”– 打开“配置 ASP 应该程序的属性”–展开“限制属性”;
修改“最大请求实体主体限制”的值,默认值为200000(即不到200KB);
把它修改为你想修改的大小,如:52000000(50MB)。
修改完成点击“应用”OK!

IIS6.0的修改方法如下:
在服务里关闭iis admin service服务
找到windows\system32\inetsrv\下的MetaBase.xml,
打开,找到AspMaxRequestEntityAllowed 把他修改为需要的值,默认为204800,即200k
把它修改为51200000(50MB)
然后重启iis admin service服务
在 IIS 6.0 中,无法下载超过4M的附件时,可以按以下步骤解决:
1、先在服务里关闭 iis admin service 服务。
2、找到 windows\system32\inetsrv\ 下的 metabase.xml 文件。
3、用纯文本方式打开,找到 AspBufferingLimit 把它修改为需要的值,默认为4194304(可修改为20M即:20480000)。
4、存盘,然后重启 iis admin service 服务。

七月 29th, 2016

ASP网站首页301重定向,的就是说访问不带www的域名时不能跳转到带www的域名!

首先告诉大家,静态页面是无法实现301重定向的,也就是说代码只能加在动态页面中,下面我就告诉大家,首页加在哪个位置.

 

原本的代码是这样的:

<%

Call Main()

Call FPL_flush()

NewAsp.pageEnd()

%>

 

修改之后的代码是这样的.

if request.ServerVariables(“HTTP_HOST”)=”xxx.com” then

Response.Status=”301 Moved Permanently”

Response.AddHeader “Location”,”http://www.xxx.com/”

Response.End

end if

Call Main()

Call FPL_flush()

NewAsp.pageEnd()

 

注意:

a.代码中的网址xxx.com替换成你自己的!

b.把代码中的上下<% %>2个符号去掉 然后加在Call Main()上

 

如果你的网站默认主页是静态的index.html,就把默认主页设置成index.asp.设置完成以后,可以用工具进行查看,如果返回代码为301即为设置正确,百度一下 301重定向检测 选择工具检测即可!