最近在做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)
function gen_session_key($session_id)return
sprintf('%08x', crc32(root_path . $ip . $session_id
));}
當ip發生變化時:substr($this->_ip, 0, strrpos($this->_ip, '.'))獲取到的ip段,只要不在同乙個ip段內便無法獲得相同的session key;進而也就無法獲得session的具體資訊,也就導致重複登陸。這也是為什麼本地無法重現問題的原因。好吧,問題找到了。那麼怎麼解決呢?最簡單的辦法就是將獲取ip段的部分去掉,於是修改後的函式也就成這樣了。
function gen_session_key($session_id)
*/return
sprintf('%08x', crc32(root_path . $ip . $session_id
));}
這樣便可解決重複登陸的問題。但這又涉及到程式的安全性問題,一旦session洩露ip這一步的判斷也就失效了。這也進一步降低了**的安全性,這中間怎麼取捨也就見仁見智了。
登陸mysql s MySQL登陸退出
單例項登陸mysql mysql mysql uroot 適合剛安裝後無密碼 mysql uroot p 標準登陸的方法 mysql uroot p password 密碼明文會洩露密碼,一般用於指令碼中,指令碼許可權root 700 多例項登陸mysql mysql s data 3307 mys...
一 登陸,退出
判斷程式是否已經啟動 handle hmutex createmutex null,true,processname 用來判斷程式是否已啟動 登陸 在formmain 主介面 的oncreate事件中引起登陸介面。登入操作驗證正確 modalresult mrok 登陸操作中的快捷方式 在使用者名稱...
解決ecshop購物時自動退出的辦法
ecshop的session機制是乙個不錯的解決方案,但也有一些瑕疵,部分會員在操作時可能會出現登入後自動退出或商品無法加入購車或購物車自動清空等情況,這個一方面 如是是因為用 上網,ip不斷變化,可以參考的解決方法,另外也可以開啟includes cls session.php找到 替換成 fun...