天天看點

解決ecshop登陸自動退出的莫名現象

  最近在做ecshop的二次開發,程式釋出後測試出現一個莫名的問題。點選幾次頁面後出現session丢失,需要重複登陸;本地怎麼測試也都無法重制問題。一開始以為是修改程式的問題,可是怎麼找都找不着問題所在。網上搜尋了一下,說是ip發生了變化引起的。于是做了如下測試:

  1、www.ip.cn查詢并記錄下IP

  2、登陸

  3、随機點選網頁,直到要求重新登陸

  4、www.ip.cn重新查下IP

  果然前後兩個IP不一樣。因而很有可能是由于IP發生變化導緻session失效,于是檢視了下ecshop的session機制。其中擷取session key的函數是這樣

  includes/cls_session.php(移動端的也類似:mobile/include/cls_session.php)

  當IP發生變化時:substr($this->_ip, 0, strrpos($this->_ip, '.'))擷取到的IP段,隻要不在同一個IP段内便無法獲得相同的session key;進而也就無法獲得session的具體資訊,也就導緻重複登陸。這也是為什麼本地無法重制問題的原因。好吧,問題找到了。那麼怎麼解決呢?最簡單的辦法就是将擷取IP段的部分去掉,于是修改後的函數也就成這樣了。

  這樣便可解決重複登陸的問題。但這又涉及到程式的安全性問題,一旦session洩露IP這一步的判斷也就失效了。這也進一步降低了網站的安全性,這中間怎麼取舍也就見仁見智了。

繼續閱讀