php设置session 生命周期,php会话(session)生命周期概念介绍及设置更改和回收
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)生命周期概念介绍及设置更改和回收相关推荐
- php会话(session)生命周期概念介绍及设置更改和回收
http://www.169it.com/article/8429580816135935852.html https://my.oschina.net/jiec/blog/227252 sessio ...
- java session 生命周期_Java中httpsession生命周期
Java中httpsession生命周期 HttpSession会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束,那么从用户访问到退出浏览器它的生命周期过程如下: 1. 当浏览器A向服务 ...
- apache 设置session超时时间_深入分析 Session 和 Cookie,看这篇就对了
点击上方 "程序员小乐"关注, 星标或置顶一起成长 第一时间与你相约 每日英文 Promise yourself to be so strong that nothing can ...
- Cookie,Session解决用户的会话跟踪问题
一:Servlet细节 01.Servlet的映射细节 1):一个Servlet程序(WEB组件),可以配置多个<utl-patternt>,表示一个Servlet有多个资源名称2):一个 ...
- 前端学PHP之会话Session
前面的话 Session技术和Cookie相似,都是用来储存使用者的相关资料.但最大的不同之处在于Cookie是将数据存放在客户端的计算机之中,而Session则是将数据存放于服务器系统之下.Sess ...
- 【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 ...
- 在YARN上使用Flink有3种模式:Per-Job模式、Session模式和Application模式-1。job的轻巧提交设置
在YARN上使用Flink有3种模式:Per-Job模式.Session模式和Application模式. Flink作业运行 https://weread.qq.com/web/reader/1b9 ...
- WebService大讲堂之Axis2(6):跨服务会话(Session)管理
在<WebService大讲堂之Axis2(5):会话(Session)管理>一文中介绍了如何使用Axis2来管理同一个服务的会话,但对于一个复杂的系统,不可能只有一个WebService ...
- PHP中设置一个严格30分钟过期Session面试题的4种答案
今天在我的微博上发出一个问题: 我在面试的时候, 经常会问一个问题: "如何设置一个30分钟过期的Session?", 大家不要觉得看似简单, 这里面包含的知识挺多, 特别适合考察 ...
最新文章
- 计算机专业专业课的准备
- MooseFS使用问题分析总结
- ElasticSearch插件安装
- 783. 二叉搜索树节点最小距离
- 【剑指offer】面试题12:矩阵中的路径(Java)
- Django周总结一
- STM32CubeMX使用(六)之RTC及制作时间戳
- cs服务器网页管理端,sXe服务器端怎么管理
- [转帖]生成QQ/MSN/旺旺/SKYPE等在线状态图标(官方提供)
- 族谱程序php,族谱系统
- 分享按钮-新浪微博开放平台
- 红外遥控风扇改手机APP远程控制杂记
- // #ifdef MP-WEIXIN微信小程序无效,不执行
- 12星座都是什么性格?(python爬虫+jieba分词+词云)
- 卢克,学着去读源代码
- 智慧园区渠道商分销系统开发:打通全渠道信息流,驱动管理数字化透明
- 深入理解css基线与行高
- 【生活常识】照片的尺寸
- 新型压网技术—金刚网
- 中石油:皇家棋神(思维)
热门文章
- 荣耀9X/9X Pro外观谍照曝光:屏幕设计竟大不相同
- LG卖楼进行时:价值87.7亿元的双子座大厦将出手
- 共享单车扫不开却自动计费 行程显示骑到非洲:想要带你一起去旅行?
- 优衣库KAWS联名款遭哄抢 大打出手场面惨烈 是我不懂时尚了吗?
- 纽约首次尝试在大桥上识别车内司机面孔 失败得很彻底
- 支付宝信用卡还款也开始收费了!但还是比微信便宜2元...
- 把光标放在EditText中文本最后
- java 的SYSTEM类
- ie和谷歌在java中空格兼容,谷歌和IE浏览器的兼容性问题,相同的html结构竟然在两个浏览器不一样...
- git 取消 所有暂存_Git版本管理完全指南—学好Git一文足矣