解决asp.net负载均衡时Session共享的问题_Ubuntu_青云站长教程网
欢迎来到站长教程网!
  • 秒到短信接口 免费试用
  • 微信支付宝接口 秒结算
  • 中文网站排名|申请加入
  • 搜索引擎全站查询
  • 查询移动网站权重数据
  • 海外主机 台湾公司直销
  • Ubuntu

    当前位置:主页 > 服务器教程 > Ubuntu >

    解决asp.net负载均衡时Session共享的问题

    时间:2019-07-11|栏目:Ubuntu|点击:
  • 每个客户端在访问网站时,都会创建相应的Session,用来保存客户的状态信息,网站如果做了负载均衡,session共享是要做的,IIS对于session的存储有五种模式

    一、ASP.Net session存储方式

    1、InProc模式(进程内模式) 。为默认设置。

    会话状态存储在Web服务器上的内存中。

    2、StateServer模式(状态服务器模式)。

    会话状态存储在一个名为ASP.Net状态服务的单独进程中。这确保了在重新启动Web应用程序时会保留会话状态,并让会话状态可用于网路场中的多个Web服务器。

    3、SQL Server模式。

    会话状态存储到一个SQL Server数据库中。这确保了在重新启动Web应用程序时会保留会话状态,并让会话状态可用于网路场中的多个Web服务器。

    4、Custom模式

    此模式允许您指定自定义存储提供程序。

    5、Off模式

    此模式禁止会话状态。

    二、使用StateServer存储session

    如果网站做了负载均衡,对于session存储就只能选择2、3、4了,下面先来介绍一下StateServer模式,首先得开启状态服务

    解决asp.net负载均衡时Session共享的问题

    然后再对web站点的“会话状态”进行设置

    解决asp.net负载均衡时Session共享的问题

    启用本机的状态服务

    解决asp.net负载均衡时Session共享的问题

    会自动在web.config里生成配置文件(如果不能生成就手动添加)

    <sessionState mode=”StateServer” stateConnectionString=”tcpip=loopback:42424″ timeout=”20″ />

     

    但是这里就存在一个问题,如果每台服务器都照上面配置,各服务器的Session都存储在本机的StateServer里面,还是没有启动共享的作用,这里就需要让一台StateServer共享出来让其他服务器访问,并将Session存储到上面,运行regedit → 打开注册表 → 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters节点 → 将 AllowRemoteConnection 的键值设置成“1”(1 为允许远程电脑的连接,0 代表禁止)

    解决asp.net负载均衡时Session共享的问题

    也可以修改StateServer的端口

    解决asp.net负载均衡时Session共享的问题

    接下来将其它服务器中web.config的配置文件进行修改(sessionState指向开启了允许远程访问的StateServer)

    <sessionState mode=”StateServer” stateConnectionString=”tcpip=10.16.5.30:22222″ timeout=”20″ />

     

    用StateServer这种共享式的session存储方式不仅有安全隐患,而且像上面那台共享的StateServer只要重启服务器,所有的session都会丢失,所以这种session存储方式不是很完美,用StateServer存储sesssion比较适合单机IIS开启多进程的。

    解决asp.net负载均衡时Session共享的问题

    三、使用SQL server存储session

    要做保证安全并且不会因为重启服务器导致session丢失,那就要用sql server来存储session,ASP.NET 2.0版本后微软提供了aspnet_regsql.exe工具可以方便的配置Session数据库.该工具位于 Web 服务器上的系统根目录Microsoft.NETFramework版本号文件夹中

    cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319 aspnet_regsql.exe -ssadd -sstype c -d <Database Name> -S <SQL Server IP> -U <User Name> -P <Password> aspnet_regsql.exe -ssadd -sstype c -d ASPState -S 10.16.5.36 -U sa -P HAha789

     

    注:<Database Name>为数据库名为ASPState ,<SQL Server IP>为数据库实例名像 IBM-PC\SQLEXPRESS  (若数据库不是2005的不要写ip地址,否则会连接失败),<User Name>为sa(或与sa同等权限的),<Password> 为 sa用户名的密码会话定义成功,但是会提示在web应用中进行相应的配置,此时查看SQLServer会发现增加了数据库ASPState,但是没有表。

    在命令行下运行如下命令:aspnet_regsql.exe  -ssadd -sstype p -S <SQL Server IP> -U <User Name> -P <Password>

    aspnet_regsql.exe -ssadd -sstype p -S 10.16.5.36 -U sa -P HAha789

     

    解决asp.net负载均衡时Session共享的问题

    该命令对此应用进行了持久化操作。这时会看到ASPState数据库里面多了两张表,ASPStateTempSession就可以用来保存Session,接下来要对web站点的“会话状态”进行设置

    解决asp.net负载均衡时Session共享的问题

    上一篇:CentOS 7.5下搭建高可用的FastDFS分布式文件系统

    栏    目:Ubuntu

    下一篇:通过 CLI 管理 Jenkins Server

    本文标题:解决asp.net负载均衡时Session共享的问题

    本文地址:http://www.jh-floor.com/fuwuqijiaocheng/Ubuntu/3113.html

    您可能感兴趣的文章

    广告投放 | 联系我们 | 版权申明

    重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

    如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

    联系QQ:888888 | 邮箱:888888#qq.com(#换成@)

    Copyright © 2002-2017 青云站长教程网 版权所有 琼ICP备xxxxxxxx号