php会话控制[3]-SESSION

1.基础知识

session同cookie一样,都可以延展会话控制,通过存储用户信息来跟踪访问动作,不同的是,cookie是把信息存储在客户端,session把信息存储在服务器,只在客户端存储了sessionid(),来对接session信息。

2.基本流程

1.浏览器访问服务器
2.服务器session_start(),初始化session,生成sessionid,在服务器中生成文件名中带有sessionid的session文件,如果有数据要写入session,赋值给数组$_SESSION(暂时写入内存),页面程序执行完毕后,将session信息写入session文件
3.浏览器通过http协议获取到seesionid,存储到cookie
4.浏览器再次请求服务器,初始化session,根据请求头中的sessionid,查询到session文件,将session信息写入到数组$_SESSION,程序对$_SESSION进行增删改操作(内存中的操作), 页面程序执行完毕后,将$_SESSION信息写入session文件,顺延session的生命周期。
5.session消除,(1)session过期后会被php回收,(2)主动删除(session_destroy,session_unset)

3.关键点解析

1.session_start()

1.官方解析
   
   
  1. bool session_start ([ array $options = [] ] )
session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。
当会话自动开始或者通过 session_start() 手动开始的时候, PHP 内部会调用会话管理器的 open 和 read 回调函数。 会话管理器可能是 PHP 默认的, 也可能是扩展提供的(SQLite 或者 Memcached 扩展), 也可能是通过 session_set_save_handler() 设定的用户自定义会话管理器。 通过 read 回调函数返回的现有会话数据(使用特殊的序列化格式存储), PHP 会自动反序列化数据并且填充 $_SESSION 超级全局变量。
还未研究PHP底层实现,这段信息读的懵懵懂懂,应该就是把session信息写入到$_SESSION全局变量
2.个人理解
session_start(),初始化session,如果浏览器请求中并不包含sessionid,服务器会生成一个新的sessionid,声明一个全局数组$_SERVER,sessionid会返回给浏览器,并存储到cookie,提供给下次访问时使用,同时开始一个session的生命周期,如果请求中包含sessionid,并查询到了session文件,就读取文件内容,写入到$_SESSION,延长了session的生命周期。

2.全局数组$_SESSION

session_start(),初始化或是填充$_SESSION,以及后续的增删改这个数组,都是发生在内存当中的,请求结束后,才将$_SESSION内容写入相应的session文件

3.session手动删除

1.session_unset();
2.unset($_SESSION);
3.$_SESSION = array();
4.session_destroy();
5.干掉$_COOKIE[‘PHPSESSID’]

4.sessionid的URL传递

在cookie关闭的情况下,可以考虑使用url传递sessionid,
会话开始之后,可以使用 SID 常量。 如果客户端未提供会话 cookie,该常量的展开形式为 session_name=session_id, 反之,该常量为空字符串。因此,可以直接在 URL 中包含此常量的展开字符串而无需考虑会话 ID 的实际传送方式。
备注:可以使用 htmlspecialchars() 来打印 SID 常量的展开字符串以避免 XSS 相关的攻击。
案例
   
   
  1. <a href="index.php?<?php echo htmlspecialchars(SID); ?>">demo</a>






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值