基本上發明session的時候還沒AJAX技術,所以session設計上根本沒考慮到AJAX非同步切換時儲存積存阻塞的問題,換句話說如果用AJAX重複切換某個項目,而該項目會觸發session寫入資料,就會產生積存阻塞,後面的值完全存不進去session,所以解決方法可以使用PHP7的session_start函數來變更session的php.ini初始值設定,但還是必須要透過刪除session切換才能防止session積存阻塞。
舉例來說,像這樣的ajax多層選單切換觸發內容的session寫入!
如果每切換一層就觸發一次session寫入那用什麼方法都沒用,一定會積存阻塞,所以做一個送出按鈕來取選單最後的值,這樣就不會在開啟選單時觸發session寫入!如果變動選單則吧選單的var清空,重新用按鈕來取值!
然後ajax.php結構就能這樣寫!
if(empty($of_sortid)){ //選單空值時
unset($_SESSION['xoops_mod_name']); //刪除session
//CODE內容略..........................
}else{ //選單有值時
session_start([ //初始化session_start設定
'cache_limiter' => 'private',
'cache_expire' => 0,
'cookie_lifetime'=>0,
'read_and_close' => true,
]);
$_SESSION['xoops_mod_name'] = $var; //存入session
//CODE內容略..........................
}
經測試這樣用AJAX連動選單重複存入session已無積存阻塞問題,數值都能寫入session中,目前能用的方法只能這樣了!其他都試過了不可行!!有需要的朋友參考看看!
教學撰寫:徐嘉裕 Neil hsu
舉例來說,像這樣的ajax多層選單切換觸發內容的session寫入!
如果每切換一層就觸發一次session寫入那用什麼方法都沒用,一定會積存阻塞,所以做一個送出按鈕來取選單最後的值,這樣就不會在開啟選單時觸發session寫入!如果變動選單則吧選單的var清空,重新用按鈕來取值!
然後ajax.php結構就能這樣寫!
if(empty($of_sortid)){ //選單空值時
unset($_SESSION['xoops_mod_name']); //刪除session
//CODE內容略..........................
}else{ //選單有值時
session_start([ //初始化session_start設定
'cache_limiter' => 'private',
'cache_expire' => 0,
'cookie_lifetime'=>0,
'read_and_close' => true,
]);
$_SESSION['xoops_mod_name'] = $var; //存入session
//CODE內容略..........................
}
經測試這樣用AJAX連動選單重複存入session已無積存阻塞問題,數值都能寫入session中,目前能用的方法只能這樣了!其他都試過了不可行!!有需要的朋友參考看看!
教學撰寫:徐嘉裕 Neil hsu
留言
張貼留言