• Session 不同子域共享


    Session 不同子域共享

    1.问题:

    配置:

    <configuration>
        <appSettings>
        <add key="Domain" value=".wubaobao.com"/></appSettings></configuration><system.web>
    		<machineKey decryptionKey="FD69B2EB9A11E3063518F1932E314E4AA1577BF0B824F369" validationKey="5F32295C31223A362286DD5777916FCD0FD2A8EF882783FD3E29AB1FCDFE931F8FA45A8E468B7A40269E50A748778CBB8DB2262D44A86BBCEA96DCA46CBC05C3" validation="SHA1" decryption="Auto"/>
    		<sessionState cookieless="false" timeout="50" mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"/></system.web>

    配置同一台机子Session Web.config里面已经好了,但是该项目仍然不能共享其他域的Session

    2.解决

    参考:

    Robin99:http://www.cnblogs.com/yinhaiming/articles/1407679.html

    添加Global.asax:

    <%@ Application Language="C#" %>
    
    <script runat="server">
    
        void Application_Start(object sender, EventArgs e) 
        {
            // 在应用程序启动时运行的代码
    
        }
        
        void Application_End(object sender, EventArgs e) 
        {
            //  在应用程序关闭时运行的代码
    
        }
            
        void Application_Error(object sender, EventArgs e) 
        { 
            // 在出现未处理的错误时运行的代码
    
        }
    
        void Session_Start(object sender, EventArgs e) 
        {
            string Domain = ConfigurationManager.AppSettings["Domain"];
            // 在新会话启动时运行的代码
            foreach (string key in Context.Response.Cookies.Keys)
            {
                Context.Response.Cookies[key].Domain = Domain;  //重写子域下的Cookie.Domain 设置为与其他域相同的Domain
            }
    
        }
    
        void Session_End(object sender, EventArgs e) 
        {
            // 在会话结束时运行的代码。 
            // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
            // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
            // 或 SQLServer,则不会引发该事件。
    
        }
           
    </script>
    

    3.结语

    补充一点知识吧!(下面为网上资源)

    <sessionState> 元素

    配置当前应用程序的会话状态设置。

    配置结构的示例:

    <configuration>
       <system.web>
          <sessionState>

    <sessionState mode="Off|InProc|StateServer|SQLServer"
                  cookieless="true|false"
                  timeout="number of minutes"
                  stateConnectionString="tcpip=server:port"
                  sqlConnectionString="sql connection string"
                  stateNetworkTimeout="number of seconds"/>

    必需的属性

    属性 选项 描述
    mode   指定存储会话状态的位置。
      Off 指示会话状态没有启用。
      InProc 指示本地存储会话状态。
      StateServer 指示在远程服务器上存储会话状态。
      SQLServer 指示在 Microsoft SQL Server™ 上存储会话状态。

    可选的属性

    属性 选项 描述
    cookieless   指定是否应该使用没有 Cookie 的会话来标识客户端会话。
      true 指示应该使用没有 Cookie 的会话。
      false 指示不应使用没有 Cookie 的会话。默认值是 false
    timeout   指定会话在被放弃前处于空闲状态的分钟数。默认值是 20。
    stateConnectionString   指定远程存储会话状态所在的服务器名称和端口。例如,"tcpip=127.0.0.1:42424"。当 mode StateServer 时,需要使用此属性。
    sqlConnectionString   为 SQL Server 指定连接字符串。例如,"data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。当 modeSQLServer 时,需要使用此属性。
    stateNetworkTimeout   当使用 StateServer 模式存储会话状态时,指定在会话被放弃前 Web 服务器和状态服务器之间的 TCP/IP 网络连接处于空闲状态的秒数。默认值是 10。

    注释

    使用 StateServer 模式

    1. 确保在存储会话状态信息的远程服务器上正在运行 ASP.NET 状态服务。此服务随 ASP.NET 一起安装,并且默认位于 <Drive>:systemrootMicrosoft.NETFrameworkversionaspnet_state.exe。
    2. 在应用程序的 Web.config 文件中,设置 mode=StateServer 并设置 stateConnectionString 属性。例如,stateConnectionString="tcpip=sarath:42424"。

    使用 SQLServer 模式

    1. 在运行 SQL Server 的计算机(将存储会话状态)上运行 InstallSqlState.sql(默认安装在 <Drive>:systemrootMicrosoft.NETFrameworkversion 中)。它将使用新的存储过程和 TempDB 数据库中的 ASPStateTempApplications 和 ASPStateTempSessions 表创建一个称为 ASPState 的数据库。
    2. 在应用程序的 Web.config 文件中,设置 mode=SQLServer 并设置 sqlConnectionString 属性。例如,sqlConnectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。

    示例

    以下示例指定了几种会话状态配置设置。

    <configuration>
       <system.web>
          <sessionState mode="InProc"
                        cookieless="true"
                        timeout="20"/>
          </sessionState>
       </system.web>
    </configuration>

  • 相关阅读:
    li中下的a元素的字超出了li的宽度
    0 ‘+new Array(017)’ 输出? js+相当于Number()类型转换
    通过字体代替图片优化,如何使用Font Awesome字体图标?
    Array.prototype.slice.call()等几种将arguments对象转换成数组对象的方法
    js关于if()else{}中的判定条件的认识,各种数据类型转换为Boolean类型的转换规则
    js基本包装类型
    WordPress启用memcached动态缓存,弄了好久终于弄好了
    VsCode最实用插件集合
    Cordova--IOS打包问题汇总
    cordova--安卓打包
  • 原文地址:https://www.cnblogs.com/memaxiaofeng/p/3275470.html
Copyright © 2020-2023  润新知