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

同一域名下不同应用如何实现Session跨应用共享?

同域名多站点Session共享解决方案

默认ASP.NET的Session机制存在三层隔离规则,所以跨独立应用无法直接读取到其他站点的Session值:

  1. Session依赖的SessionID Cookie默认路径为当前应用的虚拟目录,不同子路径的站点不会互传对应Cookie
  2. 每个独立应用默认使用随机生成的machineKey做数据加密解密,无法识别其他应用生成的加密SessionID
  3. 默认InProc(进程内)模式的Session存储在当前应用的进程内存中,不同应用的内存数据完全隔离

按以下步骤配置即可实现跨站点Session读取:

  • 第一步:统一SessionID Cookie配置
    在两个站点的web.config文件中添加相同的Cookie规则,指定Cookie作用域为根域名和根路径:

    <system.web>
      <httpCookies domain="test.com.tw" path="/" />
      <sessionState cookieName="ASP.NET_SessionId" timeout="20" />
    </system.web>
    
  • 第二步:配置完全一致的machineKey
    在两个站点web.config的system.web节点下添加相同的machineKey配置,用于统一SessionID的加密解密逻辑:

    <machineKey 
      validationKey="自行生成的32位及以上长度的十六进制随机字符串" 
      decryptionKey="自行生成的16位及以上长度的十六进制随机字符串" 
      validation="SHA1" 
      decryption="AES"
    />
    

    注意:不要使用公开的示例密钥,需自行生成符合长度要求的随机密钥,避免出现安全漏洞

  • 第三步:切换为统一的进程外Session存储
    替换默认的进程内存储方案,任选一种统一存储方式即可:

    1. ASP.NET状态服务:先开启系统自带的ASP.NET State Service服务,两个站点配置相同的状态服务连接:
    <sessionState 
      mode="StateServer"
      stateConnectionString="tcpip=127.0.0.1:42424"
      cookieless="false"
      timeout="20"
    />
    
    1. SQL Server存储:先通过aspnet_regsql.exe工具初始化Session数据库,两个站点配置相同的数据库连接:
    <sessionState 
      mode="SQLServer"
      sqlConnectionString="data source=你的数据库地址;user id=登录账号;password=登录密码"
      cookieless="false"
      timeout="20"
    />
    
    1. 分布式缓存存储:如使用Redis等分布式缓存,安装对应的Session提供组件后,两个站点配置相同的缓存连接即可。

配置完成后需重启两个站点的应用程序池,清理浏览器原有Cookie后再测试,避免旧缓存数据干扰测试结果。

内容的提问来源于stack exchange,提问作者鄭有維

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:48:05