首页 > 后端开发 > php教程 > PHP实现负载均衡下的session共用案列详解(附代码)

PHP实现负载均衡下的session共用案列详解(附代码)

php中世界最好的语言
发布: 2023-03-26 06:46:01
原创
2394 人浏览过

这次给大家带来PHP实现负载均衡下的session共用案列详解(附代码),PHP实现负载均衡下的session共用的注意事项有哪些,下面就是实战案例,一起来看一下。

首先说一下负载均衡,相信大家都知道负载均衡可以很好地解决网站大流量的问题,负载均衡就是把用户的请求分发到多态pc上进行处理,既然分发了请求那么session就要考虑好处理方法.传统情况下php会把session存入本机的暂存档内,可是这种情况下分发了之后session就丢失了,其实最简单的解决方法就是用memcache来托管,单独架设一台服务器用来作为memcache服务器(内存最好是大一点),接下来的工作就交给PHP代码来做就好了,这裡我不想修改php.ini,因为每台都改的话太累,而且我又比较懒

或许您会告诉我说直接修改一下php.ini的session存储位置就能写入memcache了,是,没错,但是这种方式却不能调用gc释放掉过期的会话,而今天我们要说的就是不但要让他托管,还得让他自动释放会话.

既然要做,那就要做到完美才行,下边是我的代码,不懂得自己看注释:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

$_ENV=array(

  'SYS'=>array(

    'Memip'=>'127.0.0.1',      //MEMCACHE的ip

    'Mempt'=>11211,       //MEMCACHE的port

    'Memtim'=>10,          //MEMCACHE的超時時間

  )

);

//托管SESSION到MEMCACHE,如果开启失败,则说明MEMCACHE没有配置正确

final class S{

  public static function open(){

  //禁止session自动开启

    session_write_close();

  ini_set('session.auto_start',0);

  //使用五十分之一的概率启动gc清理会话

  ini_set('session.gc_probability',1);

  ini_set('session.gc_pisor',50);

  ini_set('session.use_cookies',1);

  //session的寿命

  //ini_set('session.gc_maxlifetime',$_ENV['SYS']['Memtim']);

  //ini_set('session.cookie_lifetime',$_ENV['SYS']['Memtim']);

  //ini_set('session.save_handler','files');

  //ini_set('session.save_path',Run.'_tmp');

  //ini_set('session.save_handler','memcache');

  //ini_set('session.save_path','tcp://127.0.0.1:11211');

    //$_ENV['S_tim'] = ini_get('session.gc_maxlifetime');

  //建立memcache对象

  $_ENV['S_mem']=new Memcache;

  $_ENV['S_mem']->connect($_ENV['SYS']['Memip'],$_ENV['SYS']['Mempt']) or die('Memcache連接失敗!');

    return TRUE;

  }

  /**

    读取

    返回:读到的內容

  /**/

  public static function read($id){

    return $_ENV['S_mem']->get('s_'.$id);

  }

  /**

    写入

    返回:bool

  /**/

  public static function write($id,$data){

    return $_ENV['S_mem']->set('s_'.$id,$data,MEMCACHE_COMPRESSED,$_ENV['SYS']['Memtim']);

  }

  /**

    关闭

    返回:bool

  /**/

  public static function close(){

    $_ENV['S_mem']->close();

    unset($_ENV['S_mem'],$_ENV['SYS']['Memtim']);

    return TRUE;

  }

  /**

    刪除

    返回:bool

  /**/

  public static function destroy($id){

    return $_ENV['S_mem']->delete('s_'.$id);

  }

  /**

    清理

    返回:bool

  /**/

  public static function gc(){

    return TRUE;

  }

}

session_set_save_handler('S::open','S::close','S::read','S::write','S::destroy','S::gc');

$_ENV['sessionid']=(isset($_REQUEST['sessionid'])) ? trim($_REQUEST["sessionid"]) : session_id();

if($_ENV['sessionid']!=''){session_id($_ENV['sessionid']);}

session_start();

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

php-app开发接口加密使用步骤详解

php curl带有csrf-token验证模拟提交实例详解

以上是PHP实现负载均衡下的session共用案列详解(附代码)的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板