ASP.NET程序网站如何在多个站点之间实现Session共享

免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

 

概述

本文主要介绍ASP.NET程序网站如何在多个站点之间实现Session共享。

 

详细信息

ASP.NET程序可参考如下几种方式进行Session共享。

  • 写客户端Cookie
    当用户登录成功以后,将网站域名、用户名、密码、Token、 Session有效时间全部采用Cookie的形式写入到客户端的Cookie里面。如果用户从一台Web服务器跨越到另一台服务器的时候,我们的程序主动去检测客户端的Cookie信息,进行判断,然后提供对应的服务。当然,如果Cookie过期,或者无效,自然就不继续为用户服务了。目前淘宝Session框架就是基于Client Cookie做开发,不见得他们就出了很大的问题。也许这是最可行的方式,可以配合Memcached来实现。
  • 服务器之间Session数据同步
    假设Web服务器A是所有用户登录的服务器,那么当用户验证登录后,Session数据就会写到A服务器里,那么就可以自己写脚本或者守护进程来自动把Session数据同步到其他Web服务器,那么当用户跳转到其他服务器的时候,Session数据就是一致的。自然就能够直接进行服务而无须再次登录了。缺点是可能会速度慢,不稳定。如果是单向同步的话,登录服务器出现问题,那么其他服务器也无法服务,当然也可以考虑双向同步的问题,目前Zookeeper可以实现。
  • 利用NFS共享Session数据
    这个方案和下面的Mysql方案类似,只是存储方式不一样。大致是有一台公共的NFS服务器(Network File Server)做共享服务器。所有的Web服务器登录的时候把Session数据写到这台服务器上,那么所有的Session数据其实都是保存在这台NFS服务器上的。不论用户访问哪台Web服务器,都要来这台服务器获取Session数据,那么就能够实现共享Session数据了。缺点是依赖性太强,如果NFS服务器异常,那么所有用户登录都会出现异常。当然,可以考虑多台NFS服务器同步的形式。这个方案都可以解决,目前Zookeeper或者Memcached也可以实现Session共享。
  • 利用Mysql数据库共享Session数据
    这个方式与NFS的方式类似,也是采用一台Mysql服务器做共享服务器,将所有的Session数据保存到Mysql服务器上,所有Web服务器都来这台Mysql服务器来获取Session数据。缺点也是依赖性太强,Mysql异常时会影响所有的Web服务器。当然,可以考虑使用多台Mysql数据库来共享Session。该方式与上一个方式类似,Memcached或者NoSQL也可以实现。

 

适用于

  • 云服务器 ECS