會(huì)話數(shù)據(jù)聘惦,即SESSON數(shù)據(jù)丸逸,默認(rèn)存儲(chǔ)在文件中蹋艺。如果希望將SESSION數(shù)據(jù)存儲(chǔ)在更快速的地方,更重要的是黄刚,如果網(wǎng)站是分布式部署的捎谨,SESSION數(shù)據(jù)存儲(chǔ)在文件中,就不能滿足要求。
要解決分布式會(huì)話問(wèn)題涛救,可以將會(huì)話存儲(chǔ)在memcache畏邢。
1.安裝好memcache服務(wù)端、PHP的memcache擴(kuò)展检吆。
2.在PHP的配置文件php.ini中更改SESSION相關(guān)的配置舒萎。
我的PHP配置文件 E:\wamp64\bin\apache\apache2.4.17\bin\php.ini 中,SESSION相關(guān)的配置是:
session.save_handler = files
session.save_path ="E:/wamp64/tmp"
如果有足夠的權(quán)限蹭沛,更好的做法是使用 session_save_path 和 session_set_save_handler 函數(shù)設(shè)置這兩個(gè)配置臂寝。
3.重啟服務(wù)器,運(yùn)行網(wǎng)站摊灭,一切正常咆贬,感覺(jué)不到和之前有什么變化。但會(huì)話數(shù)據(jù)的存儲(chǔ)位置的確改變了帚呼。
4.測(cè)試會(huì)話數(shù)據(jù)存儲(chǔ)在哪里
A.在沒(méi)有更改session配置之前掏缎,運(yùn)行本地的網(wǎng)站,登錄后臺(tái)煤杀,然后查看 E:/wamp64/tmp眷蜈,發(fā)現(xiàn)產(chǎn)生了SESSION文件,文件內(nèi)存儲(chǔ)了登錄信息怜珍。
B.更改session配置后,將 E:/wamp64/tmp 清空凤粗,再次登錄網(wǎng)站后臺(tái)酥泛,能正常登錄,但在 E:/wamp64/tmp 沒(méi)有發(fā)現(xiàn)任何文件嫌拣。
C.session可能已經(jīng)存儲(chǔ)到memcache中柔袁。但從memcache中獲取session數(shù)據(jù),卻失敗了异逐。
我是這樣獲取的:
在session中存儲(chǔ)了
$_SESSION['user'] = 'cg'
從memcache中以 user 為key獲取值捶索,失敗了。是方式不對(duì)灰瞻?還是key錯(cuò)誤腥例?
為了進(jìn)一步證明session數(shù)據(jù)存儲(chǔ)在memcache中,我停止了memcache酝润,然后刷新網(wǎng)站燎竖,網(wǎng)站立刻變?yōu)榉堑卿洜顟B(tài),重新登錄要销,總是不成功构回。啟動(dòng)
memcache后,恢復(fù)正常。這足以證明session已經(jīng)存儲(chǔ)到memcache中纤掸。
memcache中存儲(chǔ)的數(shù)據(jù)沒(méi)有持久化存儲(chǔ)脐供,當(dāng)它重啟之后,之前所有的數(shù)據(jù)都會(huì)丟失借跪。這會(huì)導(dǎo)致一個(gè)場(chǎng)景:一個(gè)網(wǎng)站將會(huì)話信息存儲(chǔ)到了memcache中政己,
memcache突然重啟,正在登錄此網(wǎng)站的所有用戶的會(huì)話信息全部消失垦梆,一刷新匹颤,全部變?yōu)榉堑卿洜顟B(tài)。