當(dāng)前位置:首頁(yè) > IT技術(shù) > Web編程 > 正文

php session 讀寫(xiě)鎖
2021-09-29 14:51:52

php session 讀寫(xiě)鎖

  • 想想一個(gè)例子,功能:
  1. 點(diǎn)擊頁(yè)面中一個(gè)按鈕,ajax執(zhí)行php,php中用session記錄執(zhí)行到哪一步。
  2. 使用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/

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >