今天继续给大家介绍渗透测试相关知识,本文主要内容是PHP session相关知识详解。
免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!
一、session简介
在cookie详解一文中,我们详细介绍了Web服务器的会话机制和cookie。今天,我们就来介绍一下session的相关知识。
与cookie相比,session最大的区别在于session是存储在服务器中的。在PHP中,session并不是存储在服务器的内存中,而是以文件的方式来存储的。在PHP的配置文件中,有专门的session模块,用于配置session相关的设置,在该模块下有个session.save_path参数,如下所示:
这个参数设置了PHP的session存储位置,我们打开该参数指定的目录,果然发现了session文件,如下所示:
我们打开后,发现session中的内容是反序列化后的内容,如下所示:
在实际的网站中,可能会存储很多用户的session信息,为了区分这些不同的session究竟属于哪个用户,需要用户以cookie的方式上传一个唯一的会话标识,这样PHP就可以根据用户上传的会话标识来查找用户所对应的session了。
二、关于session的PHP配置
除了session.save_path外,PHP中还有很多关于session的配置,常用参数及作用如下所示:
1、session.name
指定用户cookie的会话名,默认值为PHPSESSID。PHP就是根据这个名称来查找用户对应的session。
2、session.save_handler
定义了处理器名称,默认为files。
3、session.auto_start
如果该参数设置为1,则标识会话模块在请求开始时自动启动一个会话。该参数值默认为0,表示不启用该功能。
4、session.use_cookies
该参数指定了在客户端是否使用cookie来存储会话ID(即session.name),该参数默认为1,表示启用该功能。
5、session.cookie_secure
PHP4.0.4版本以后添加此功能,默认为Off。如果该项设置为On,则表示启用安全链接发送cookie。
6、session.serialize_handler
session的存储和使用需要进行序列化和反序列化操作,该参数定义了PHP用来序列化/返序列化的处理器名字。PHP8.2版本支持三种,分别是PHP序列化格式(php_serialize)、PHP内部格式(php php_binary)以及WDDX(wddx)。该项参数的设置决定了session文件中内容的存储格式,默认值是php。
7、session.upload_progress.eabled
8、session.upload_progress.cleanup
三、关于session的PHP函数
接下来,介绍几个PHP中常用的session函数:
1、开启session会话
session_start()函数可以开启session会话。
2、设置、获取session值
$_SESSION[‘var’]可以用于获取session中存储的var变量的值,我们可以使用“=”,表示对session中该变量进行赋值。
3、删除session值
unset($_SESSION[‘var’])可以删除session中存储的var变量。
4、清空session值
如果我们想要删除整个session,那么我们可以使用如下函数:
$_SESSION=[];
或
session_unset();
5、销毁整个session
如果我们想更直接,销毁整个session,那么可以使用命令:
session_destroy()
销毁session和清空session的区别类似于销毁是删除session文件,而清空session是把session文件中的所有内容清空。
6、返回/更新session对话名称
session_name()函数可以返回当前会话名称,如果使用在使用该函数时添加name参数,使之成为session_name(name),则会将当前会话名更新为变量name对应的名称。
四、PHP session示例
在学习了上述PHP配置及相关函数外,我们就尝试利用上述函数,编写一个简单的session示例,代码如下所示:
<?php
//开启session会话
session_start();
//以GET的方式获取一个变量
$sess=$_GET['sess'];
//将GET获取的变量值存放进入session中
$_SESSION['var_session']=$sess;
//打印之前存储的session
echo $_SESSION['var_session'];
echo "<br>";
//打印session_name
echo session_name();
?>
上述页面访问后结果如下所示:
执行后,可以在session存储目录中查找到session文件,文件如下所示:
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200