• 会话共享


    会话共享

    1.什么是会话保持?

    简单来说就是用户登录百度网站后,然后关闭浏览器,当下次在打开百度时,会发现还是处于登录状态,这个就可以理解为是会话保持功能.

    2.为什么要做会话保持?

    http协议是无状态时,在同一个连接中,两个执行成功的请求之间是没有关系的.这就带来了一个问题,用户没有办法在同一个网站中进行连续的交互,比如在一个电商网站里,用户把某个商品加入到购物车,切换一个页面后再次添加了商品,这两次添加商品的请求之间没有关联,浏览器无法知道用户最终选择了哪些商品.

    3.会话保持实现的原理.

    1)cookie:一般存放在浏览器的Cookies中.主要存放信息(sessionID)

    2)session:一般存放在服务端.主要存放信息有:(sessionID对应的用户名,登录信息等)

    2.基于负载均衡的会话保持 session和cookie

    1.nginx ip_hash
    2.基于服务端的session共享

    1.下载phpmyadmin

    wget https://files.phpmyadmin.net/phpMyAdmin/4.8.5/phpMyAdmin-4.8.5-all-languages.zip
    unzip phpMyAdmin-4.8.4-all-languages.zip	
    	
    [root@web01 code]# cat /etc/nginx/conf.d/php.conf
    server {
    	listen 80;
    	server_name php.oldboy.com;
    	root /code/phpmyadmin;
    	
    	location / {
    		index index.php index.html;
    }
    
    	location ~ .php$ {
    		fastcgi_pass 127.0.0.1:9000;
    		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    		include fastcgi_params;
    	}
    }
    
    [root@web01 phpmyadmin]# cp config.sample.inc.php  config.inc.php
    [root@web01 phpmyadmin]# vim config.inc.php 
    /* Server parameters */
    $cfg['Servers'][$i]['host'] = '172.16.1.51';
    
    [root@web01 code]# chown -R www.www /var/lib/php/	
    
    在web02上部署
    
    scp -rp phpMyAdmin-4.8.4-all-languages 172.16.1.8:/code/
    
    scp -rp /etc/nginx/conf.d/php.conf 172.16.1.8:/etc/nginx/conf.d/
    
    ln -s /code/phpMyAdmin-4.8.4-all-languages/ /code/phpmyadmin
    
    chown -R www.www /var/lib/php/
    
    代理配置如下
    [root@lb01 conf.d]# cat proxy_php.oldboy.com.conf 
    upstream php_pools {
    	server 172.16.1.7:80;
    	server 172.16.1.8:80;
    }
    
    server {
    	listen 80;
    	server_name php.oldboy.com;
    	location / {
    		proxy_pass http://php_pools;
    		include proxy_params;
    	}
    }
    [root@lb01 conf.d]# systemctl restart nginx
    
    解决session共享问题:使用Redis
    lb01 172.16.1.5
    web01 172.16.1.7
    web02 172.16.1.8
    redis 172.16.1.51
    mysql 172.16.1.51
    

    1.在172.16.1.51服务器上安装redis,并启用redis

    yum install redis -y
    
    sed -i 's#^bind.*#bind 172.16.1.51 127.0.0.1#g' /etc/redis.conf
    
    systemctl start redis
    
    systemctl enable redis
    

    2.配置应用服务器,连接redis,将session的信息存储至redis数据库中(7 8) php->redis

    vim /etc/php.ini 
    
    session.save_handler = redis
    session.save_path = "tcp://172.16.1.51:6379"
    
    vim /etc/php-fpm.d/www.conf
    
    ;php_value[session.save_handler] = files
    ;php_value[session.save_path]    = /var/lib/php/session
    
    systemctl restart php-fpm
    
    [root@web01 code]# ll /var/lib/php/session/
    total 8
    -rw------- 1 www www 49 Jun  9 12:02 sess_39f67be9f5e28b0051a4974116abc72b
    -rw------- 1 www www 49 Jun  9 14:08 sess_f177c8cbff71809b00e77bfcc8ab6d49
    
    [root@web01 code]# rm -f /var/lib/php/session/*
    刷新一下网站
    [root@web01 code]# ll /var/lib/php/session/
    total 0
    到redis查看
    
    查看内存数据库信息
    [root@db01 ~]# redis-cli 
    127.0.0.1:6379> keys *
    1) "PHPREDIS_SESSION:2a3b1db62803ee562236be8f1c7e5665"
    127.0.0.1:6379> 
    
  • 相关阅读:
    putty配置
    BroadcastReceiver应用详解 (转)
    linux主设备号和次设备号
    Enable screen lock and HOME key (eclair and older versions)(转)
    C#获取用户桌面等特殊系统路径
    java中Thread与Runnable的区别
    博文索引
    FlinkCDC实践
    关于libxml2.so.2不被Gstreamer链接的解决
    s.length什么意思
  • 原文地址:https://www.cnblogs.com/longren/p/11018850.html
Copyright © 2020-2023  润新知