Session会话之基础知识
前言
刷题中遇到很大关于session相关的题目,这里总结一波
session基础知识
这里主要讲讲传统的PHP中的“服务端Session”。至于什么是服务端Session,什么是客户端Session,可以看看P神的客户端 session
导致的安全问题
Session概念:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。
Session机制:session内容一般以文件的形式存储于服务器中,而本地浏览器会存储一个与服务器中session文件对应的Cookie值,Cookie存储的是键值为“PHPSESSID”的Seeion_id值,用户在访问web应用时,每次跳转发生http请求时,会自动把这个存储session_id的Cookie值发送过去,因此web应用的所有页面都可以获取到这个SESSION_ID值,也就可以通过session_id获取服务器中存储的session值,当用户关闭浏览器后,cookie存储的session_id自动清除,一般服务器存储的session文件也会在30分钟后自动清除。
了解session_start()
当会话自动开始或者通过 session_start() 手动开始的时候, PHP 内部会依据客户端传来的PHPSESSID来获取现有的对应的会话数据(即session文件), PHP 会自动反序列化session文件的内容,并将之填充到 $_SESSION 超级全局变量中。如果不存在对应的会话数据,则创建名为sess_PHPSES SID(客户端传来的)的文件。如果客户端未发送PHPSESSID,则创建一个由32个字母组成的PHPSESSID,并返回set-cookie。
可以看到请求中对应的PHPSESSID:ifrvi9r7ui81r0fjq569b06862
在服务器端,即/wamp/tmp下我们就可以发现一个生成的记录Session的文件,因为也没有记录什么会话信息,因此该文件是一个空文件。
在php.ini中对Session存在许多配置
session.save_path="" --设置session的存储路径
session.save_handler="" --设定用户自定义存储函数,如果想使用PHP内置会话存储机制之外的可以使用本函数(数据库等方式),默认files以文件存储
session.auto_start boolen --指定会话模块是否在请求开始时启动一个会话,默认为0不启动session.serialize_handler string --定义用来序列化/
常见的php-session存放位置
1. /var/lib/php5/sess_PHPSESSID
2. /var/lib/php7/sess_PHPSESSID
3. /var/lib/php/sess_PHPSESSID
4. /tmp/sess_PHPSESSID
5. /tmp/sessions/sess_PHPSESSED
Session的攻击面总结
参考
https://xz.aliyun.com/t/3674#toc-9
https://www.cnblogs.com/litlife/p/10748506.html#0x00-首先,session_start是什么?
例题
https://cloud.tencent.com/developer/article/1515276?from=article.detail.1376384
本文来自博客园,作者:kzd的前沿思考,转载请注明原文链接:https://www.cnblogs.com/Fram3/p/15865887.html