Session与Cookie
Session與Cookie
基本概念
Session
存儲(chǔ)在服務(wù)器端,保存用戶名登錄狀態(tài).桌面狀態(tài)等信息 默認(rèn)路徑在/var/lib/php/session
Cookies
Cookies:由服務(wù)器下發(fā)給客戶端,保存在客戶端的一個(gè)文件里。保存的內(nèi)容主要包括SessionID。
PHP的本地Session信息
問題
通過Nginx調(diào)度器負(fù)載后端兩臺(tái)Web服務(wù)器,實(shí)現(xiàn)以下目標(biāo):
部署Nginx為前臺(tái)調(diào)度服務(wù)器
調(diào)度算法設(shè)置為輪詢
后端為兩臺(tái)LNMP服務(wù)器
部署測(cè)試頁(yè)面,查看PHP本地的Session信息
方案
概念:
Session:存儲(chǔ)在服務(wù)器端,保存用戶名、登陸狀態(tài)等信息。
Cookies:由服務(wù)器下發(fā)給客戶端,保存在客戶端的一個(gè)文件里。
保存的內(nèi)容主要包括:SessionID。
實(shí)驗(yàn)拓?fù)洵h(huán)境:
使用4臺(tái)RHEL7虛擬機(jī),其中一臺(tái)作為Nginx前端調(diào)度器服務(wù)器(eth0:192.168.4.5,eth1:192.168.2.5)、兩臺(tái)虛擬機(jī)部署為L(zhǎng)NMP服務(wù)器,分別為Web1服務(wù)器(192.168.2.100)和Web2服務(wù)器(192.168.2.200),另外一臺(tái)作為測(cè)試用的Linux客戶機(jī)(192.168.4.10),拓?fù)淙鐖D所示。
步驟一:部署后端LNMP服務(wù)器相關(guān)軟件
注意:以下部署LNMP服務(wù)器的操作,需要在兩臺(tái)后端服務(wù)器做相同的操作,下面我們以一臺(tái)Web2服務(wù)器(192.168.2.200)為例,對(duì)Web1服務(wù)器執(zhí)行相同操作即可。
1)使用yum安裝基礎(chǔ)依賴包
2)源碼安裝Nginx
[root@web2 ~]# tar -xf nginx-1.12.2.tar.gz [root@web2 ~]# cd nginx-1.12.2 [root@web2 nginx-1.12.2]# ./configure \ > --with-http_ssl_module [root@web2 nginx-1.12.2]# make && make install3)安裝MariaDB數(shù)據(jù)庫(kù)
[root@web2 ~]# yum -y install mariadb mariadb-server mariadb-devel4 ) 安裝PHP
[root@web2 ~]# yum -y install php php-mysql [root@web2 ~]# yum -y install php-fpm5)修改Nginx配置文件(修改默認(rèn)首頁(yè)與動(dòng)靜分離)
[root@web2 ~]# vim /usr/local/nginx/conf/nginx.conf location / {root html;index index.php index.html index.htm;}location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi.conf;}步驟二:啟動(dòng)LNMP服務(wù)器相關(guān)的服務(wù)
1)啟動(dòng)Nginx服務(wù)
這里需要注意的是,如果服務(wù)器上已經(jīng)啟動(dòng)了其他監(jiān)聽80端口的服務(wù)軟件(如httpd),則需要先關(guān)閉該服務(wù),否則會(huì)出現(xiàn)沖突。
2)啟動(dòng)MySQL服務(wù)
[root@web2 ~]# systemctl start mariadb [root@web2 ~]# systemctl status mariadb3)啟動(dòng)PHP-FPM服務(wù)
[root@web2 ~]# systemctl start php-fpm [root@web2 ~]# systemctl status php-fpm步驟三:部署前端Nginx調(diào)度服務(wù)器
1)使用源碼安裝nginx軟件(如果Nginx軟件包已安裝可以忽略此步驟)
[root@proxy ~]# yum -y install gcc pcre-devel openssl-devel [root@proxy ~]# tar -xf nginx-1.12.2.tar.gz [root@proxy ~]# cd nginx-1.12.2 [root@proxy nginx-1.12.2]# ./configure [root@proxy nginx-1.12.2]# make && make install2)修改Nginx配置文件,實(shí)現(xiàn)代理服務(wù)器
Nginx配置文件中,通過upstream定義后端服務(wù)器地址池,默認(rèn)調(diào)度策略為輪詢,使用proxy_pass調(diào)用upstream定義的服務(wù)器地址池:
3)重新加載配置文件
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload #請(qǐng)先確保nginx是啟動(dòng)狀態(tài),否則運(yùn)行該命令會(huì)報(bào)錯(cuò),報(bào)錯(cuò)信息如下: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)步驟四:測(cè)試環(huán)境是否配置成功
1)瀏覽器訪問測(cè)試頁(yè)面驗(yàn)證。
[root@client ~]# curl http://192.168.4.5/index.html //查看是否有數(shù)據(jù) <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;} </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p><p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p> </body> </html>步驟五:部署測(cè)試頁(yè)面
1)部署測(cè)試頁(yè)面(Web1服務(wù)器)。
測(cè)試頁(yè)面可以參考lnmp_soft/php_scripts/php-memcached-demo.tar.gz。
2)瀏覽器直接訪問后端服務(wù)器的測(cè)試頁(yè)面(Web1服務(wù)器)。
[root@web1 ~]# firefox http://192.168.2.100 //填寫賬戶信息 [root@web1 ~]# cd /var/lib/php/session/ //查看服務(wù)器本地的Session信息 [root@web1 ~]# ls ptc07dsusfa4rjb3nnuhfd7240 //注意這里的ID是隨機(jī)的 [root@web1 ~]# cat sess_ahilcq9bguot0vqsjtd84k7244(不論輸入任何賬號(hào)密碼都可以進(jìn)入)
注意:可用修改index.php和home.php兩個(gè)文件的內(nèi)容,添加頁(yè)面顏色屬性,以區(qū)別后端兩臺(tái)不同的服務(wù)器:
3)部署測(cè)試頁(yè)面(Web2服務(wù)器)。
測(cè)試頁(yè)面可以參考lnmp_soft/php_scripts/php-memcached-demo.tar.gz。
4)瀏覽器直接訪問后端服務(wù)器的測(cè)試頁(yè)面(Web2服務(wù)器)。
[root@web2 ~]# firefox http://192.168.2.100 //填寫賬戶信息 [root@web2 ~]# cd /var/lib/php/session/ //查看服務(wù)器本地的Session信息 [root@web2 ~]# ls sess_qqek1tmel07br8f63d6v9ch401 //注意這里的ID是隨機(jī)的 [root@web2 ~]# cat sess_qqek1tmel07br8f63d6v9ch4015)瀏覽器訪問前端調(diào)度器測(cè)試(不同后端服務(wù)器Session不一致)。
真實(shí)主機(jī)使用google瀏覽器測(cè)試。
自動(dòng)搭建LNMP動(dòng)態(tài)網(wǎng)站腳本
1.首先準(zhǔn)備兩臺(tái)虛擬機(jī),IP地址分別為
web1:eth1:192.168.2.100/24
web2:eth1:192.168.2.200/24
2.在web1和web2上搭建LNMP服務(wù)
3.在真機(jī)上將lnmp的壓縮軟件包傳給web1和web2
4.修改yum源的倉(cāng)庫(kù)地址
5.創(chuàng)建腳本
memcached
memcached概述
- memcached是高性能的分布式緩存服務(wù)器
- 用來(lái)集中緩存數(shù)據(jù)庫(kù)查詢結(jié)果,減少數(shù)據(jù)庫(kù)訪問次數(shù),以提高動(dòng)態(tài)web應(yīng)用的響應(yīng)速度
- 官方網(wǎng)站:http://memcached.org/
數(shù)據(jù)存儲(chǔ)對(duì)比
- 性能: CPU緩存>內(nèi)存>磁盤>數(shù)據(jù)庫(kù)
- 價(jià)格: CPU緩存>內(nèi)存>磁盤>數(shù)據(jù)庫(kù)
memcached數(shù)據(jù)庫(kù)的特點(diǎn)
1.緩存數(shù)據(jù)庫(kù),數(shù)據(jù)存在內(nèi)存里,性能好,但重啟計(jì)算機(jī),所有數(shù)據(jù)會(huì)消失
2.簡(jiǎn)單kv數(shù)據(jù)庫(kù),key=value
構(gòu)建memcached服務(wù)
問題
要求先快速搭建好一臺(tái)memcached服務(wù)器,并對(duì)memcached進(jìn)行簡(jiǎn)單的增、刪、改、查操作:
安裝memcached軟件,并啟動(dòng)服務(wù)
使用telnet測(cè)試memcached服務(wù)
對(duì)memcached進(jìn)行增、刪、改、查等操作
方案
使用1臺(tái)RHEL7虛擬機(jī)作為memcached服務(wù)器(192.168.4.5)。
在RHEL7系統(tǒng)光盤中包含有memcached,因此需要提前配置yum源,即可直接使用yum安裝,客戶端測(cè)試時(shí)需要提前安裝telnet遠(yuǎn)程工具。
驗(yàn)證時(shí)需要客戶端主機(jī)安裝telnet,遠(yuǎn)程memcached來(lái)驗(yàn)證服務(wù)器的功能:
add name 0 180 10 //變量不存在則添加
set name 0 180 10 //添加或替換變量
replace name 0 180 10 //替換
get name //讀取變量
append name 0 180 10 //向變量中追加數(shù)據(jù)
delete name //刪除變量
flush_all //清空所有
提示:0表示不壓縮,180為數(shù)據(jù)緩存時(shí)間,10為需要存儲(chǔ)的數(shù)據(jù)字節(jié)數(shù)量。
步驟
步驟一:構(gòu)建memcached服務(wù)
1)使用yum安裝軟件包memcached
2 ) memcached配置文件(查看即可,不需要修改)
[root@proxy ~]# vim /usr/lib/systemd/system/memcached.service ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS [root@proxy ~]# vim /etc/sysconfig/memcached PORT="11211" //端口號(hào) USER="memcached" //用戶身份 MAXCONN="1024" //占用內(nèi)存 CACHESIZE="64" //并發(fā)量 OPTIONS=""3)啟動(dòng)服務(wù)并查看網(wǎng)絡(luò)連接狀態(tài)驗(yàn)證是否開啟成功:
ss命令可以查看系統(tǒng)中啟動(dòng)的端口信息,該命令常用選項(xiàng)如下:
-a顯示所有端口的信息
-n以數(shù)字格式顯示端口號(hào)
-t顯示TCP連接的端口
-u顯示UDP連接的端口
-l顯示服務(wù)正在監(jiān)聽的端口信息,如httpd啟動(dòng)后,會(huì)一直監(jiān)聽80端口
-p顯示監(jiān)聽端口的服務(wù)名稱是什么(也就是程序名稱) 注意:在RHEL7系統(tǒng)中,使用ss命令可以替代netstat,功能與選項(xiàng)一樣。
步驟二:使用telnet訪問memcached服務(wù)器
1)使用telnet連接服務(wù)器測(cè)試memcached服務(wù)器功能,包括增、刪、改、查等操作。
[root@proxy ~]# telnet 192.168.4.5 11211 Trying 192.168.4.5... …… ##提示:0表示不壓縮,180為數(shù)據(jù)緩存時(shí)間,3為需要存儲(chǔ)的數(shù)據(jù)字節(jié)數(shù)量。 set name 0 180 3 //定義變量,變量名稱為name plj //輸入變量的值,值為plj STORED get name //獲取變量的值 VALUE name 0 3 //輸出結(jié)果 plj END ##提示:0表示不壓縮,180為數(shù)據(jù)緩存時(shí)間,3為需要存儲(chǔ)的數(shù)據(jù)字節(jié)數(shù)量。 add myname 0 180 10 //新建,myname不存在則添加,存在則報(bào)錯(cuò) set myname 0 180 10 //添加或替換變量 replace myname 0 180 10 //替換,如果myname不存在則報(bào)錯(cuò) get myname //讀取變量 append myname 0 180 10 //向變量中追加數(shù)據(jù) delete myname //刪除變量 flush_all //清空所有 quit //退出登錄PHP實(shí)現(xiàn)session共享
問題
通過修改PHP-FPM配置文件,實(shí)現(xiàn)session會(huì)話共享:
配置PHP使用memcached服務(wù)器共享Session信息
客戶端訪問兩臺(tái)不同的后端Web服務(wù)器時(shí),Session 信息一致
方案
Nginx服務(wù)器除了承擔(dān)調(diào)度器外,還需要擔(dān)任memcached數(shù)據(jù)庫(kù)的角色,并在兩臺(tái)后端LNMP服務(wù)器上實(shí)現(xiàn)PHP的session會(huì)話共享。拓?fù)浣Y(jié)構(gòu)如圖所示
步驟
步驟一:為Web服務(wù)器安裝PHP擴(kuò)展
1)為web1主機(jī)的PHP添加memcache擴(kuò)展
[root@web1 ~]# yum -y install php-pecl-memcache [root@web1 ~]# systemctl restart php-fpm2)為web2主機(jī)的PHP添加memcache擴(kuò)展
[root@web2 ~]# yum -y install php-pecl-memcache [root@web2 ~]# systemctl restart php-fpm步驟二:在后端LNMP服務(wù)器上部署Session共享
注意:這些操作在兩臺(tái)后端Web服務(wù)器上均需要執(zhí)行,以下操作以Web1(192.168.2.100)服務(wù)器為例。
1)修改PHP-FPM配置文件,并重啟服務(wù)
注意,因?yàn)楹蠖藘膳_(tái)web服務(wù)器(web1,web2)都需要修改配置文件(下面也web1為例)。
步驟三:客戶端測(cè)試
客戶端使用瀏覽器訪問兩臺(tái)不同的Web服務(wù)器。
用真機(jī)的google瀏覽器,清除歷史緩存記錄,地址欄輸入192.168.4.5,在web1的灰色界面輸入密碼,登陸后自動(dòng)跳轉(zhuǎn)到web2的白色界面,則說(shuō)明實(shí)驗(yàn)成功,用戶登錄服務(wù)器不需要每次都輸入密碼
總結(jié)
以上是生活随笔為你收集整理的Session与Cookie的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx调度器
- 下一篇: Tomcat服务器 V