session是什么:

session即会话,是一种持续性,双向的连接。

session和cookie在本质上没什么区别,都是针对http协议的局限性提出的一种保持客户端和服务端会话状态的机制。

session的实现

1.cookie : 通过在cookie中存储sessionID

2.url重写:index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381

(通过session.use_cookies来控制使用哪一种方式)

session的工作原理:

sessionID实际上在客户端和服务器端是通过HTTP Request(发送cookie)和HTTP Response(设置cookie)传来传去。

sessionID通过一定的算法生成,保证唯一性和随机性,以确保session安全。

当sessionID销毁后,重新请求该页面,会重新注册一个sessionID,所以同一个浏览器和同一个服务器之间sessionID也是随机的。

session的保存:

默认文件的形式保存在服务器的/tmp下,文件名类似:sess_01aab840166fd1dc253e3b4a3f0b8381,后边是随机32位编码字符串。

格式:变量名|类型:长度:值,例如username|s:3:"lee";last_date|s:10:"2015-01-02";

session的使用:

session_start()必须在程序最开始执行,前边不能有任何输出,否则出现以下警告:

Warning:Cannot send session cookie - headers already send

解决:

办法1:在php.ini中修改session.auto_start = 1,自动开始,不需要session_start()

办法2(在不确定前边是否有输出的时候):

ob_start();  //开启output_buffering
session_start();
$_SESSION["user"]="username";
ob_end_flush();

session的回收:

在php.ini中设置session.gc_maxlifetime,session的最大生存时间。

session的回收是通过检查/tmp/sess_xxx文件的最后修改时间和当前时间的差值。

如果”最后的修改时间”到”现在”超过了gc_maxlifetime(默认是1440)秒,这个session文件就被认为是过期了,在下一次session回收的时候,如果这个文件仍然没有被更

过,这个session文件就会被删除(session就过期了)。

默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的

//概率是gc_probability/gc_divisor 

session.gc_probability = 1 //通过调大这个参数提高回收率,但太大了会增加负载

session.gc_divisor = 100 

注意1:

假设这种情况gc_maxlifetime=120,如果某个session文件最后修改时间是120秒之前,那么在下一次回收(1/100的概率)发生前,这个session仍然是有效的。

保证精确的session删除时间方法:在session中记录最后登录时间,每次访问都判断是否超过时间,超过就退出,否则更新最后登录时间。

(这是面试时问题:怎样能保证session在20分钟过期?因为本身的gc回收是有一定概率的)

注 意2:

如果你的session使用session.save_path中使用别的地方保存session,session回收机制有可能不会自动处理过期 session文件。这时需要定时手动(或者crontab)删除过期的session

cd /path/to/sessions; find -cmin +24 | xargs rm 

深刻认识一下session的更多相关文章

  1. session和cookie的最深刻理解

    先说session 对SESSION的争论好象一直没有停止过,不过幺麽能理解SESSION的人应该占90以上.但还是讲讲,别嫌老~ 有一些人赞成用SESSION,有一些人不赞成.但这个问题到底要怎么说 ...

  2. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  3. [转载]深入理解HTTP Session

    深入理解HTTP Session   session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的 ...

  4. php session的理解与使用

    session学习参考链接:1.http://www.w3cschool.cn/php_sessions.html:2.http://php.net/manual/zh/book.session.ph ...

  5. express 框架之session

    一.什么是session? 最近在学习node.js 的express框架,接触到了关于session方面的内容.翻阅了一些的博客,学到了不少东西,发现一篇博文讲的很好,概念内容摘抄如下: Sessi ...

  6. HTTP Session原理

    深入理解HTTP Session   session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的 ...

  7. Php学习之SESSION反序列化机制

    在php.ini中存在三项配置项:session.save_path="" --设置session的存储路径session.save_handler="" -- ...

  8. session 原理 数据结构

    [原创]转载请保留出处:shoru.cnblogs.com 晋哥哥的私房钱 引言 在web开发中,session是个非常重要的概念.在许多动态网站的开发者看来,session就是一个变量,而且其表现像 ...

  9. ASP.NET 之深入浅出Session和Cookie

    在做人事档案管理系统中,对于Session和Cookie的使用后理解更加深刻了,下面对本知识点总结学习. Session是什么? 简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有 ...

随机推荐

  1. 【BZOJ 2194】快速傅立叶之二

    随便代换一下把它变成多项式乘法,及$C[T]=\sum_{i=0}^{T}A[i]×B[T-i]$这种形式,然后FFT求一下就可以啦 #include<cmath> #include< ...

  2. java 读取数据库中表定义

    将数据库中的表信息读取出来 package com.cloud.smartreport.utils; import java.sql.Connection; import java.sql.Datab ...

  3. Maven-setting.xml详解

    settings.xml对于maven来说相当于全局性的配置,用于所有的项目,当Maven运行过程中的各种配置,例如pom.xml,不想绑定到一个固定的project或者要分配给用户时,我们使用set ...

  4. url 字符串中的参数信息

    /// <summary>        /// 分析 url 字符串中的参数信息        /// </summary>        /// <param nam ...

  5. CA 证书

    1.ubuntu curl 命令报错(CA) kamil@vm-ubuntu:~$ curl https://szxyzs.vanke.com/DataCenter/datacenter/api cu ...

  6. VS调试网页的localhost

    那个像是iis的服务器叫: 只能访问自己的localhost,也就是127.0.0.1是回环地址(LoopBack),就是表示访问本机,是不用经过网卡的. 别名就是localhost.这种地址无法再外 ...

  7. [学习笔记]四边形不等式优化DP

    形如$f[i][j]=min{f[i][k]+f[k+1][j]}+w[i][j]$的方程中, $w[\;][\;]$如果同时满足: ①四边形不等式:$w[a][c]+w[b][d]\;\leq\;w ...

  8. MapReduce基础知识

    hadoop版本:1.1.2 一.Mapper类的结构 Mapper类是Job.setInputFormatClass()方法的默认值,Mapper类将输入的键值对原封不动地输出. org.apach ...

  9. 【BZOJ-1076】奖励关 概率与期望 + 状态压缩DP

    1076: [SCOI2008]奖励关 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1602  Solved: 891[Submit][Status ...

  10. 【BZOJ-2115】Xor 线性基 + DFS

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2142  Solved: 893[Submit][Status] ...