下文給大家?guī)?lái)session共享、工作原理及問(wèn)題解決方案,希望能夠給大家在實(shí)際運(yùn)用中帶來(lái)一定的幫助,負(fù)載均衡涉及的東西比較多,理論也不多,網(wǎng)上有很多書(shū)籍,今天我們就用創(chuàng)新互聯(lián)在行業(yè)內(nèi)累計(jì)的經(jīng)驗(yàn)來(lái)做一個(gè)解答。
成都創(chuàng)新互聯(lián)公司是專業(yè)的銀川網(wǎng)站建設(shè)公司,銀川接單;提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行銀川網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!稍大一些的網(wǎng)站,通常都會(huì)有好幾個(gè)云服務(wù)器,每個(gè)服務(wù)器運(yùn)行著不同功能的模塊,使用不同的二級(jí)域名,而一個(gè)整體性強(qiáng)的網(wǎng)站,用戶系統(tǒng)是統(tǒng)一的,即一套用戶名、密碼在整個(gè)網(wǎng)站的各個(gè)模塊中都是可以登錄使用的。各個(gè)服務(wù)器共享用戶數(shù)據(jù)是比較容易實(shí)現(xiàn)的,只需要在后端放個(gè)數(shù)據(jù)庫(kù)服務(wù)器,各個(gè)服務(wù)器通過(guò)統(tǒng)一接口對(duì)用戶數(shù)據(jù)進(jìn)行訪問(wèn)即可。但還存在一個(gè)問(wèn)題,就是用戶在這個(gè)服務(wù)器登錄之后,進(jìn)入另一個(gè)服務(wù)器的別的模塊時(shí),仍然需要重新登錄,這就是一次登錄,全部通行的問(wèn)題,映射到技術(shù)上,其實(shí)就是各個(gè)服務(wù)器之間如何實(shí)現(xiàn)共享 SESSION 數(shù)據(jù)的問(wèn)題。
在解決問(wèn)題之前,先來(lái)了解一下 PHP SESSION 的工作原理。在客戶端(如瀏覽器)登錄網(wǎng)站時(shí),被訪問(wèn)的 PHP 頁(yè)面可以使用 session_start() 打開(kāi) SESSION,這樣就會(huì)產(chǎn)生客戶端的唯一標(biāo)識(shí) SESSION ID(此 ID 可通過(guò)函數(shù) session_id() 獲取/設(shè)置)。SESSION ID 可以通過(guò)兩種方式保留在客戶端,使得請(qǐng)求不同的頁(yè)面時(shí),PHP 程序可以獲知客戶端的 SESSION ID;一種是將 SESSION ID 自動(dòng)加入到 GET 的 URL 中,或者 POST 的表單中,默認(rèn)情況下,變量名為 PHPSESSID;另一種是通過(guò) COOKIE,將 SESSION ID 保存在 COOKIE 中,默認(rèn)情況下,這個(gè) COOKIE 的名字為 PHPSESSID。這里我們主要以 COOKIE 方式進(jìn)行說(shuō)明,因?yàn)閼?yīng)用比較廣泛。
服務(wù)端通過(guò)客戶端傳遞的session_id區(qū)分用戶,用來(lái)標(biāo)記用戶的登錄狀態(tài)。
用戶再次發(fā)送請(qǐng)求的時(shí)候,把服務(wù)端返回的session_id通過(guò)cookie[或者URL傳參]的形式傳遞到服務(wù)端,這樣服務(wù)端就可以區(qū)分出來(lái)具體操作的用戶。
1.不使用session,換作cookie
把session改成cookie,就能避開(kāi)session的一些弊端?!景踩暂^低】
2.?dāng)?shù)據(jù)庫(kù)記錄下session信息
使用數(shù)據(jù)庫(kù)記錄session信息,session的使用頻率比較高,如果存在數(shù)據(jù)庫(kù)中,頻繁的讀取會(huì)對(duì)數(shù)據(jù)庫(kù)產(chǎn)生較大的壓力,網(wǎng)站性能瓶頸一般都存在數(shù)據(jù)庫(kù).
3.負(fù)載均衡的時(shí)候使用ip_hash算法進(jìn)行分發(fā)
使用ip_hash可能會(huì)導(dǎo)致某一臺(tái)服務(wù)器負(fù)載較大。如果某段時(shí)間內(nèi)服務(wù)器進(jìn)入了很多固定IP代理的請(qǐng)求 [代理] ,如果代理IP的負(fù)載過(guò)高就會(huì)導(dǎo)致ip_hash對(duì)應(yīng)的服務(wù)器負(fù)載壓力過(guò)大,這樣ip_hash就失去了負(fù)載均衡的作用了。
4.對(duì)session文件進(jìn)行同步
使用同步工具對(duì)session文件進(jìn)行同步,保證負(fù)載服務(wù)器的session文件都是一致的,這種做法雖然可以解決session共享的問(wèn)題,同樣的內(nèi)容會(huì)存在多個(gè)服務(wù)器上,而且部分服務(wù)器存在的session文件可能從開(kāi)始到結(jié)束完全沒(méi)有使用到,浪費(fèi)了服務(wù)器的資源。 【rsync,inotify-tools等】
5.使用memcache或者redis保存session信息 [建議]
相比文件取信息,從內(nèi)存取數(shù)據(jù)速度要快很多,而且在多個(gè)服務(wù)器需要共用 session 時(shí)會(huì)比較方便,將這些服務(wù)器都配置成使用同一組 memcached 服務(wù)器就可以,減少了額外的工作量。其缺點(diǎn)是 session 數(shù)據(jù)都保存在 memory 中,一旦宕機(jī),數(shù)據(jù)將會(huì)丟失。但對(duì) session 數(shù)據(jù)來(lái)說(shuō)并不是嚴(yán)重的問(wèn)題。
1、session默認(rèn)存儲(chǔ)是php.ini中配置的
//session存儲(chǔ)方式
session.save_handler = files
//session保存路徑 N表示按照分級(jí)存儲(chǔ)
session.save_path = "N;/path"
注:session.save_path = "2;/data/session_tmp"代表將session文件分成兩級(jí)存放,即/data/session_tmp/4/b /sess_4b1e384ad74619bd212e236e52a5a174If,取前兩位字符,但是php并不生成目錄,需要自己手工生成。
//session保存的目錄
session.save_path = "d:/wamp/tmp" php自帶函數(shù)session_save_path
//是否自動(dòng)開(kāi)啟session
session.auto_start = 0
2、設(shè)置session保存方式為redis
(1) 修改完成之后重啟php-fpm,nginx改php.ini配置文件
session.save_handler = redis
session.save_path = “tcp://127.0.0.1:6379″
(2) 通過(guò)ini_set設(shè)置
ini_set(“session.save_handler”,”redis”);
ini_set(“session.save_path”,”tcp://127.0.0.1:6379″);
有密碼設(shè)置
ini_set(“session.save_path”,”tcp://127.0.0.1:6379?auth=redisauthkey″);
(3) 具體實(shí)現(xiàn)
<?php
//如果未修改php.ini下面兩行注釋去掉
//ini_set('session.save_handler', 'redis');
//ini_set('session.save_path', 'tcp://127.0.0.1:6379');
session_start();
$_SESSION['sessionid'] = 'this is session content!';
echo $_SESSION['sessionid'];
echo '<br/>';
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth( ‘redisauthkey’ );
//redis用session_id作為key并且是以string的形式存儲(chǔ)
echo $redis->get('PHPREDIS_SESSION:' . session_id());
?>
3、通過(guò)session_id建立自己的一套session機(jī)制
借助session_id建議一套自己的機(jī)制,原理可以參考session保存機(jī)制。
用戶第一次請(qǐng)求時(shí)候,給用戶下發(fā)session_id。
之后請(qǐng)求都要帶上session
好處就是:把自己的一套session機(jī)制抽象為類,如果之后session不存在redis,后期可以直接通過(guò)修改類文件解決問(wèn)題。
看了以上關(guān)于session共享、工作原理及問(wèn)題解決方案,如果大家還有什么地方需要了解的可以在創(chuàng)新互聯(lián)行業(yè)資訊里查找自己感興趣的或者找我們的專業(yè)技術(shù)工程師解答的,創(chuàng)新互聯(lián)技術(shù)工程師在行業(yè)內(nèi)擁有十幾年的經(jīng)驗(yàn)了。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站欄目:session共享、工作原理及問(wèn)題解決方案-創(chuàng)新互聯(lián)
鏈接URL:http://aaarwkj.com/article48/ccogep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、服務(wù)器托管、網(wǎng)站收錄、網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容