ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略

asp.net UpdatePanel实现异步局部刷新

如有雷同,不胜荣欣,若转载,请注明

鉴于最近项目需要,研究了一下UpdatePanel控件的使用方法,现总结如下,可能有很多地方不足,还望大家斧正哦,此文的目的也是为了帮助UpdatePanel的初学者,也是为了给自己的学习之路留个脚印,以便自己查缺补漏,废话到此,下面直接开始

UpdatePanel局部刷新的使用

ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果。其中的UpdatePanel就是设置页面中异 步局部更新区域,它必须依赖于ScriptManager存在,因为ScriptManger控件提供了客户端脚本生成与管理UpdatePanel的功能。

ScriptManager控件重要的属性:

ScriptManager控件的EnablePartialRendering属性:true-表示实现页面的异步局部更新;false-表示实现全页面的刷新。此属性默认值为true

UpdatePanel控件重要的属性:

UpdatePanel控件的RenderMode属性:InLine,UpdatePanel控件被解析成HTML的<span>标记;Block,UpdatePanel控件被解析成HTML控件的<div>。

UpdatePanel控件的UpdateMode属性:Always,UpdatePanel页面上任何一处发生的回发操作都会产生页局部更新;Conditional,只在特定的情况下才产生页面的回发,如执行UpdatePanel控件的update()方法或在指定的触发器的操作下,UpdatePanel控件的UpdateMode默认为"Always"。

UpdatePanel控件的ChildAsTrigger属性:指示UpdatePanel内部控件引起的回发是否产生当前UpdatePanel控件的局部更新。如果UpdateMode设为Always的话,那ChildAsTrigger属性必须设为True,否则运行出错。

一、UpdatePanel内部的控件引起的回发,来更新当前UpdatePanel内部的控件内容:

1.向页面中加入ScriptManager、UpdatePanel控件和一个Label控件,ID="Label1"。

2.在UpdatePanel中加入一个Button、一个Label,ID="Label2"。

3.双击Button在事件处理程序中写入下列代码:Label2.Text = DateTime.Now.ToString();

4.在Page_Load事件中写入下列代码:Label1.Text = DateTime.Now.ToString();

5.运行页面,发现每次点击按钮都会产生异步局步刷新,只有Label2的内容发生更改,页面上的Label1时间没有发生更改。

代码如下:

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

<asp:ScriptManager ID="ScriptManager1" runat="server">

</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="True">

<ContentTemplate>

<asp:Label ID="Label2" runat="server"></asp:Label>

<br />

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

</ContentTemplate>

</asp:UpdatePanel>

后台代码:

protected void Button1_Click(object sender, EventArgs e)

{

Label2.Text = DateTime.Now.ToString(); ;

}

protected void Page_Load(object sender, EventArgs e)

{

Label1.Text = DateTime.Now.ToString();

}

注意:此时的ScriptManager的EnablePartialRendering属性应设为true(默认即为true)。UpdatePanel的UpdateMode属性应设为Always(默认即为Always)。ChildAsTrigger属性应设为true(默认即为true)。

二、UpdatePanel控件外部的控件引起的回发,来异步更新UpdatePanel内部的内容

虽然上面的方式能够实现很简单地异步局部更新的功能,但就性能方面考虑,我们应当只将数据确实会发生变化的控件摆放在UpdatePanel中,这就可能会出现引起回发的控件不在UpdatePanel内的情况。这个时候我们有两种方式实现这种效果。

A.在Page_Load方法中用ScriptManager1.RegisterAsyncPostBackControl()来注册一下要实现异步更新的控件。

B.用触发器来实现。

1、ScriptManager1.RegisterAsyncPostBackControl()注册的控件可以实现对所有的UpdatePanel控件的异步更新。

如:ScriptManager1.RegisterAsyncPostBackControl(this.Button2);实现对Button2的注册,那此时Button2的回发就变成一个异步回发(页面不会刷新),它会导致页面上所有的UpdatePanel的内容的更新。

注意:此时的ScriptManager的EnablePartialRendering属性应设为true。UpdatePanel的UpdateMode属性应设为Always。

2、ScriptManager1.RegisterAsyncPostBackControl()注册的控件可以实现针对特定UpdatePanel控件的异步更新。

a.把页面上所有的UpdatePanel控件的UpdateMode设为Conditional。

b.ScriptManager1.RegisterAsyncPostBackControl(this.Button2);实现对Button2的注册。

c.在Button2控件的Click事件中后面加入后面的代码:UpdatePanel1.Update();

这样Button2按钮只对UpdatePanel1控件实现的异步的局部刷新。

注意:这里的UpdatePanel的属性要设为Conditional,如果这里多个UpdatePanel控件都设置为Always的话,所有的UpdatePanel都不会出现刷新的效果。

如果将其中Button2事件代码UpdatePanel1.Update()对应的UpdatePanel设置为Conditional时,则多个UpdatePanel都会出现刷新的效果,要实现多个UpdatePanel中

其中一个实现更新效果的话,需要将UpdatePanel的UpdateMode都设置为Conditional才可以

3、触发器

如果页面上有多个UpdatePanel控件,如果要实现外部的控件的回发引发指定的UpdatePanel更新的话,那应当要为实现刷新的UpdatePanel控件建立一个触发器。

a.选中要进行局部更新的UpdatePanel控件。

b.在其属性页中点击Triggers集合属性右边的小按钮。

c.在弹出的对话框中的成员列表中添加一个AsyncPostBackTriggers成员。

d.指定AsyncPostBackTriggers成员的ControlID和EventName,即引发异步回送的控件的ID和该控件的事件。

完成以上步骤后,切换到HTML页面就会出现下列代码:

<asp:UpdatePanel ID="UpdatePanel2" runat="server" RenderMode="Inline" UpdateMode="Conditional">

<ContentTemplate>

<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>

</ContentTemplate>

<Triggers>

<asp:AsyncPostBackTrigger ControlID="Button2" EventName="Click" />

</Triggers>

</asp:UpdatePanel>

<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="ButtonOut" />

e.b到d的步骤可以直接在html页面中UpdatePanel控件内<ContentTemplate></ContentTemplate>之后添加

<Triggers><asp:AsyncPostBackTrigger ControlID="Button2" EventName="Click" /></Triggers>,和上面步骤产生的代码是一样的

这里需要大家注意的是:

把所有的UpdatePanel控件的UpdateMode设为"Conditional",这样才能够针对建有相关触发器的UpdatePanel更新。

一个UpdatePanel上可以建有多个触发器,实现在不同的情况下对该UpdatePanel控件内容的更新。示例如下:

<Triggers>

<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click"/>

<asp:AsyncPostBackTrigger ControlID="Button2" EventName="Click"/>

<asp:PostBackTrigger ControlID="Button3" EventName="Click"/>

</Triggers>

三、两个UpdatePanel控件,其中一个UpdatePanel内的控件引发两个UpdatePanel控件的同时刷新。

a.在页面上放入两个UpdatePanel和一个ScriptManager控件。

b.在UpdatePanel1中加入一个标签Label1、一个按钮Button1 ,在UpdatePanel2中加入一个标签Label2。

c.将UpdatePanel1和UpdatePanel2两个控件的的UpdateMode属性设为"Always"

c.在Button1的Click事件中加入下面的代码:

protected void Button1_Click(object sender, EventArgs e)

{

Label1.Text = DateTime.Now.ToString();

Label2.Text = DateTime.Now.ToString();

}

d.或者只在Page_Load事件中填写如下代码即可

protected void Page_Load(object sender, EventArgs e)

{

Label1.Text = DateTime.Now.ToString();

Label2.Text = DateTime.Now.ToString();

}

四、两个UpdatePanel控件,其中一个UpdatePanel内的控件引发当前的UpdatePanel控件的刷新,而另一个不刷新。

a.步骤和上面的(三)一样

b.要把UpdatePanel1和UpdatePanel2两个控件的UpdateMode属性设为Conditional,这里需要注意,如果将一个设置为Conditional,一个设置为Always则两个都会刷新的

<asp:ScriptManager ID="ScriptManager1" runat="server">

</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">

<ContentTemplate>

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

<br />

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click1" Text="更新两个UpdatePanel" />

</ContentTemplate>

</asp:UpdatePanel>

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">

<ContentTemplate>

<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>

</ContentTemplate>

</asp:UpdatePanel>

五、两个UpdatePanel控件,其中一个UpdatePanel内的控件引发另一个UpdatePanel控件的刷新,而本身不刷新。

a.步骤和上面的(四)一样(两个都设置为Conditional)之后,还需要

b.把UpdatePanel1和UpdatePanel2的ChildrenAsTriggers属性设为false

c.在UpdatePanel2控件中加入一个触发器,触发源设到UpdatePanel1控件内的Button1的Click事件上。

<asp:ScriptManager ID="ScriptManager1" runat="server">

</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">

<ContentTemplate>

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

<br />

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click1" Text="只更新UpdatePane2" />

</ContentTemplate>

</asp:UpdatePanel>

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">

<ContentTemplate>

<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>

</ContentTemplate>

<Triggers>

<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />

</Triggers>

</asp:UpdatePanel>

在开发过程中难免会用到UpdatePanel控件的一些复杂的使用。

如:UpdatePanel控件的嵌套、在母版页中使用UpdatePanel、在用户控件中使用UpdatePanel以及在GridView中使用UpdatePanel等。

其实这些操作也免不了对UpdatePanel控件的UpdateMode属性、ChildrenAsTrigger属性以及触发器的使用,下面是系统地说明。

一、两个嵌套的UpdatePanel控件,外部的UpdatePanel内的控件回发引发二者同时更新

在页面上放一个ScriptManager和UpdatePanel控件(UpdatePanel1),在UpdatePanel1中放入一个标签控件 (lb1)、一个按钮(Button1)和另一个UpdatePanel控件(UpdatePanel2),在UpdatePanel2控件中放一 个标签控件lb2。

<asp:ScriptManager ID="ScriptManager1" runat="server">

</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">

<ContentTemplate>

<asp:Label ID="lb1" runat="server"></asp:Label>

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click2" Text="Button" />

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">

<ContentTemplate>

<asp:Label ID="lb2" runat="server"></asp:Label>

</ContentTemplate>

</asp:UpdatePanel>

</ContentTemplate>

</asp:UpdatePanel>

在Button1控件中的Click事件中加入下面的代码:

protected void Button1_Click2(object sender, EventArgs e)

{

lblIn.Text = DateTime.Now.ToString();

lblOut.Text = DateTime.Now.ToString();

}

要实现外部UpdatePanel内控件的回发引起内部和外部两个UpdatePanel控件的同时刷新的话,需要把两个UpdatePanel控件的 UpdateMode都设为Conditional,这样外部UpdatePanel内的控件回发会自动引起内部UpdatePanel控件的刷新。

注意:外部UpdatePanel控件的ChildrenAsTrigger属性要设为True,两个UpdatePanel控件的UpdateMode要都设为 Conditional,如果UpdateMode设为Always的话也会出现两个UpdatePanel同时刷新的效果,这样会导致页面上其它的 UpdatePanel控件也发生刷新。

二、两个嵌套的UpdatePanel控件,内部的UpdatePanel内的控件回发引发二者同时更新

在页面上放一个ScriptManager和UpdatePanel控件(UpdatePanel1),在UpdatePanel1中放入一个标签控件 (lb1)和另一个UpdatePanel控件(UpdatePanel2),在UpdatePanel2控件中放一个标签控件lb2和一个按 钮(Button1)。

<asp:ScriptManager ID="ScriptManager1" runat="server">

</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">

<ContentTemplate>

<asp:Label ID="lb1" runat="server" ></asp:Label>

<br />

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">

<ContentTemplate>

<asp:Label ID="lb2" runat="server" ></asp:Label>

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

</ContentTemplate>

</asp:UpdatePanel>

</ContentTemplate>

<Triggers>

<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />

</Triggers>

</asp:UpdatePanel>

在按钮的Click事件中和(一)中的一样。

注意:

把两个UpdatePanel控件的UpdateMode属性设为Conditional,要把内部控件ChildrenAsTrigger设为 True。但这样内部UpdatePanel内的控件只引发自身的刷新,不会引发外部的UpdatePanel控件的刷新,不会刷新外部的 UpdatePanel控件,因此我们还需要为外部UpdatePanel控件加入一个触发器,触发源指定为Button1控件的Click事件上。

三、两个嵌套的UpdatePanel控件,外部的UpdatePanel内的控件回发只引发内部控件的更新

在页面上放一个ScriptManager和UpdatePanel控件(UpdatePanel1),在UpdatePanel1中放入一个标签控件 (lb1)、一个按钮(Button1)和另一个UpdatePanel控件(UpdatePanel2),在UpdatePanel2控件中放一个标签控件lb2。

<asp:ScriptManager ID="ScriptManager1" runat="server">

</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">

<ContentTemplate>

<asp:Label ID="lb1" runat="server" ></asp:Label>

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /><br />

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">

<ContentTemplate>

<asp:Label ID="lb2" runat="server" ></asp:Label>&nbsp;

</ContentTemplate>

<Triggers>

<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />

</Triggers>

</asp:UpdatePanel>

</ContentTemplate>

</asp:UpdatePanel>

在按钮的Click事件中和(一)中的一样。

注意:

要把两个UpdatePanel控件的UpdateMode设为Conditional,把外部UpdatePanel控件的 ChildrenAsTrigger设为false。这样两个UpdatePanel控件都不会刷新,所以还要为内部的UpdatePanel控件建立触 发器,触发源指向外部UpdatePanel中的的Button1的Click事件上。

四、母版页中使用UpdatePanel控件

如果将ScriptManager控件添加在母版页上的话,那么各内容页面就没必要再添加ScriptManager控件了,只需添加UpdatePanel控件就可以了,因为母版页和内容页面将来生成的是一个页面的实例,而在一个页面上是不允许同时存在两个ScriptManager控件的。

如果ScriptManager控件没有添加在母版页上的话,那只能把ScriptManager控件添加在其中一个内容页面里。不要向每一个内容页面中添加ScriptManager控件。

1、内容页面中的UpdatePanel内的控件引起回发,只更新当前内容页面的内容。

此时按钮分别在各自的UpdatePanel控件内。

将两个内容页面内的两个UpdatePanel控件的UpdateMode设为Conditional,ChildrenAsTrigger设为True。

在按钮的Click事件中和(一)中的一样。

这样就出现各内容页的UpdatePanel内的按钮只对当前内容页起作用。

2、在母版页中的按钮引起回发,更新指定内容页的信息。

此时有两个按钮:ButtonOut在母版页中,ButtonIn在内容页面1中。

当点击ButtonOut时,异步更新两个内容页面的信息。当点击ButtonIn时,异步更新母版面中的UpdatePanel1中的信息。

母版页HTML代码如下:

<div>

母版页

3、<asp:ScriptManager ID="ScriptManager1" runat="server">

</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" RenderMode="Inline" UpdateMode="Conditional">

<ContentTemplate>

<asp:Label ID="lbl" runat="server" Text="Label"></asp:Label>

</ContentTemplate>

</asp:UpdatePanel>

<br />

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="ButtonOut" /><br />

<table width=80%>

<tr>

<td>

<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">

</asp:contentplaceholder>

</td>

<td bgcolor=maroon>

<asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server">

</asp:ContentPlaceHolder>

</td>

</tr>

</table>

<br />

内容页面的HTML代码如下:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Child.aspx.cs" Inherits="Child" Title="UpdatePanel Test Page" %>

<%@ MasterType VirtualPath="~/MasterPage.master" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">

<asp:UpdatePanel ID="UpdatePanel1" runat="server">

<ContentTemplate>

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="ButtonInner" />

</ContentTemplate>

</asp:UpdatePanel>

</asp:Content>

<asp:Content ID="Content2" runat="server" ContentPlaceHolderID="ContentPlaceHolder2">

<asp:UpdatePanel ID="UpdatePanel2" runat="server">

<ContentTemplate>

<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>

</ContentTemplate>

</asp:UpdatePanel>

</asp:Content>

母版页的CS代码如下:

protected void Page_Load(object sender, EventArgs e)

{

ScriptManager1.RegisterAsyncPostBackControl(this.Button1);

}

protected void Button1_Click(object sender, EventArgs e)

{

Label lbl1 = (Label)this.ContentPlaceHolder1.FindControl("Label1");

lbl1.Text = DateTime.Now.ToString();

Label lbl2 = (Label)this.ContentPlaceHolder2.FindControl("Label2");

lbl2.Text = DateTime.Now.ToString();

}

public string BindTitle

{

get

{

return lbl.Text;

}

set

{

lbl.Text = value;

}

}

Child孩子页面的CS代码如下:

protected void Button1_Click(object sender, EventArgs e)

{

Label1.Text = Master.BindTitle;

Master.BindTitle = "ContentPage1‘s Action";

((UpdatePanel)Master.FindControl("UpdatePanel1")).Update(); ;

}

五、用户控件中使用UpdatePanel控件

如果父页面中存在ScriptManager控件,那用户控件的页面中不应再放入ScriptManager控件了,只在用户控件中加入UpdatePanel。

其控件的回发与更新规律与使用方式与母版页一样。

自己查看资料然后总结,若发现不足之处,还请斧正,本人将非常感谢,希望共同学习,共同进步,谢谢。。。

时间: 2024-08-19 02:27:02

ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略的相关文章

在ASP.net中的UpdatePanel,弹窗失败解决办法

原文:在ASP.net中的UpdatePanel,弹窗失败解决办法 最开始我用: Response.Write("<script>alert('和哈呵呵呵呵呵呵!')</script>"); 在没有UpdatePanel时,这个有效,能够正确弹出提示窗口. 后面,页面改进,加上局部刷新后,该方式失效了.探索出新的方式: ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(),&q

【转】Asp.net中时间格式化的6种方法详细总结

1. 数据控件绑定时格式化日期方法: 代码如下: <asp:BoundColumn DataField="AddTime" HeaderText="添加时间" DataFormatString="{0:yyyy-MM-dd HH:mm}></asp:BoundColumn> <asp:BoundField DataField="AddTime" HeaderText="添加时间" Dat

asp.net中打开新窗口的多种方法(转载)

asp.net中打开新窗口的多种方法 1.Response.Redirect("XXX.aspx",true)——直接转向新的页面,原窗口被代替; 2. Response.Write("<script>window.open(XXX.aspx'',''_blank'')</script>")——原窗口保留,另外新增一个新页面; 3.Response.Write("<script>window.location=XXX.a

在ASP程序中打印Excel报表的新方法

目前,B/S模式(浏览器/服务器模式)成为企业网上首选的计算模式.由于B/S模式的特殊性,在C/S下相对较易实现的Excel报表打印功能在B/S下却成为一个难点.本人通过研究写了一个基于ASP程序的打印Excel报表的程序.本程序的特点是无须任何组件. Print.asp ------------------------------------------------ <html><title>打印Excel报表</title> <% '控制脚本语言 respon

asp.net中fileupload上传文件的方法

FileUpload 控件显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将它上载到 Web 服务器.用户通过在控件的文本框中输入本地计算机上文件的完整路径(例如,C:\MyFiles\test.txt)来指定要上载的文件.用户也可以通过单击“浏览”按钮,然后在“选择文件”对话框中定位文件来选择文件. 用户选择要上载的文件后,FileUpload 控件不会自动将该文件保存到服务器.您必须显式提供一个控件或机制,使用户能提交指定的文件.例如,可以提供一个按钮,用户单击它即可上载文件

asp.net 中日期的格式化显示的方法

在Asp.net 中经常使用日期,在不同的场合,对日期的显示方式有不同的要求,为此,自己总结了一些日期格式化的方式,仅供学习参考使用: C#格式化日期时间 DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21:25 Label2.Text = dt.ToFileTime().ToString();//127756416859912816 Label3.Text = dt.ToFileTimeUtc().

ASP.NET中使用UpdatePanel时用Response输出出现错误的解决方法

asp.net中执行到Response.write("xx");之类语句或Microsoft JScript 运行时错误: Sys.WebForms.PageRequestManagerParserErrorException: 无法分析从服务器收到的消息.之所以出现此错误,常见的原因是: 在通过调用 Response.Write() 修改响应时,将启用响应筛选器.HttpModule 或服务器跟踪.   在放置了UpdatePanel时,先在</UpdatePanel>前

ASP.NET中常用的优化性能的方法

1. 数据库访问性能优化  数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响.系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求. 连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能.因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用完

ASP.NET中身份验证的三种方法

Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活.Forms 验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端.服务端上的授权设置就可以根据不同目录对不同用户的访问授权进行控制了. 问题来了,在实际是用中我们往往需要的是基于角色,或者说基于用户组的验