zoukankan      html  css  js  c++  java
  • php 高级 多台web服务器共享session的方法

    解决多台web服务器共享session的问题,至少有以下三种方法:
     
    一、将本该保存在web服务器磁盘上的session数据保存到cookie中
    即用cookie会话机制替代session会话机制,将session数据保存到客户端浏览器的cookie中,这样同一个用户访问同一网站时,无论负载均衡到哪台web服务器,都不用再去服务器请求session数据,而直接获取客户端cookie中的session数据。如此,同一个用户的登录状态就不会丢失了。
    但这样做,有三大弊端:
    1. 把session数据放到客户端的cookie中,一般都是重要数据(如用户id、昵称等),会存在安全问题,但可以将session数据加密后,再存放到cookie中,来降低安全风险。
    2. 浏览器对单个cookie的数据量大小限制为4K左右,因此会存在数据量的限制问题。
    3. 影响带宽性能,降低了页面的访问速度。在高访问量的情况下,用户每次请求时,都要将客户端cookie中的session数据发送到服务器,要占用较多的带宽,进而影响访问速度,服务器带宽成本增高。
     
    二、将本该保存在web服务器磁盘上的session数据保存到MySQL数据库中
    sessionid还是利用cookie机制存储到客户端,但session数据却存放在MySQL服务器上。(需要建立sessionid和session数据行的对应关系)
    但这样做,只适合访问量比较小的网站。如果网站的访问量比较大,对MySQL服务器会造成很大压力。因为每次用户请求页面(即使是刷新页面)都要查询MySQL数据库中的session数据表,进而判断用户的登录状态和读取用户相关信息,势必会对数据库服务器造成很大压力,这样就会降低服务器的响应速度,影响用户体验。
     
    三、将本该保存在web服务器磁盘上的session数据保存到内存数据库(memcache或redis)中
    memcache或redis是基于内存存储数据的,性能很高,尤其是高并发的情况下尤为合适。主要是因为从内存中读取数据要比从磁盘读取数据快很多。
    内存数据库还支持数据过期失效的机制,正好与session的过期机制对应,推荐使用redis内存数据库,因为它比memcache支持更多的
    数据类型,且支持内存数据备份到磁盘。
     
    这里简单说一下,后面两种方法的注意要点:
    • 如果多台web服务器对应的是不同的域名,为了保证cookie的唯一(同一个cookie在各个域名有效),需要修改php.ini文件中的session.cookie_domain
    • 由于后面两种方法,属于用户自定义的方式管理session,而非默认的文件处理方式,故需修改php.ini中的session.save_handler=user
    • 在开启session之前(即调用session_start()之前),需要先调用session_set_save_handler,关于session_set_save_handler的具体用法,请参考php手册
  • 相关阅读:
    Open source cryptocurrency exchange
    Salted Password Hashing
    95. Unique Binary Search Trees II
    714. Best Time to Buy and Sell Stock with Transaction Fee
    680. Valid Palindrome II
    Java compiler level does not match the version of the installed Java project facet.
    eclipse自动编译
    Exception in thread "main" java.lang.StackOverflowError(栈溢出)
    博客背景美化——动态雪花飘落
    java九九乘法表
  • 原文地址:https://www.cnblogs.com/zhanghanwen16/p/8515196.html
Copyright © 2011-2022 走看看