0
点赞
收藏
分享

微信扫一扫

6 Session与Cookie


6 Session与Cookie_linux

6 Session与Cookie

  • ​​1 Session与Cookie​​
  • ​​2 实验环境部署​​
  • ​​3 部署memcached服务​​
  • ​​4 memcache的简单使用​​

1 Session与Cookie

  • Session:存储在服务器端,保存用户名、登陆状态等信息。
  • Cookies:由服务器下发给客户端,保存在客户端的一个文件。保存的内容主要包括:SessionID

客户端访问一个需要登录的web页面时,会将自己的用户名和密码发送给服务器。

服务器确认密码正确后,会生成一个文件Session(保存用户名、登陆状态等信息。)

服务器会给客户端返回一个登录成功的结果,并下发Cookies文件。(浏览器默认自动接收,保存的内容主要包括:SessionID)

客户端第二次登陆时,会主动的出示Cookies文件。告知服务器我之前登陆过。

服务器看过Cookies后,会在已保留的文件中查询。

实现每次刷新页面,不用重复的输入密码。

但是面对集群时,客户端每次访问的不一定是同一台服务器。

2 实验环境部署

  • 实验拓扑

使用4台RHEL7虚拟机
其中一台作为Nginx前端调度器服务器(eth0:192.168.4.5,eth1:192.168.2.5)
两台虚拟机部署为LNMP服务器,分别为Web1服务器(192.168.2.100)和Web2服务器(192.168.2.200)
另外一台作为测试用的Linux客户机(192.168.4.10)

6 Session与Cookie_php_02

准备LNMP的集群环境

  • web1和web2部署LNMP环境

[root@web1 ~]# yum -y install  mariadb  mariadb-server  mariadb-devel
[root@web1 ~]# yum -y install php php-fpm php-mysql
[root@web1 ~]# yum -y install gcc pcre-devel openssl-devel
[root@web1 ~]# cd /opt/nginx-1.12.2/
[root@web1 nginx-1.12.2]# ./configure
[root@web1 nginx-1.12.2]# make
[root@web1 nginx-1.12.2]# make install

  • 开启动静分离功能

[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf
65 location ~ \.php$ {
66 root html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
70 include fastcgi.conf;
71 }

[root@web1 ~]# /usr/local/nginx/sbin/nginx
[root@web1 ~]# systemctl restart mariadb
[root@web1 ~]# systemctl restart php-fpm

[root@web1 ~]# cd /root/lnmp_soft/php_scripts #到lnmp_soft相关目录
[root@web1 php_scripts]# tar -xf php-memcached-demo.tar.gz #释放动态网页模板
[root@web1 php-memcached-demo]# cp -r php-memcached-demo/* /usr/local/nginx/html/

[root@web1 ~]# ls /usr/local/nginx/html/

6 Session与Cookie_php_03

  • 点击提交查询

6 Session与Cookie_memcached_04

[root@web1 ~]# ls /var/lib/php/session/

  • proxy做调度器

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
34 upstream web {
35 server 192.168.2.100:80;
36 server 192.168.2.200:80;
37 }
·································
45
46 location / {
47 proxy_pass http://web;
48 root html;
49 index index.html index.htm;
50 }

[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

再使用火狐浏览器访问192.168.2.5/index.php 可以看到后台服务器的登录界面

  • 为了区分访问网页时是那台主机提供的服务,修改测试页面

[root@web1 ~]# cat /usr/local/nginx/html/index.php
<h1>web1_PHP Login Session Example</h1>
[root@web1 ~]# cat /usr/local/nginx/html/home.php
web1_Welcome : <?php echo $_SESSION['login_user'] ?>

[root@web2 ~]# cat /usr/local/nginx/html/index.php
<h1>web2_PHP Login Session Example</h1>
[root@web2 ~]# cat /usr/local/nginx/html/home.php
web2_Welcome : <?php echo $_SESSION['login_user'] ?>

6 Session与Cookie_memcached_05

CTRL+F5强制刷新可以看到两个不同的页面

3 部署memcached服务

在Web服务开发中,服务端缓存是服务实现中所常常采用的一种提高服务性能的方法。其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算,从而提高了服务的运行效率。

除了能够提高服务的运行效率之外,服务端缓存还常常用来提高服务的扩展性。因此一些大规模的Web应用,如Facebook,常常构建一个庞大的服务端缓存。而它们所最常使用的就是Memcached。

在这里我们用memcached来保存Session,实现集群中一些共用数据的存储。

[root@proxy ~]# yum -y install memcached telnet  php-pecl-memcache
//php与memcache关联的软件包
[root@proxy ~]# systemctl start memcached
[root@proxy ~]# systemctl restart php-fpm
[root@proxy ~]# ss -ntulp | grep memcached
udp UNCONN 0 0 *:11211 *:* users:((memcached",pid=1693,fd=28))
udp UNCONN 0 0 :::11211 :::* users:((memcached",pid=1693,fd=29))
tcp LISTEN 0 128 *:11211 *:* users:((memcached",pid=1693,fd=26))
tcp LISTEN 0 128 :::11211 :::* users:((memcached",pid=1693,fd=27))

#-a显示所有端口的信息
#-n以数字格式显示端口号
#-t显示TCP连接的端口
#-u显示UDP连接的端口
#-l显示服务正在监听的端口信息
#-p显示监听端口的服务名称是什么

  • memcached

[root@proxy ~]#  cat /etc/sysconfig/memcached 
PORT="11211" #端口号
USER="memcached" #用户
MAXCONN="1024" #最大连接数,相当于并发
CACHESIZE="64" #存储数据的内存空间大小
OPTIONS=""

  • 在web1与web2配置存储session的位置,最终实现共享session

[root@proxy ~]# vim /etc/php-fpm.d/www.conf
[root@proxy ~]# tail -3 /etc/php-fpm.d/www.conf
php_value[session.save_handler] = memcache
php_value[session.save_path] =

  • 测试

使用火狐浏览器打开192.168.2.5/index.php登录只需要一遍,则说明web1与web2共享session成功

4 memcache的简单使用

[root@proxy ~]# telnet 192.168.2.5 11211
Trying 192.168.2.5...
Connected to 192.168.2.5.
Escape character is '^]'.

set abc 0 200 3 #存数据,变量名是abc,0是不压缩数据,200是存储时间(秒),3是存储多少字符
123 #存储3个字符
STORED

replace abc 0 200 3 #改写数据
456
STORED

get abc #读取数据
VALUE abc 0 3
456
END

add abc 0 200 3 #使用add命令也可以存储数据,但变量名如果存在,则会存储失败
123
NOT_STORED

delete abc #删除abc
DELETED

flush_all #删除所有
OK

quit #退出

6 Session与Cookie_php_06


6 Session与Cookie_linux_07


举报

相关推荐

0 条评论