国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁(yè) > 開發(fā) > PHP > 正文

php session的鎖和并發(fā)

2024-05-04 23:42:28
字體:
供稿:網(wǎng)友
這篇文章主要介紹了php session的鎖和并發(fā),與之相關(guān)的現(xiàn)象有請(qǐng)求阻塞、session數(shù)據(jù)丟失、session數(shù)據(jù)讀不到的問題,感興趣的小伙伴們可以參考一下
 

本文分享PHP的session在使用過程中的鎖和并發(fā)的問題,與之相關(guān)的現(xiàn)象有請(qǐng)求阻塞、session數(shù)據(jù)丟失、session數(shù)據(jù)讀不到。

我登錄不了了
某天,我準(zhǔn)備登錄我們一個(gè)后臺(tái)系統(tǒng),前去解決一個(gè)bug,在賬戶密碼驗(yàn)證碼都準(zhǔn)確輸入的情況下,我登錄不上,經(jīng)過多次實(shí)驗(yàn)發(fā)現(xiàn)主要有兩個(gè)錯(cuò)誤信息:

  • csrf驗(yàn)證失敗
  • 驗(yàn)證碼錯(cuò)誤【我對(duì)碼神起誓我用半角輸入了我看到的驗(yàn)證碼,且順序一致,無多加字符】

我們的系統(tǒng)
我們的系統(tǒng)是基于phalcon 2.0.8 開發(fā)的,如你所見,我們?cè)诒韱斡蚣尤肓朔乐筩srf攻擊的域。也啟用了驗(yàn)證碼。

<input type="hidden"   name="{{ security.getTokenKey() }}"  value="{{ security.getToken() }}"/><img src="/login/getCaptcha" id="img-captcha"/> 

我首先對(duì)這兩個(gè)組件進(jìn)行查閱,發(fā)現(xiàn)他們都是將數(shù)據(jù)存于session:

# phalcon/security.zep# Security::getToken()let session = <SessionInterface> dependencyInjector->getShared("session"); session->set(this->_tokenValueSessionID, token); $this->session->set('admin_get_captcha_action', $captcha);

然后我又查閱了我們session的實(shí)現(xiàn),發(fā)現(xiàn)是將數(shù)據(jù)存儲(chǔ)于redis的。

找啊找
什么問題導(dǎo)致我登錄不上呢?既然是數(shù)據(jù)驗(yàn)證上出現(xiàn)問題,就從數(shù)據(jù)著手吧,我登陸我們測(cè)試環(huán)境的redis機(jī)器,執(zhí)行 redis-cli monitor,然后走一遍登錄流程,發(fā)現(xiàn)輸出如下(意思意思):

  • GET sessionId  
  • GET sessionId  
  • SETEX sessionId 3600 csrf=xxxx  
  • SETEX sessionId 3600 captcha=abcd  

我們可以看到:

1、這里存在兩次請(qǐng)求,一次是表單加載,一次是生成驗(yàn)證碼的。
2、存在“并發(fā)”的情況,這兩個(gè)請(qǐng)求應(yīng)該是表單加載渲染后才請(qǐng)求驗(yàn)證碼的,也就是session順序應(yīng)該是get->set->get->set,看起來怎么是并發(fā)請(qǐng)求了。
3、后面那個(gè)SETEX沒有csrf的內(nèi)容,也就是覆蓋掉前面的數(shù)據(jù)了
整個(gè)世界都不好了,不過也稍微明白是什么問題了。什么問題呢,說來話長(zhǎng),要從PHP的session數(shù)據(jù)的存取說起。

php的session數(shù)據(jù)的存取
session的數(shù)據(jù)是經(jīng)過編碼成字符串存儲(chǔ)在存儲(chǔ)器【file、db、redis、memcache等】的,在我們使用session的時(shí)候,是什么時(shí)候去儲(chǔ)存器取數(shù)據(jù)的?又是什么時(shí)候?qū)?shù)據(jù)寫入存儲(chǔ)器的?

這個(gè)問題的答案可能和一些朋友想的不一樣,一個(gè)請(qǐng)求里面,PHP只會(huì)讀取一次存儲(chǔ)器,在session_start的時(shí)候,然后也只會(huì)寫入一次存儲(chǔ)器,在請(qǐng)求結(jié)束的時(shí)候,或調(diào)用session_write_close的時(shí)候,將數(shù)據(jù)刷回存儲(chǔ)器,關(guān)閉session。

那么問題來了:

1、如果一個(gè)會(huì)話,同時(shí)出現(xiàn)兩個(gè)讀寫session請(qǐng)求,沒有保證獲取1-寫入1-獲取2-寫入2,同時(shí)沒有cas版本管理機(jī)制的情況下,這些并發(fā)請(qǐng)求就會(huì)彼此讀取不到對(duì)方的寫入,最后寫入的會(huì)把前面請(qǐng)求寫入的session覆蓋掉。
2、如果請(qǐng)求是串行的,像登錄頁(yè)面的表單和驗(yàn)證碼,也有可能前面的請(qǐng)求已經(jīng)輸出內(nèi)容了,但是session還沒寫入,后面的請(qǐng)求就已經(jīng)發(fā)起了。
鎖與不鎖
解決這種資源的并發(fā)一般會(huì)通過鎖或版本管理來處理。但是版本管理我看不到好的方法。就聊聊鎖吧。

其實(shí)鎖是不大適合,有弊端的。

php的session,默認(rèn)是用文件存儲(chǔ)的,在打開session的時(shí)候,會(huì)對(duì)文件加獨(dú)占鎖,這樣,其它請(qǐng)求就無法獲取鎖了,只能等待直到前面的鎖解了。

這樣保證了 讀取-寫入,讀取-寫入的順序。

其它存儲(chǔ)器,例如mysql,可以借助select for update進(jìn)行行鎖。redis可以通過一個(gè)自增鍵,返回1的獲取到鎖等來實(shí)現(xiàn)。

這個(gè)實(shí)現(xiàn)的話,對(duì)數(shù)據(jù)流來說很理想,但是,對(duì)于目前這種頁(yè)面大量應(yīng)用ajax的情況,所有請(qǐng)求排隊(duì)處理,將大大加大頁(yè)面展現(xiàn)的耗時(shí),甚至出現(xiàn)請(qǐng)求超時(shí)等不可用故障。

沒有解決的解決
不建議過多使用session,其一次讀取一次寫入的機(jī)制所引發(fā)的問題,會(huì)造成坑的存在。
在模版渲染前,或請(qǐng)求輸出前調(diào)用session_write_close

# 立刻回寫session,避免session覆蓋$eventManager = $this->view->getEventsManager();if (!$eventManager) {   $eventManager = new Manager();  $this->view->setEventsManager($eventManager);}$eventManager->attach("view:afterRender",function(){  session_write_close();});return $this->view; 
if($login) {   # 立刻回寫session,避免session讀取不到  $eventManager = $this->dispatcher->getEventsManager();  if (!$eventManager) {    $eventManager = new Manager();    $this->dispatcher->setEventsManager($eventManager);  }  $eventManager->attach('dispatch:afterDispatchLoop',function(){    session_write_close();  });  return $this->response->setHeader('Location', '/');}

以上就是關(guān)于php session的鎖和并發(fā),希望對(duì)大家的學(xué)習(xí)有所幫助。



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到PHP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
av首页在线| 国产精品冒白浆免费视频| 国产女主播在线观看| 国产精选在线观看| 最新亚洲精品国自产在线观看| 中文字幕日本三级| 国产精品18久久久久网站| 精品入口麻豆传煤| аⅴ成人天堂中文在线| 尤物在线网址| 精品国产美女福利到在线不卡| 91在线网站| 九九热视频在线观看| 国产国产国产国产国产国产 | 国产乱妇乱子| 国产va在线| 在线看黄网站| 国产激情网址| 欧美日韩亚洲第一页| 国产精品视频h| 在线成人一区| 国产视频福利在线| xxxxx中文字幕| 伊人久久青青草| 国产黄色在线网站| 免费男女羞羞的视频网站中文字幕| 国产一二三四| 超碰免费在线| 日日夜夜中文字幕| 精品国产一区二区三区不卡在线| 导航福利在线| 在线国产一区二区三区| 国产精品入口免费麻豆| 好男人免费精品视频| a中文在线播放| av亚洲男人天堂| 91在线高清| 国产91足控脚交在线观看| 国产免费人人看| 九九99精品| 九九视频九九热| 九九热在线播放| 国产在线高清| 国产乱精品一区二区三区| 美女网站在线观看| www.夜夜操| 91麻豆精品国产91久久| 国产网站在线播放| 在线中文字幕第一页| 国产xxx在线| 91网页在线观看| 99热播在线观看| 四虎成人精品在永久在线观看| 99热99re6国产在线播放| 99re在线视频播放| 欧美韩日国产| 国产探花在线观看| 中文一区在线观看| 欧美日韩国产亚洲沙发| 九九热在线免费视频| 最近最好的中文字幕2019免费 | gogo高清在线播放免费| 操操操综合网| 最新中文字幕av专区| 国产精品入口麻豆完整版| 2019天天操夜夜操| 欧美精品一区二区三区免费| 国产区卡一卡二卡三乱码免费| 9色在线视频网站| 九九热在线观看视频| 国产黄色大片在线观看| 全网国产福利在线播放| 国产精品久久久久白浆| gogo在线高清视频| 美女永久在线网站| 国产福利电影在线观看| 久久久久久日本一区99| 精品视频在线一区二区| 黄色av网址在线免费观看| 国产9色视频| 国产男女猛烈无遮挡免费视频| 中文在线视频| 国产视频二区在线观看| 久久精品免视着国产成人| 国产国语**毛片高清视频| 久久五月精品| baoyu777.永久免费视频| 国产香蕉视频在线观看| 久久99国产视频| 国产精品视频白浆合集| 粉嫩av一区| 免费精品国产自产拍在| 在线āv视频| 国产爆初菊在线观看免费视频网站 | 麻豆精品不卡国产免费看| 精品国产福利一区二区在线| 国产丝袜精品丝袜| 国产在线日本| 二人午夜免费观看在线视频| jlzzjlzz欧美| 欧美色第一页| 国产二级c片l毛片| 国产福利一区二区在线精品| 国产系列在线观看| 五月亚洲综合| 国产精品人人| 国产叼嘿网站免费观看不用充会员| 国产三级视频在线看| 国产午夜电影| 97视频免费| 伊人影院在线播放| xxxx视频在线| 美女av在线播放| 国产一区二区三区美女秒播| 国产精品久久一区二区三区不卡| 国产精品18久久久久久久久久| 国产主播色在线| 国产三级在线观看| 亚洲男人的天堂成人| 久蕉依人在线视频| 国产一级免费看| 在线视频三区| 成人av小说网| 国产h在线观看| 久久久久久77777| 国产黄色片中文字幕| av在线日韩国产精品| 最近中文字幕mv免费高清在线| 精品一区二区三区免费站| 欧美色欧美亚洲另类二区精品| 1区2区3区在线| 在线a人片免费观看视频| 国产尤物视频在线| 99在线播放| 国产美女自拍视频| 亚洲久草视频| 国产欧美日本亚洲精品一4区| 日本久久网站| 在线免费观看你懂的| 国产小视频免费在线观看| 日本动漫同人动漫在线观看| 国产一区电影| 久久精品最新免费国产成人| 精品亚洲成a人片在线观看| 国产乱子伦三级在线播放| 欧美日韩亚洲国内综合网| 136福利第一导航国产在线| 国产在线看片| 激情丁香婷婷| 牛牛在线精品视频| 男人天堂v视频| www.三级.com| 蜜桃视频中文字幕| a视频在线观看免费| 精品久久久久一区二区三区| 国产网站免费看| 国产天堂素人系列在线视频| 久久精品亚洲7777影院| 欧美日韩视频精品二区| 日本国产在线| 久久精品国产亚洲777| 思思99精品视频在线观看| 9色在线视频网站| 亚洲欧美一区二区三区在线播放| 国产h在线观看| 精品51国产黑色丝袜高跟鞋| 在线黄色国产电影| 日本动漫同人动漫在线观看| 免费看成年人视频在线观看| 国产中文字幕在线| 国产视频三区| 亚洲精品影院在线| 另类综合图区| 午夜国产在线| 精品欧美日韩一区二区| av免费在线播放| 四虎影院成人| 尤物网站在线| 在线免费看av| 国产在线中文字幕| 2020国产在线视频| 快射av在线播放一区| 国产一卡2卡3卡四卡网站| 99精品老司机免费视频| 久久国产情侣| 精品推荐国产麻豆剧传媒| 日本综合一区二区三区| 国产毛片毛片| 亚洲字幕成人中文在线观看| 国产乱子视频| 精品久久亚洲一级α| 欧美另类在线视频| 国产精品国精产品一二| 另类综合图区| 中文一区在线观看| 国产精品天堂| 九九99九九精彩| 在线观看中文字幕一区| 国产视频一二三区| 国内自拍视频在线观看|