php 会话管理(SESSION管理)

关于会话的个人理解:当你打开一个网站后,在一个有效期内(会话有效期内)进行的一系列操作,这是一个会话的完整过程,如何理解呢。

1.不登录情况下的会话

有的网站当你一打开的时候就会给你分配一个会话ID,以跟踪你接下来的一系列操作。把它们有效的关联起来,在页面与页面之间共享一些数据。(也许不共享数据),当你关闭浏览器的时候,此会话结束。或者你长时间未操作,此会话已过期,服务器已把会话状态清除,那么此会话也算结束。不登录的情况下谈论会话其实没有什么意义。

2.登录情况下的会话

因为登录了,所以有用户信息,在页面之间要共享用户数据的。所以这时,从你登录到退出,或者没有退出到直接关闭浏览器,这算一个完整的会话。其实理论上说,如果没有退出,在不长的时间间隔后再次打开同一个网站,上次的会话没有过期的话,这也应该算是同一次会话。

php管理会话的流程:

1.开启会话

session_start();

此函数的调用会产生一个session文件,保存在服务器。并且把session id 以cookie的形式发送给客户端。以保证在后续的操作中使用同一个session文件。

php会按照session文件名产生规则产生一个文件名,并保存在指定的路径。这些行为受相关的session配置影响。

为了能清晰的描述此过程,我们先把产生的文件名以及发送的cookie拿过来

服务器向浏览器发送的cookie可能类似这样:
Set-Cookie:PHPSESSID=38ledu4nldfsagbfbl4mgv1101; path=/

而服务器上产生的session文件可能类似这样:
sess_38ledu4nldfsagbfbl4mgv1101


本文所提及的session相关配置都可以在php.ini中找到,而且可以修改它。

session.name  默认为 PHPSESSID 大家已经看到了这个配置的值会作为cookie键值对中的键发送到浏览器,值就是session id当调用session_start()的时候,PHP 内部会调用会话管理器的 open 和 read 回调函数,会话管理器可以是php的默认会话管理器,可以是扩展提供的其他管理器,也可能是用户自定义的,此处以php默认会话管理器为例。

php默认的会话管理器的open函数受session.save_handler = files配置的影响,此处理解为以读写文件的方式保存数据。文件名默认是sess_前缀加SessionHandler::create_sid生成的session id ,SessionHandler::read 函数会从session文件中读取数据,并反序列化存放到$_SESSION超全局数组中,当开启一个新的会话时,当然是读不出数据的,重用一个已存在的会话,则会读出数据,这样就可以利用$_SESSION在页面间通信了。当脚本执行完毕的时候会调用会话管理器的write函数将此脚本中的一些$_SESSION改变,写入session文件。

2.设置会话数据

由于php在session和cookie方面做的比较智能化。我们要设置session数据时只需向$_SESSION数组添加对应的键值对,当脚本执行完毕自然就会把数据保存到session文件。

3.使用会话数据

上面已经提到php在cookie方面做的比较智能。当有session.name对应的cookie随访问发送到服务器时。php会自动找到对应的session文件,并将其数据存放在$_SESSION数组中。

4.销毁会话数据

session_destroy 可以销毁服务器端的会话数据。但是如果用户主动退出的话,更安全的做法是把cookie也删除。否则cookie中的session id容易泄露,当你登录的情况下,别人用同样的session id访问网站,就会得到跟你一样的用户信息了。

理解过程很重要。啰嗦了这么多,其实只是想让自己搞明白一个问题,既然php有默认的会话管理器为何还要有

session_set_save_handler可以自定义会话处理器,原来这种session管理机制在大型网站中有很大的性能问题,以此来引出如果需要自定义session管理类的话,要遵循会话管理流程,或者是要把session存储在memcached也要明白会话管理的原理才可以作进一步的扩展。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梧桐深院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值