php session 讀寫(xiě)鎖
- 想想一個(gè)例子,功能:
- 點(diǎn)擊頁(yè)面中一個(gè)按鈕,ajax執(zhí)行php,php中用session記錄執(zhí)行到哪一步。
- 使用ajax輪詢(xún)另一個(gè)php,獲取session中數(shù)據(jù),輸出執(zhí)行到哪一步。
?
- 執(zhí)行時(shí)發(fā)現(xiàn),輪詢(xún)的結(jié)果: 并不是每一步返回,而是等待10秒后直接返回complete。
當(dāng)執(zhí)行session_start()后,session會(huì)被鎖住。直到頁(yè)面執(zhí)行完成。
因此在頁(yè)面執(zhí)行其間,對(duì)sesssion進(jìn)行寫(xiě)操作,只會(huì)保存在內(nèi)存中,并不會(huì)寫(xiě)入session文件。
而對(duì)session進(jìn)行讀取,則需要等待,直到session鎖解開(kāi)才能讀取到。
?
- 解決方法
我們可以使用session_write_close()把數(shù)據(jù)寫(xiě)入session文件并結(jié)束session進(jìn)程。這樣就不需要等待頁(yè)面執(zhí)行完成,也能獲取到執(zhí)行到哪一步。
但這樣有個(gè)問(wèn)題,就是執(zhí)行完sesssion_write_close()后,對(duì)session的任何寫(xiě)操作都不起作用。因?yàn)閟ession進(jìn)程已經(jīng)結(jié)束。
因此需要再寫(xiě)session時(shí),在前面加上session_start()
?
- 備注:
-
session_start?— Start new or resume existing session?
?
-
session_write_close?— Write session data and end session?
?
本文摘自 :https://www.cnblogs.com/