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