You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在本地搭建分属不同应用池的Web应用并演示跨子域Cookie共享

跨IIS应用池实现子域Cookie会话维持演示指南

一、前置准备

  • 安装IIS并启用ASP.NET 4.0相关功能
  • 修改本地hosts文件(路径:C:\Windows\System32\drivers\etc\hosts),添加两行配置:
    127.0.0.1  a.localhost
    127.0.0.1  b.localhost
    
    保存后执行命令ipconfig /flushdns刷新DNS

二、创建独立IIS应用池

  1. 打开IIS管理器,左侧导航栏展开服务器节点,右键点击「应用池」→「添加应用池」
  2. 创建第一个应用池:
    • 名称:AppPoolA
    • .NET CLR版本:选择.NET Framework v4.0.30319
    • 托管管道模式:集成
    • 点击「确定」
  3. 重复上述步骤创建第二个应用池,名称设为AppPoolB,配置与AppPoolA完全一致

三、准备演示Web应用(基于HttpCookieCollection)

创建简单的ASP.NET Web Forms应用,核心代码如下,复制到两个独立文件夹(如C:\WebApps\AppA和C:\WebApps\AppB):

1. 写Cookie页面(WriteCookie.aspx)

<%@ Page Language="C#" %>
<!DOCTYPE html>
<html>
<head><title>写入Cookie</title></head>
<body>
    <form runat="server">
        <asp:TextBox ID="txtUsername" runat="server" placeholder="输入用户名"></asp:TextBox>
        <asp:Button ID="btnSetCookie" runat="server" Text="设置Cookie" OnClick="btnSetCookie_Click" />
    </form>
</body>
</html>

<script runat="server">
    protected void btnSetCookie_Click(object sender, EventArgs e)
    {
        HttpCookie userCookie = new HttpCookie("UserSession");
        userCookie["Username"] = txtUsername.Text;
        userCookie.Domain = ".localhost"; // 关键:设置为父域,允许子域共享
        userCookie.Path = "/"; // 确保整个域名路径可访问
        userCookie.Expires = DateTime.Now.AddHours(1);
        Response.Cookies.Add(userCookie);
        Response.Write("Cookie已写入");
    }
</script>

2. 读Cookie页面(ReadCookie.aspx)

<%@ Page Language="C#" %>
<!DOCTYPE html>
<html>
<head><title>读取Cookie</title></head>
<body>
    <%
        HttpCookie userCookie = Request.Cookies["UserSession"];
        if (userCookie != null && !string.IsNullOrEmpty(userCookie["Username"]))
        {
            Response.Write($"当前会话用户:{userCookie["Username"]}");
        }
        else
        {
            Response.Write("未检测到共享Cookie");
        }
    %>
</body>
</html>

四、部署应用到对应应用池

  1. 在IIS管理器左侧导航栏右键点击「网站」→「添加网站」:
    • 网站名称:AppA
    • 应用池:选择AppPoolA
    • 物理路径:C:\WebApps\AppA
    • 绑定:类型选http,IP地址*,端口3000,主机名a.localhost
    • 点击「确定」
  2. 重复添加网站步骤创建AppB:
    • 网站名称:AppB
    • 应用池:选择AppPoolB
    • 物理路径:C:\WebApps\AppB
    • 绑定:端口3001,主机名b.localhost
    • 点击「确定」

五、测试跨应用池Cookie共享

  1. 浏览器访问http://a.localhost:3000/WriteCookie.aspx,输入用户名后点击「设置Cookie」
  2. 打开新标签页访问http://b.localhost:3001/ReadCookie.aspx,验证是否能显示刚才输入的用户名
  3. 若成功读取,说明跨应用池的子域Cookie会话维持生效

关键注意事项

  • 必须将Cookie的Domain设置为父域(如.localhost),不能是具体子域(a.localhost),否则其他子域无法读取
  • 两个应用必须使用独立的IIS应用池,确保进程隔离,符合演示场景
  • 若测试失败,检查IIS站点绑定的主机名是否与hosts文件一致,Cookie的Path是否为/

内容的提问来源于stack exchange,提问作者KDhyne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:20:12