一、默认机制,用磁盘文件来实现PHP会话。php.ini配置:session.save_handler = files

  1、session_start()

  A、 session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,

  PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是根据php.ini的配置决定的,

  但是有的系统是 session.gc_probability =0,这也就是说概率是0,而是通过cron脚本来实现垃圾回收。

  session.gc_probability =1

  session.gc_divisor =1000

  session.gc_maxlifetime =1440//过期时间 默认24分钟

  //概率是 session.gc_probability/session.gc_divisor 结果 1/1000,

  //不建议设置过小,因为session的垃圾回收,是需要检查每个文件是否过期的。

  session.save_path =//好像不同的系统默认不一样,有一种设置是 “N;/path”

  //这是随机分级存储,这个样的话,垃圾回收将不起作用,需要自己写脚本

  B、 session会判断当前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE键值,

  这个值可以从php.ini找到

  session.name = PHPSESSID //默认值PHPSESSID

  C、 如果不存在会生成一个session_id,然后把生成的session_id作为COOKIE的值传递到客户端.

  相当于执行了下面COOKIE 操作,注意的是,这一步执行了setcookie()操作,COOKIE是在header头中发送的,

  这之前是不能有输出的,PHP有另外一个函数 session_regenerate_id() 如果使用这个函数,这之前也是不能有输出的。

  setcookie(session_name(),

  session_id(),

  session.cookie_lifetime,//默认0

  session.cookie_path,//默认’/’当前程序跟目录下都有效

  session.cookie_domain,//默认为空

  )

  D、 如果存在那么session_id =$_COOKIE[session_name];

  然后去session.savepath指定的文件夹里去找名字为’SESS’.session_id()的文件.

  读取文件的内容反序列化,然后放到$_SESSION中

  2、 为$_SESSION赋值

  比如新添加一个值$_SESSION[‘test’] =’blah'; 那么这个$_SESSION只会维护在内存中,当脚本执行结束的时候,

  用把$_SESSION的值写入到session_id指定的文件夹中,然后关闭相关资源. 这个阶段有可能执行更改session_id的操作,

  比如销毁一个旧的的session_id,生成一个全新的session_id.一半用在自定义 session操作,角色的转换上,

  比如Drupal.Drupal的匿名用户有一个SESSION的,当它登录后需要换用新的session_id

  if (isset($_COOKIE[session_name()])) {

  setcookie(session_name(),”,time() 42000,’/’);//旧session cookie过期

  }

  session_regenerate_id();//这一步会生成新的session_id

  //session_id()返回的是新的值

PHP的session的实现机制的更多相关文章

  1. HTTP Session、Cookie机制详解

    一.什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息. ...

  2. Session的工作机制详解和安全性问题(PHP实例讲解)

    我们先简单的了解一些http的知识,从而理解该协议的无状态特性.然后,学习一些关于cookie的基本操作.最后,我会一步步阐述如何使用一些简单,高效的方法来提高你的php应用程序的安全性以及稳定行. ...

  3. php中session的运行机制

    在PHP中session默认是以文件的形式存储于服务器的 而客户端和服务端则是通过session_id来完成握手的,默认情况下PHP会将session_id存储于cookie中,用户每次请求时该ses ...

  4. 修改session的存储机制

    <?php  //修改session的存储机制 //最起码应该有一个 读方法, 和一个 写方法. //1, 我们先去建立 读方法 和 写方法. //2, 告知session系统,使用我们的方法完 ...

  5. Tomcat中session的管理机制

    1.       请求过程中的session操作: 简述:在请求过程中首先要解析请求中的sessionId信息,然后将sessionId存储到request的参数列表中.然后再从 request获取s ...

  6. php重写session的存储机制

    重写session的存储机制 Session数据区 默认以 文件的形式存储与服务器操作系统临时目录中! 当 session数据区过多时,文件形式的存储,操作速度变慢.磁盘的读写(IO,input/ou ...

  7. php中session的生成机制、回收机制和存储机制探究

    1.php中session的生成机制 我们先来分析一下PHP中是怎么生成一个session的.设计出session的目的是保持每一个用户的各种状态来弥补HTTP协议的不足(无状态).我们现在有一个疑问 ...

  8. 浏览器禁用cookie后php如何保持session会话-use_trans_sid机制

    原文:浏览器禁用cookie后php如何保持session会话-use_trans_sid机制 为防止浏览器禁用cookie导致服务器会话无法保持,php开发了一个机制,该机制开启后,浏览器发起请求后 ...

  9. 138.更改session的存储机制

    修改session的存储机制: 默认情况下,session数据时存储到数据库中,当然也可以将session数据存储到其他地方.可以通过设置SESSION_ENGINE来更改session的存储位置,这 ...

  10. session垃圾回收机制

    主要有以下三个参数 session.gc_maxlifetime:session生命周期 session.gc-devisor:启动session回收机制频率的被除数(分母) session.gc_p ...

随机推荐

  1. [ERROR] InnoDB: Trying to access page number 7 in space 957, space name XXX which is outside the tablespace bounds

    早上,测试说演示环境mysql老实断开重连,一update就挂,经查日志,有如下异常: 2017-04-05T23:13:01.729250+08:00 17065 [ERROR] InnoDB: T ...

  2. 【题解】Luogu P4344 [SHOI2015]脑洞治疗仪

    原题传送门:P4344 [SHOI2015]脑洞治疗仪 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 珂朵莉树好题啊 我一开始一直Re65 后来重构代码就ac了,或许是rp问题 ...

  3. ACM札记

    1. 逗号表达式 在“计蒜客“的ACM教程中,看到这样一段很好的代码: int n; while (scanf("%d", &n), n) { //do something ...

  4. k8s API sample

    Declarative API k8s: cluster-api Introduction to Kubernetes Cluster-API Project Declarative Manageme ...

  5. 20145308 《网络对抗》 Web应用 学习总结

    20145308 <网络对抗> Web应用 学习总结 实验内容 (1)Web前端HTML (2)Web前端javascipt (3)Web后端:MySQL基础:正常安装.启动MySQL,建 ...

  6. rsync命令解析

    !rsync同步模式sync在进行同步或备份时,使用远程shell,或TCP连接远程daemon,有两种途经连接远程主机.shell模式,不需要使用配置文件,也不需要启动远端rsync.远程传输时一般 ...

  7. sha0dow0socks

    秋水的一键安装脚本 #!/usr/bin/env bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bi ...

  8. 如何安装整个linux系统中所需要的mp3播放库插件? 可以在安装rpmfusion仓库后直接通过dnf install进行按照就可以了

    在vi的界面中, 前面的数字, 表示一行. 而对于中文而言, 并不一定是"一个文本行"就是一行, 而是以 回车(硬回车)为标志, 来判定一行的. 而dd, yy等也是以" ...

  9. SpringBoot 超时设置

    1.RestTemplate超时 设置配置HttpComponentsClientHttpRequestFactory中的RequestConfig属性 RestTemplateConfig: imp ...

  10. 【做题】CF119D. String Transformation——KMP

    题意:有两个字符串\(a,b\),下标从\(0\)开始.求数对\((i,j)\)满足\(a[i+1:j] + r(a[j:n]) + r(a[0:i+1]) = b\),其中\(r(s)\)表示字符串 ...