日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Session与Cookie

發(fā)布時(shí)間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Session与Cookie 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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ù)器
部署測試頁面,查看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ī)部署為LNMP服務(wù)器,分別為Web1服務(wù)器(192.168.2.100)和Web2服務(wù)器(192.168.2.200),另外一臺(tái)作為測試用的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)為例,對Web1服務(wù)器執(zhí)行相同操作即可。
1)使用yum安裝基礎(chǔ)依賴包

[root@web2 ~]# yum -y install gcc openssl-devel pcre-devel

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 install

3)安裝MariaDB數(shù)據(jù)庫

[root@web2 ~]# yum -y install mariadb mariadb-server mariadb-devel

4 ) 安裝PHP

[root@web2 ~]# yum -y install php php-mysql [root@web2 ~]# yum -y install php-fpm

5)修改Nginx配置文件(修改默認(rèn)首頁與動(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)沖突。

[root@web2 ~]# systemctl stop httpd //如果該服務(wù)存在,則關(guān)閉該服務(wù) [root@web2 ~]# /usr/local/nginx/sbin/nginx [root@web2 ~]# ss -utnlp | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 32428/nginx

2)啟動(dòng)MySQL服務(wù)

[root@web2 ~]# systemctl start mariadb [root@web2 ~]# systemctl status mariadb

3)啟動(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 install

2)修改Nginx配置文件,實(shí)現(xiàn)代理服務(wù)器
Nginx配置文件中,通過upstream定義后端服務(wù)器地址池,默認(rèn)調(diào)度策略為輪詢,使用proxy_pass調(diào)用upstream定義的服務(wù)器地址池:

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf .. .. upstream webs {server 192.168.2.100:80;server 192.168.2.200:80;}server {listen 80;server_name localhost;location / {proxy_pass http://webs;root html;index index.php index.html index.htm;} }

3)重新加載配置文件

[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload #請先確保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)

步驟四:測試環(huán)境是否配置成功

1)瀏覽器訪問測試頁面驗(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>

步驟五:部署測試頁面

1)部署測試頁面(Web1服務(wù)器)。
測試頁面可以參考lnmp_soft/php_scripts/php-memcached-demo.tar.gz。

[root@web1 ~]# cd lnmp_soft/php_scripts/ [root@web1 php_scripts]# tar -xf php-memcached-demo.tar.gz [root@web1 php_scripts]# cd php-memcached-demo [root@web1 php-memcached-demo]# cp -r * /usr/local/nginx/html/

2)瀏覽器直接訪問后端服務(wù)器的測試頁面(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

(不論輸入任何賬號密碼都可以進(jìn)入)
注意:可用修改index.php和home.php兩個(gè)文件的內(nèi)容,添加頁面顏色屬性,以區(qū)別后端兩臺(tái)不同的服務(wù)器:

在這里我們修改web1的頁面顏色 [root@web1 session]# cd /usr/local/nginx/html/ [root@web1 html]# ls 50x.html home.php images index.html index.php login.php README.md style.css test.php [root@web1 html]# vim index.php #把頁面顏色變?yōu)榛疑?/span>8 </head>9 10 <body bgcolor=gray>11 [root@web1 html]# vim home.php #進(jìn)入頁面后的顏色變?yōu)樽厣?/span>13 14 </head>15 <body bgcolor=brown>



3)部署測試頁面(Web2服務(wù)器)。
測試頁面可以參考lnmp_soft/php_scripts/php-memcached-demo.tar.gz。

[root@web2 ~]# cd lnmp_soft/php_scripts/ [root@web2 php_scripts]# tar -xf php-memcached-demo.tar.gz [root@web2 php_scripts]# cd php-memcached-demo [root@web2 php-memcached-demo]# cp -r * /usr/local/nginx/html/

4)瀏覽器直接訪問后端服務(wù)器的測試頁面(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_qqek1tmel07br8f63d6v9ch401

5)瀏覽器訪問前端調(diào)度器測試(不同后端服務(wù)器Session不一致)。
真實(shí)主機(jī)使用google瀏覽器測試。

[root@room9pc01 ~]# google-chrome http://192.168.4.5/index.php //填寫注冊信息后,刷新,還需要再次注冊,說明兩臺(tái)計(jì)算機(jī)使用的是本地Session //第二臺(tái)主機(jī)并不知道你再第一臺(tái)主機(jī)已經(jīng)登錄,第一臺(tái)主機(jī)的登錄信息也沒有傳遞給第二臺(tái)主機(jī)




自動(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源的倉庫地址
5.創(chuàng)建腳本

#!/bin/bash conf="/usr/local/nginx/conf/nginx.conf" #定義變量 cd /root tar -xf lnmp_soft.tar.gz cd lnmp_soft tar -xf nginx-1.12.2.tar.gz cd nginx-1.12.2 yum -y install gcc pcre-devel openssl-devel #部署LNMP第一步,安裝nginx的依賴包 ./configure --with-http_ssl_module #指定功能與指定安裝位置 make && make install #安裝yum -y install mariadb mariadb-server mariadb-devel #部署LNMP第二步,安裝數(shù)據(jù)庫的服務(wù) yum -y install php php-fpm php-mysql #部署LNMP第三步,安裝phpsed -i '65,71s/#//' $conf #把nginx配置文件中的第65行到71行取消注釋 sed -i '/SCRIPT_FILENAME/d' $conf #把包含SCRIRT_FILENAME的那一行刪掉 sed -i 's/fastcgi_params/fastcgi.conf/' $conf #把fastcgi_params改成fastcgi.confsystemctl stop httpd #防止端口沖突 /usr/local/nginx/sbin/nginx #啟動(dòng)nginx服務(wù) systemctl restart mariadb #啟動(dòng)mariadb服務(wù) systemctl restart php-fpm #啟動(dòng)php服務(wù) ss -anutlp | grep :80 #查看80端口是否已經(jīng)啟動(dòng)并且為nginx的端口 ss -anutlp | grep :3306 #查看3306端口是否啟動(dòng) ss -anutlp | grep :9000 #查看9000端口是否已經(jīng)啟動(dòng)

memcached

memcached概述
  • memcached是高性能的分布式緩存服務(wù)器
  • 用來集中緩存數(shù)據(jù)庫查詢結(jié)果,減少數(shù)據(jù)庫訪問次數(shù),以提高動(dòng)態(tài)web應(yīng)用的響應(yīng)速度
  • 官方網(wǎng)站:http://memcached.org/
數(shù)據(jù)存儲(chǔ)對比
  • 性能: CPU緩存>內(nèi)存>磁盤>數(shù)據(jù)庫
  • 價(jià)格: CPU緩存>內(nèi)存>磁盤>數(shù)據(jù)庫
memcached數(shù)據(jù)庫的特點(diǎn)

1.緩存數(shù)據(jù)庫,數(shù)據(jù)存在內(nèi)存里,性能好,但重啟計(jì)算機(jī),所有數(shù)據(jù)會(huì)消失
2.簡單kv數(shù)據(jù)庫,key=value

構(gòu)建memcached服務(wù)

問題
要求先快速搭建好一臺(tái)memcached服務(wù)器,并對memcached進(jìn)行簡單的增、刪、改、查操作:
安裝memcached軟件,并啟動(dòng)服務(wù)
使用telnet測試memcached服務(wù)
對memcached進(jìn)行增、刪、改、查等操作
方案
使用1臺(tái)RHEL7虛擬機(jī)作為memcached服務(wù)器(192.168.4.5)。
在RHEL7系統(tǒng)光盤中包含有memcached,因此需要提前配置yum源,即可直接使用yum安裝,客戶端測試時(shí)需要提前安裝telnet遠(yuǎn)程工具。

驗(yàn)證時(shí)需要客戶端主機(jī)安裝telnet,遠(yuǎn)程memcached來驗(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

[root@proxy ~]# yum -y install memcached telnet [root@proxy ~]# rpm -qa memcached memcached-1.4.15-10.el7_3.1.x86_64 [root@proxy ~]# systemctl restart memcached #起服務(wù)

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" //端口號 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ù)字格式顯示端口號
-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)一樣。

[root@proxy ~]# systemctl start memcached [root@proxy ~]# systemctl status memcached [root@proxy ~]# ss -anptu | grep Memcached udp UNCONN 0 0 *:11211 *:* users:(("memcached",pid=12068,fd=28)) udp UNCONN 0 0 :::11211 :::* users:(("memcached",pid=12068,fd=29)) tcp LISTEN 0 128 *:11211 *:* users:(("memcached",pid=12068,fd=26)) tcp LISTEN 0 128 :::11211 :::* users:(("memcached",pid=12068,fd=27))

步驟二:使用telnet訪問memcached服務(wù)器

1)使用telnet連接服務(wù)器測試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ù)庫的角色,并在兩臺(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-fpm

2)為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為例)。

[root@web1 ~]# vim /etc/php-fpm.d/www.conf //修改該配置文件的兩個(gè)參數(shù) //文件的最后2行 修改前效果如下: php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session //原始文件,默認(rèn)定義Sessoin會(huì)話信息本地計(jì)算機(jī)(默認(rèn)在/var/lib/php/session) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 修改后效果如下: php_value[session.save_handler] = memcache php_value[session.save_path] = "tcp://192.168.2.5:11211" //定義Session信息存儲(chǔ)在公共的memcached服務(wù)器上,主機(jī)參數(shù)中為memcache(沒有d) //通過path參數(shù)定義公共的memcached服務(wù)器在哪(服務(wù)器的IP和端口) [root@web1 ~]# systemctl restart php-fpm

步驟三:客戶端測試

客戶端使用瀏覽器訪問兩臺(tái)不同的Web服務(wù)器。
用真機(jī)的google瀏覽器,清除歷史緩存記錄,地址欄輸入192.168.4.5,在web1的灰色界面輸入密碼,登陸后自動(dòng)跳轉(zhuǎn)到web2的白色界面,則說明實(shí)驗(yàn)成功,用戶登錄服務(wù)器不需要每次都輸入密碼


總結(jié)

以上是生活随笔為你收集整理的Session与Cookie的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。