在ASP中使用 Request.ServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正的客户端IP地址。要想透过代理服务器取得客户端的真实IP地址,就要使用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取。不过要注意的事,并不是每个代理服务器都能用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的IP。还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用 Request.ServerVariables ("HTTP_X_FORWARDED_FOR") 取到的值将是空的。因此,如果要在程序中使用此方法,可以这样处理:
......
userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR")
......
即:如果客户端通过代理服务器,则取 HTTP_X_FORWARDED_FOR 的值,如果没通过代理服务器,就取 REMOTE_ADDR 的值。
'通用函数:如果不能取客户端真实IP,就会取客户端的代理IP
Private Function getIP()
Dim strIPAddr
If Request.ServerVariables("HTT ......
按“F12”试试效果。
注:常用的时间函数:
now() 获取当前系统日期和时间,ASP输出可以这样写:<%=now()%>
Year(now()) 获取年份, ASP输出:<%=Year(now())%>
Month(now()) 获取当前月份,ASP输出:<%=Month(now())%>
day(now()) 获取当天数,ASP输出:<%=day(now())%>
Minute(now()) 获取分钟数,ASP输出:<%=Minute(now())%>
Second(now()) 获取秒钟数,ASP输出:<%=Second(now())%>
date() 获取当前系统日期,格式为:2004-2-28
time() 获取当前系 ......
1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键
<table border oncontextmenu=return(false)><td>no</table> 可用于Table
2. <body onselectstart="return false"> 取消选取、防止复制
3. onpaste="return false" 不准粘贴
4. oncopy="return false;" oncut="return false;" 防止复制
5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标
6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标
7. <input style="ime-mode:disabled"> 关闭输入法
8. 永远都会带着框架
<script language="javascript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页
// --></script>
9. 防止被人frame
<SCRIPT LANGUAGE=javascript><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>
10. <noscript><iframe src=*.html></iframe></noscript> 网页将不能被另存为
11. <input type=button value=查看网页源代码
......
using System.Collections;
using System.Xml;
private void LoadXml()
{
xmlDoc=new XmlDocument();
xmlDoc.Load(Server.MapPath("User.xml"));
}
//添加节点
private void AddElement()
{
LoadXml();
XmlNode xmldocSelect=xmlDoc.SelectSingleNode("user");
XmlElement el=xmlDoc.CreateElement("person"); //添加person节点
el.SetAttribute("name","风云"); //添加person节点的属性"name"
el.SetAttribute("sex","女"); //添加person节点的属性 "sex"
el.SetAttribute("age","25"); //添加person节点的属性 "age"
XmlElement xesub1=xmlDoc.CreateElement("pass"); //添加person节点的里的节点
xesub1.InnerText="123";//设置文本节点
el.AppendChild(xesub1);
XmlElement xesub2=xmlDoc.CreateElement("Address");
xesub2.InnerText="昆明";//设置文本节点
el.AppendChild(xesub2);
xmldocSelect.AppendChild(el);
xmlDoc.Save(Server.MapPath("user.xml"));
}
//修改节点
private void UpdateElement()
{
LoadXml();
XmlNodeList nodeList=xmlDoc.SelectSingleNode("user").ChildNodes;//获取bookstore节点的 ......
前台设计页面.aspx
<body>
<form id="form1" runat="server">
<div>
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" />
</div>
</form>
</body>
后台.aspx.cs文件
//引入报表空间
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Web;
using CrystalDecisions.Shared;
//
using System.Data.SqlClient;
protected void Page_Load(object sender, EventArgs e)
{
// 1.首先在项目的该网页对应的文件夹里面添加新项------选择Crystal 报表(默认名称:CrystalReport.rpt)
// 2.在次在项目的该网页对应的文件夹里面添加新项------选择添加数据集(默认为:clumn1,可修改)
// 3.在数据集(默认为:datatable1),右键点属性:添加列(默 ......
IIS给我们开放了平台,我们不再需要用复杂的socket去解析客户端的http请求,而且IIS他本身提供了一套完善的,处理海量链接的方案。
不过据我所知,很少人使用了IIS的高级功能或者使用第三方服务去优化海量链接,大部分程序员对于Web开发都是单进程模式,没有任何缓存的开发,大部分系统的处理能力都非常有限。
其实要做到处理海量链接,也不是一件容易的事。在这里我分享一下我的少许经验。IIS里面,对于站点和对于虚拟目录,都可以指定相应的应用程序池。不同的站点,不同的虚拟目录,对于不同的应用,特别是访问量巨大的,最好设置不同的应用程序池。
应用程序池很多人都可以设,但是要用好,也不是一件容易的事。在这里我重点讨论一下应用程序池的第二个选项里面的Web园。在Web园的选项里面可以将应用程序池设置成多进程,这样就可以大大提高IIS的处理能力。
Web园也的确很多人会设,但是设置了Web园之后,程序架构上出现的问题,这是我讨论的重点。由于Web程序里面的static和session这些变量是保存在进程里面的,但是进程却是应用程序的最后边界。设置了多进程的web后,static和session这些变量的值就会有可能丢失了。比如处理a页面的进程设置了一个static或者sess ......