PHP的session.save_path配置指定了session文件的结构深度、文件权限、存放路径,格式为N;MODE;/path。N表示子文件夹划分深度,MODE表示文件的umask值(默认为600),path通常为/var/lib/php/sessions或/tmp。
PHP在大文件流式上传时,为了将上传进度存放在session中,如果不存在session则会自动初始化,直到文件上传结束后销毁(由session.upload_progress.cleanup指定)。当session.upload_progress.enabled为默认值1时,上传文件的同时传递name="PHP_SESSION_UPLOAD_PROGRESS"即可利用(由session.upload_progress.name指定)
session.name通常为PHPSESSID,用作Cookie的键名。当session.use_strict_mode为默认值0时,客户端可以自定义sessionID,即通过Cookie传递PHPSESSID=hosch3n后,服务器将创建对应的sess_hosch3n文件。
因此就可以在利用文件上传自动初始化session的同时自定义sessionID,并利用条件竞争在文件上传完成前通过文件包含实现代码执行。