http协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议。所谓无状态,指的是不会维护http请求数据,http请求是独立的,非持久的。而越来越复杂的WEB应用,需要保存一些用户状态信息。这时候,Session这种方案应需而生。PHP从4.1开始支持Session管理。

自 PHP 4.2.3 起用php启动 (文件修改时间)来代替了 atime,也就是说如果浏览器带有该session对应的cookie 该cookie的存活期中 在gc_maxlifetime设置的时间 间隔内刷新浏览器 则该session “永远”不会失效。由此还可以通过setcookie(session_name(),session_id(),time()+N)

来控制session生命周期,一旦cookie失效浏览器就“瞎”了,因为http本身是“无状态”协议,必须通过cookie来维持身份。

session相关概念

1) session id

用户session唯一标识符,随机生成的一串字符串,具有唯一性,随机性。主要用于区分其它用户的session数据。用户第一次访问web页面的时候,php的session初始化函数调用会分配给当前来访用户一个唯一的ID,也称之为session_id。

2) session data

我们把需要通过session保存的用户状态信息,称为用户session数据,也称为session数据。

3) session file

php默认将session数据存放在一个文件里。我们把存放session数据的文件称为session文件。它由特殊的php.ini设置session.save_path指定session文件的存放路径,centos5.3操作系统,php5.1默认存放在/var/lib/php/session目录中。用户session文件的名称,就是以sess_为前缀,以session_id为结尾命名,比如session id为vp8lfqnskjvsiilcp1c4l484d3,那么session文件名就是sess_vp8lfqnskjvsiilcp1c4l484d3。

4) session lifetime

我们把初始化session开始,直到注销session这段期间,称为session生命周期,这样有助于我们理解session管理函数。

与session存储相关php.ini设置

1) session.save_handler = file

用于读取/回写session数据的方式,默认是files。它会让PHP的session管理函数使用指定的文本文件存储session数据。

2) session.save_path =“/var/lib/php/session”

指定保存session文件的目录,可以指定到别的目录,但是指定目录必须要有httpd守护进程属主(比如apache或www等)写权限,否则无法回存session数据。当指定目录不存在时,php session环境初始化函数是不会帮你创建指定目录的,所以需要你手工建立指定目录。

它还可以写成这样session.save_path =“N;/path” 其中N是整数。这样使得不是所有的session文件都保存在同一个目录中,而是分散在不同目录。这对于服务器处理大量session文件是很有帮助的。(注:目录需要自己手工创建)

3) session.auto_start = 0

如果启用该选项,用户的每次请求都会初始化session。我们推荐不启用该设置,最好通过session_start()显示地初始化session。

与session回收相关的php.ini设置

1)session.gc_probability和session.gc_divisor

由这二个函数决定了启用GC的概率,默认是1/1000。也就是说,每一千次用户请求中有一次会启动GC回收session。启动GC进程不宜过于频繁。上面的例子,我们可以看到,它会每次检查session.save_path目录下每个文件的状态。这样会降低php的执行效率。

2) session.gc_maxlifetime = 1440

设置session存活时间,单位是秒。每次GC启动后, 会通过stat得到session文件最后访问的unix时间,通过现在时间减去文件最后访问时间之间大于session.gc_maxlifetime,则会删除该文件。

Session 是如何来判断客户端用户

它是通过 Session ID 来判断的, Session ID就是那个 Session 文件的文件名,Session ID 是随机生成的,因此能保证唯一性和随机性,确保Session 的安全。一般如果没有设置 Session 的生存周期,则 Session ID 存储在内存中,关闭浏览器后该 ID 自动注销,重新请求该页面后,重新注册一个 Session ID。如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 Session 生存期的角色。我们来手动设置 Session 的生存期:<?php

session_start();

// 保存一天

$lifeTime = 24 * 3600;

setcookie(session_name(), session_id(), time() + $lifeTime, "/");

?>

其实PHP5 Session还提供了一个函数 session_set_cookie_params(); 来设置PHP5 Session的生存期的,该函数必须在 session_start() 函数调用之前调用:<?php

// 保存一天

$lifeTime = 24 * 3600;

session_set_cookie_params($lifeTime);

session_start();

?>

1, PHP使用Cookie的方法传递session id。尽量不要使用GET方法传递session id,因为这样很不安全。

2, 可以通过setcookie()的方法,将客户端的session id的Cookie记录删除。

3, PHP GC进程由session初始化启动。但不是每一次用户请求都会被启动,它的启动概率默认是1/1000。过于频繁访问的网站,并发量大的网站,可减小PHP GC的启动频率。PHP GC回收session会降低php的执行效率。

4, 通过下面代码,优化session回收<?php

session_start();

if (isset($_SESSION['SESS_TIMEOUT'])) {

if ($_SERVER['REQUEST_TIME'] > $_SESSION['SESS_TIMEOUT']) {

setcookie(session_name(), session_id(), -1, '/');

session_unset();

session_destroy();

}

} else {

$_SESSION['SESS_TIMEOUT'] = $_SERVER['REQUEST_TIME'] + 3600;

}

php设置session 生命周期,php会话(session)生命周期概念介绍及设置更改和回收相关推荐

  1. php会话(session)生命周期概念介绍及设置更改和回收

    http://www.169it.com/article/8429580816135935852.html https://my.oschina.net/jiec/blog/227252 sessio ...

  2. java session 生命周期_Java中httpsession生命周期

    Java中httpsession生命周期 HttpSession会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束,那么从用户访问到退出浏览器它的生命周期过程如下: 1. 当浏览器A向服务 ...

  3. apache 设置session超时时间_深入分析 Session 和 Cookie,看这篇就对了

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 第一时间与你相约 每日英文 Promise yourself to be so strong that nothing can ...

  4. Cookie,Session解决用户的会话跟踪问题

    一:Servlet细节 01.Servlet的映射细节 1):一个Servlet程序(WEB组件),可以配置多个<utl-patternt>,表示一个Servlet有多个资源名称2):一个 ...

  5. 前端学PHP之会话Session

    前面的话 Session技术和Cookie相似,都是用来储存使用者的相关资料.但最大的不同之处在于Cookie是将数据存放在客户端的计算机之中,而Session则是将数据存放于服务器系统之下.Sess ...

  6. 【Web安全】Weak Session IDs (弱会话IDs)-burp进行Cookie劫持

    文章目录 1 Weak Session IDs(弱会话IDs) 2 DVWA-low 3 medium级别 4 high级别 1 Weak Session IDs(弱会话IDs) 0x01 何为Wea ...

  7. 在YARN上使用Flink有3种模式:Per-Job模式、Session模式和Application模式-1。job的轻巧提交设置

    在YARN上使用Flink有3种模式:Per-Job模式.Session模式和Application模式. Flink作业运行 https://weread.qq.com/web/reader/1b9 ...

  8. WebService大讲堂之Axis2(6):跨服务会话(Session)管理

    在<WebService大讲堂之Axis2(5):会话(Session)管理>一文中介绍了如何使用Axis2来管理同一个服务的会话,但对于一个复杂的系统,不可能只有一个WebService ...

  9. PHP中设置一个严格30分钟过期Session面试题的4种答案

    今天在我的微博上发出一个问题: 我在面试的时候, 经常会问一个问题: "如何设置一个30分钟过期的Session?", 大家不要觉得看似简单, 这里面包含的知识挺多, 特别适合考察 ...

最新文章

  1. 计算机专业专业课的准备
  2. MooseFS使用问题分析总结
  3. ElasticSearch插件安装
  4. 783. 二叉搜索树节点最小距离
  5. 【剑指offer】面试题12:矩阵中的路径(Java)
  6. Django周总结一
  7. STM32CubeMX使用(六)之RTC及制作时间戳
  8. cs服务器网页管理端,sXe服务器端怎么管理
  9. [转帖]生成QQ/MSN/旺旺/SKYPE等在线状态图标(官方提供)
  10. 族谱程序php,族谱系统
  11. 分享按钮-新浪微博开放平台
  12. 红外遥控风扇改手机APP远程控制杂记
  13. // #ifdef MP-WEIXIN微信小程序无效,不执行
  14. 12星座都是什么性格?(python爬虫+jieba分词+词云)
  15. 卢克,学着去读源代码
  16. 智慧园区渠道商分销系统开发:打通全渠道信息流,驱动管理数字化透明
  17. 深入理解css基线与行高
  18. 【生活常识】照片的尺寸
  19. 新型压网技术—金刚网
  20. 中石油:皇家棋神(思维)

热门文章

  1. 荣耀9X/9X Pro外观谍照曝光:屏幕设计竟大不相同
  2. LG卖楼进行时:价值87.7亿元的双子座大厦将出手
  3. 共享单车扫不开却自动计费 行程显示骑到非洲:想要带你一起去旅行?
  4. 优衣库KAWS联名款遭哄抢 大打出手场面惨烈 是我不懂时尚了吗?
  5. 纽约首次尝试在大桥上识别车内司机面孔 失败得很彻底
  6. 支付宝信用卡还款也开始收费了!但还是比微信便宜2元...
  7. 把光标放在EditText中文本最后
  8. java 的SYSTEM类
  9. ie和谷歌在java中空格兼容,谷歌和IE浏览器的兼容性问题,相同的html结构竟然在两个浏览器不一样...
  10. git 取消 所有暂存_Git版本管理完全指南—学好Git一文足矣