百度雲盤的出現為網絡資源的存儲和共享提供了平台,而由於保護用戶的隱私安全,百度雲盤隨后限定只有輸入相應的提取碼才能訪問分享的文件。
但最近在百度雲盤資源提取時碰到個奇怪的問題:如果同時打開了多個資源分享鏈接並輸入了提取碼之后,此時再依次點擊每個資源的"下載資源"或者"保存到網盤",部分資源就會出現"提取碼錯誤"的提示。
隨后又測試了幾次,仍然出現了類似的提示,為了找出錯誤原因,我重新調整了提取百度雲盤資源的操作流程:
1)依次打開百度雲盤資源分享鏈接;
2)在輸入第一個鏈接的提取碼之后,直接點擊“下載”或“保存網盤”;
3)重復步驟2,依次輸入下一個鏈接和進行下載操作;
而根據以上的這3個步驟,原來出現錯誤的提示卻沒有出現,這說明正確的提取碼是能夠下載資源的,於是我猜想這個錯誤是不是因為保存提取碼的原因呢?
那么就需要知道它的提取碼會放在那里,一般而言,為了保持用戶訪問狀態,避免重復輸入同一個驗證或者訪問權證,網站都喜歡把第一次保存的驗證碼放入到session的某個對象中。
session的概念
session是指用戶u與服務器s在會話過程中的用來存儲對象信息的容器,一般每次請求都會產生新的session對象,即使sessionID相同。
session的工作原理
①當一個session第一次被啟用時,一個唯一的標識被存儲於本地的cookie中。
②首先使用session_start()函數,PHP從session倉庫中加載已經存儲的session變量。
③當執行PHP腳本時,通過使用session_register()函數注冊session變量。
④當PHP腳本執行結束時,未被銷毀的session變量會被自動保存在本地一定路徑下的session庫中,這個路徑可以通過php.ini文件中的session.save_path指定,下次瀏覽網頁時可以加載使用。
為了驗證session是否可能擾亂,就需要找到各個資源網頁的session對象,結果這幾個資源網頁的session的ID完全相同,並且它們都在由相同用戶與百度服務器建立連接產生的,也就是說這幾個網頁保存的提取碼使用的是相同的session,並且它的值卻不相同。
然而在提煉sessionID數據來匹配文件下載權限時就會出現被多重覆蓋的session變量驗證失敗的現象,
到此步驟,就可以解釋出按照之前操作會出現錯誤提示的原因了。