HTTP请求
Request对象
Request(中文“请求”的意思):可以理解为客户端向服务器请求的信息,就是客户端向服务器请求时,把自己的浏览器信息、HTTP变量和保存在客户端的Cookie告诉服务器,这样服务器就可以根据这些信息判断是谁请求的,之前有没有请求过,对应客户端的Session是什么等等。
ASP.net的网页,如果根据用户的请求生成响应,通过Page类的Request属性可以很好的控制请求数据。在vs环境下Page.Request我们会看到返回值是一个HttpRequest对象,这个对象封装了HTTP请求信息。
数据集合 | 说明 |
QueryString | 从查询字符串中读取用户信息 |
Cookies | 获得客户端的Cookies数据 |
ServerVariables | 获得服务器端和客户端环境变量信息 |
ClientCertificate | 获得客户端身份验证 |
Browser | 获得客户端浏览器信息 |
QueryString使用:
使用QueryString获得的查询字符是指的跟在URL后的变量及值,以“?”为URL的间隔,不同变量之间用“&”号。
DEMO:点击一个页面的链接地址到下一个页面,同时传递查询字符串数据信息。
QueryString1.aspx代码:
<body>
<form id="form1" runat="server">
<div>
</div>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/QueryString2.aspx?username=橘子 &age=22">传递字符串到QueryString2页面中</asp:HyperLink>
</form>
</body>
QuseryString2.aspx.cs代码:
public partial class QueryString2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//获取从QueryString页面中传递过来查询的值。
lblMsg.Text = Request.QueryString["username"] + ",你的年龄是:" +
Request.QueryString["age"];
}
}
效果是:
ServerVariables数据集合
获取服务器端或客户端环境变量信息。
常用环境变量说明:
发送到客户端的文件长度。
发送到客户端的文件类型。
服务器端的IP地址。
客户端的IP地址。
客户端计算机名。
服务器端计算机名。
服务器端网站的端口号。
Browser 数据集合:
用于判断浏览器的类型、版本,以便我们根据不同的浏览器编写不同的网页。
常用的浏览器特性名:
浏览器类型。
浏览器版本号。
浏览器此版本号。
逻辑值,true表示支持框架功能。
逻辑值,true表示支持Cookie。
逻辑值,true表示支持JavaScript。
逻辑值,true表示支持ActiveXControl控件。
DEMO:
代码ServerVariables和Browser应用:
public partial class Request : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
lblMsg.Text = "服务器IP地址:" + Request.ServerVariables["Local_ADDR"] + "<br/>";
lblMsg.Text += "客户端IP地址:" + Request.ServerVariables["Remote_ADDR"] + "<br/>";
lblMsg.Text += "浏览器类型:" + Request.Browser["Browser"] + "<bt/>";
lblMsg.Text += "浏览器版本:" + Request.Browser["Version"] + "<br/>";
lblMsg.Text += "是否支持Cookies:" + Request.Browser["Cookies"];
}
}
显示:
HTTP响应
Response对象
Response(中文“反应、响应”的意思):可以理解为服务器对客户端请求的响应,就是服务器接收到客户端的请求后,成生页面信息、Cookie(发到客户端后就保存在客户端)等发送到客户端。通过Response对象(HttpResponse对象)控制输出的内容和方式。
常用的属性和方法:
Buffer属性:是否有缓冲区
Clear()方法:清楚缓冲区信息
End()方法;终止程序
Flush()方法:立刻输出缓冲区的网页
Redirect()方法:页面重定向。(重新寄)
Write()方法:我们经常用的,在页面输出信息。
AppendToLog()方法:自定义日志信息添加到IIS中。
DEMO:
根据不同的选择跳转到不同的页面。选择教师跳转到教师页面,选择学生跳转到学生页面。
public partial class Request_Redirect : System.Web.UI.Page
{
protected void btnSure_Click(object sender, EventArgs e)
{
//根据用户选择来重定向,加载那个页面。并在页面上显示相应的名称。
if (RdoLtState.SelectedValue == "teacher")
{
Response.Redirect("~/teacher.aspx?name=" +txtName.Text );
}
else
{
Response.Redirect("~/teacher.aspx?name=" + txtName.Text);
}
}
}
HttpServerUtility
封装了服务器端的一些操作。
常用属性和方法:
设置脚本执行的最长时间。
Execute()方法,停止执行当前网页,转到新的网页,执行完毕后返回到原网页,继续执行后面的语句。
HtmlEncode ()方法:将Html标记转换为字符实体,如将"<"转换为<
MapPath:获取页面的物理路径。
Transfar():执行当前的网页,转到新的网页执行,执行完毕后不再返回到原网页。
UrlEncode()和UrlDecode()方法。
上面提到了Response的Redirect,Server.Execute()和Server.Transfer()都能够实现网页的重定向。但是有不同的地方:
1、我们在用Response.Redirect()时,会发现我们再调转到另一个页面的时候会在浏览器中看到地址栏的变化,而Server.Execute()和Server.Transfer()我们看不到地址的变化。
当我们给为:Server.Transfer("~/teacher.aspx?name=" +txtName.Text); 通过比较可以看出:
2、Redirect()方法可重定向到同一网站的不同网页,也可以重定向到不同网站的网页。而Execute()和Transfer()则不能够。
3、Execute()会返回原网页继续执行。
Server.UrlEncode()用来处理链接地址,例如,地址中包括空格问题:代码如下
public partial class Server_UrlEncode : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//直接输出"<hr/>"浏览器将解释为一条直线。
Response.Write("Welcome to lfsfxy'信息技术提高班<hr/>");
//会将<hr/>解释成一般字符。
Response.Write(Server.HtmlEncode("Welcome to lfsfxy'信息技术提高班<hr/>") + "<br/>");
//会丢失果字,只剩下苹。
Response.Write("<a href=teacher.aspx?name=苹 果>teacher.aspx</a><br/>");
//编码后完好无缺的苹果。
Response.Write("<a href=teacher.aspx?name=" + Server.UrlEncode("苹 果") + "teacher.aspx(UrlEncode)</a>");
}
}
状态管理:
ViewState:
用户请求ASP.net时,会将ViewState封装成一个隐藏的表单传递到客户端。
Cookie:
Cookie(中文“饼干”,在这里不能这样理解了):就是保存在客户端上的一些信息,可以用来验证用户信息,提高用户响应速度等等。为何不把它理解为:我把饼干放在家里,我想吃的时候就拿出来吃。呵呵!
Cookie是保存在客户端或内存中一小段文本信息,如,站点、客户、会话等信息。我们可以通过验证Cookie值就知道用户是否已经登录。
DEMO:
protected void btnSure_Click(object sender, EventArgs e) {
//在这里为了测试我们把用户名和密码写在了程序中,实际上应该在数据库中写入。
if (txtName.Text == "hf" && txtPwd.Text == "111")
{
//实例化一个HttpCookie。
HttpCookie cookie = new HttpCookie("Name");
//设置单个cookie值。
cookie.Value = "hf";
//设置此cookie过期日期和时间。
cookie.Expires = DateTime.Now.AddDays(1);
//获取响应cookieds集合,将制定的cookie放入此集合中。
Response.Cookies.Add(cookie);
}
}
protected void Page_Load(object sender, EventArgs e)
{
//获取客户端发送cookies的集合。
if (Request.Cookies["Name"] != null)
{
//获取单个cookie值。
lblMsg.Text = Request.Cookies["Name"].Value + ",欢迎回来!";
}
else
{
Response.Redirect("~/cookiedLogin.aspx");
}
}
Session:
Session又称为回话状态,Session产生在服务器端,只能为当前访问的用户服务。以用户最后一次访问开始计时,当会话期间达到设定的时间,并且期间没有访问操作时,则回话自动结束。如果关闭浏览器的一个页面后在重新打开这个页面,则服务器会为用户产生新的Session。
在服务器端,ASP.net用一个120位的Sessio ID来标识每一个回话,若客户支持CooKie,ASP.net将会将Session的ID保存到响应的Cookie中,如果不支持的话将会保存到HTTP头信息。
我们可以再配置文件中这是SessionState模式,是禁用,进程内,独立的状态服务,SQLServer还是自定义数据存储。
Eg:
<configuration>
<system.web>
<sessionState mode="StateServer"stateConnectionString="tcpip=StateServerName:"42424"cookieless="false"timeout="90">
</sessionState>
</syste.web>
</configuration>
DEMO:
public partial class session : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["Name"] != null)
{
lblMsg.Text = Session["Name"] + ",欢饮您!";
}
else
{
Response.Redirect("~/sessionLogin.aspx");
}
}
}
public partial class sessionLogin : System.Web.UI.Page
{
protected void btnSure_Click(object sender, EventArgs e)
{
if (txtName.Text == "hf" & txtPwd.Text == "111")
{
Session["Name"] = "hf";
}
}
}
Application:
应用程序状态,网站中的每个人都可以访问,Applicate在网站运行时存在,网站关闭时将释放资源。因为Application是面向所有用户的,当要修改Application状态值时,首先要调用Application.Lock()方法锁定,修改后再调用Application.UnLock()方法解除锁定。事件代码一般放到Global.asax文件中。
统计网站在线人数为例。
当我们新建一个全局应用程序类程序,Global.asax文件,在文件中系统自动给我们生成的一些方法。
Global.asax代码:
void Application_Start(object sender, EventArgs e) {
//在应用程序启动时运行的代码
Application["VisitNumber"] = 0;
}
void Application_End(object sender, EventArgs e)
{
//在应用程序关闭时运行的代码
}
void Application_Error(object sender, EventArgs e)
{
//在出现未处理的错误时运行的代码
}
void Session_Start(object sender, EventArgs e)
{
//在新会话启动时运行的代码
if (Application["VisitNumber"] != null)
{
//锁定变量的访问。
Application.Lock();
//使得变量值加1;
Application["VisitNumber"] = (int)Application["VisitNumber"] + 1;
//取消对变量的锁定。
Application.UnLock();
}
}
void Session_End(object sender, EventArgs e)
{
//在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式
//设置为 StateServer 或 SQLServer,则不会引发该事件。
//关闭浏览器不会立即触发该事件,只有达到TimeOut设置的时间才能被触发。
if (Application["VisitNumber"] != null)
{
//锁定对变量的访问。
Application.Lock();
//会话结束时,人数减1;
Application["VisitNumber"] = (int)Application["VisitNumber"] - 1;
//取消对变量的访问。
Application.UnLock();
}
}
Applicaton.aspx代码:
public partial class Application : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//输出当前在线人数。
txtCount.Text = Application["VisitNumber"].ToString();
}
}
把网站发布后,访问网站,显示的统计人数如下所示:
控制页面的请求和响应,我们需要HTTPRequest和HttpResponse对象。HttpRequest提供了Querystring、ServerVariables、Browser、Cookies等数据集合访问不同的数据。HttpResponse提供了输出XHTML、JavaScript脚本、Cookies等功能。
为了防止SQL脚本注入,可以使用HttpServerUtility对象的HtmlEncode()方法。
页面重定向可以采用<a> HyperLink Response.Redirect() 、Server.Execute() Server.Transfer()和button类型按钮来跨网页提交。区别上文已说明。
Cookies和Session区别?网站的页面之间传递信息、保存用户信息,Cookies用于客户端较多,服务器端形式用Session Application ,Session用于单用户,Application用于所有用户。