百度云盘的出现为网络资源的存储和共享提供了平台,而由于保护用户的隐私安全,百度云盘随后限定只有输入相应的提取码才能访问分享的文件。
但最近在百度云盘资源提取时碰到个奇怪的问题:如果同时打开了多个资源分享链接并输入了提取码之后,此时再依次点击每个资源的"下载资源"或者"保存到网盘",部分资源就会出现"提取码错误"的提示。
随后又测试了几次,仍然出现了类似的提示,为了找出错误原因,我重新调整了提取百度云盘资源的操作流程:
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变量验证失败的现象,到此步骤,就可以解释出按照之前操作会出现错误提示的原因了。