Session即回话,指一种持续性的、双向的连接。Session和Cookie在本质上没有什么区别,都是针对HTTP协议的局限性而提出的一种保持客户端和服务器间保持会话连接状态的机制。

Session的实现可以有多种,如URL重写、Cookie,通过在Cookie中存储sessionID实现Session传递。

PHP 的 Session 默认是通过文件的方式实现。

Session通过一个称为 PHPSESSID 的 Cookie 和服务器联系。Session 是通过 sessionID 判断客户端用户的,即Session 文件的名称。

一个访问者访问你的 web 网站将被分配一个唯一的 id, 就是所谓的会话 id. 这个 id 可以存储在用户端的一个 cookie 中,也可以通过 URL 进行传递. Session会话用来追踪每个用户的会话,使用服务器生成的SessionID进行标识,用以区分用户。Session默认以文件的形式存放在服务器的磁盘目录中,SessionID存放在服务器内存和客户机的Cookie里面。这样,当用户发出请求时,服务器将用户Cookie里面记录的SessionID和服务器磁盘中的SessionID进行比对,从而找到这个用户对应的Session文件进行操作。所以,如果客户机禁止Cookie的话,Session也不能使用。
 
session_start()开启会话,生成session_id,再用session_id()输出:
session_start();
$session_id = session_id();
$_SESSION['name'] = 1;
 
通过已生成的session_id,开启会话,从而获取session中存储的值:
session_id($session_id);
session_start();
print_r($_SESSION['name']);
 
当session过多,一般磁盘文件数超过2000时,读写这个目录就会很慢。
1、可以做session文件的目录分级配置
session.save_path = "N;MODE;/path" 
N:表示要设置的目录级别,
MODE:表示目录的权限属性,默认是600,
/path:表示session文件存放的根目录路径
session.save_path ="1;f:/wamp64/tmp"
表示在f:/wamp64/tmp目录下再生成1个子目录来保存session文件,注意PHP默认是不会自动创建文件夹的,需手工创建(脚本),目录名以0~9和a~z共36个可选单字组成,如,f:/wamp64/tmp/a,26位的session_id根据第1位的字符去找到对应目录存储
如果使用子目录来存储会话文件,那么垃圾回收机制没法自动发生,可使用脚本,
如,find /path/to/sessions -cmin +24 -type f | xargs rm 
 
session回收机制(被动回收):
参数:
session.cookie_lifetime=0, 设定session_id在客户端cookie中的有效期限,单位秒,0表示到关闭浏览器,默认为0;
session.gc_maxlifetime=1440,设定session文件有效时间,单位秒
默认配置,当用户关闭浏览器,浏览器cookie中PHPSESSID失效清除,但服务器的sess_xxx文件并不会立马删除,
而是通过 当前时间减去session文件修改时间是否大于 gc.max_lifetime 来判断是否过期,若为true,则垃圾回收程序会清除session文件目录下所有过期的session文件。
失去客户端session_id引用的服务器session文件,不能在访问就一定会过期被清除,反之,若没有失去引用,只要用户有一个动作,哪怕是刷新,都会更新session文件的修改时间(前提是session文件要有数据)。
'garbage collection' process is started on every session initialization
注意,启动垃圾回收程序是在session_start()函数调用时,有一定概率(session.gc_probability/session.gc_divisor)触发的。

session一二事的更多相关文章

  1. Hadoop 一二事(1) - 简单介绍与杂谈

    大数据大数据,身边很多朋友都在谈大数据,Big Data!!! 到底是什么,用来干嘛的,也很少有人说得出一二,那今天开始就简单说说这一二事吧 hadoop 的来源:是作者女儿的一个玩具 - 一只黄色的 ...

  2. nginx 一二事(1) - 简单图片服务器解决方案

    最近经常有人问图片上传怎么做,有哪些方案做比较好,也看到过有关于上传图片的做法,但是都不是最好的 今天再这里简单讲一下上传图片以及图片服务器的大致理念 如果是个人项目或者企业小项目,仅仅只有十来号人使 ...

  3. nginx 与 tomcat 集群 一二事 (0) - 简单介绍

    最近看了nginx以及tomcat的集群,通俗的做一下简单总结吧 nginx 是一个http服务器,是由俄罗斯人发明的,目前主流的服务器,作为负载均衡服务器,性能非常好,最高支持5万个并发连接数,在淘 ...

  4. Spring 一二事(4) - 单例

    spring bean配置后再默认情况下是单例的,如果需要配置可以选择 prototype, request, session和global session 在配置spring mvc的action时 ...

  5. 用户登录之cookie信息安全一二事

    大家都知道用户登陆后,用户信息一般会选择保存在cookie里面,因为cookie是保存客户端, 并且cookie可以在客户端用浏览器自由更改,这样将会造成用户cookie存在伪造的危险,从而可能使伪造 ...

  6. mybatis 一二事(1) - 简单介绍

    mybatis呢是一个orm数据库框架,非常适合新人学,门槛相对较低 本人呢曾经是先做的hibernate,后接触的mybatis,接触mabatis前我比较抵触,为啥呢, 当时喜欢hibernate ...

  7. H5一二事

    先回顾一下WEB技术的几个阶段 Web 1.0 内容为主,主要流行HTML和CSS Web 2.0 动态网页,流行AJAX/JavaScript/DOM H5 时代,WEB开发回归富客户端 那么H5肯 ...

  8. RabbitMQ 一二事(5) - 通配符模式应用

    之前的路由模式是通过key相等来匹配 而通配符,顾名思义,符合条件,则进行消息匹配发送 将路由键和某模式进行匹配.此时队列需要绑定要一个模式上. 符号“#”匹配一个或多个词,符号“*”匹配不多不少一个 ...

  9. RabbitMQ 一二事(4) - 路由模式介绍

    路由模式其实和订阅模式差不多,只不过交换机的类型不同而已 路由模式可以用下图来表示,比订阅模式多了一个key,举个栗子就是根据不同的人群来订阅公众号,来收取消息 根据不同的key来获取不同的消息 最简 ...

随机推荐

  1. CICD 基础

    代码测试覆盖率 最近在负责相关插件的集成,今天第一次接触到"代码覆盖率"这个概念,那么,就做些简单的笔记吧. 好文 如何提高一个研发团队的"代码速度"? 代碼覆 ...

  2. 题解——洛谷P3812【模板】线性基

    学了下线性基 使用好像并不复杂 打了板子 但是要注意位运算优先级 #include <cstdio> #include <algorithm> #include <cst ...

  3. [easyui] - 在easyui的table中展示提示框

    因为在easyui的table中字段过多,而无法展示全时,被迫只能使用这个方法. 使用方式: 在 $('#dg').datagrid({ 后的 queryParams: form2Json('sear ...

  4. Images之Dockerfile中的命令2

    COPY COPY has two forms: COPY [--chown=<user>:<group>] <src>... <dest> COPY ...

  5. JavaScript(ES5)知识点梳理

    数据类型(null undefined number string boolean object)数据类型之间的相互转化(Boolean Number String parseInt parseFlo ...

  6. js实现可视化区域内拖拽

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  7. “AI”项目日记

    前言:为了更好的以“实践”巩固“学习”,利用空余时间,打造一个属于自己的项目 项目目标: 1.将学习的知识用项目实践,在实践过程中去领悟新的知识 2.高度自由,根据不同时期的学习目标,融入项目中去用代 ...

  8. ES6的新API如Promise,Proxy,Array.form(),Object.assign()等,Babel不能转码, 使用babel-polyfill来解决

    Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator.Generator.Set.Maps.Proxy.Reflect.Symbol.Promis ...

  9. SQL关于WHERE 的计算次序

    WHERE可包含任意数目的AND和OR操作符.允许两者结合以进行复杂 和高级的过滤. 但是OR和AND操作符是有先后次序的. 比如,原意是想找出 3班和5班年龄为21岁的同学,使用 :SELECT * ...

  10. 求1000以内的质数c语言

    之前在做求1000以内的质数的时候,我们一般能想到的就是从3~(根号)no,逐一和no除,如果存在某个i使得  i|no成立的话,说明no不是质数(“i|no”是i整除除no的意思): 在<明解 ...