当前位置:  编程技术>php

php session机制详解(生成机制、回收机制与存储机制)

    来源: 互联网  发布时间:2014-08-30

    本文导语:  本节内容: php session机制 php中session的用法,是很多php教程中必讲的内容,本节我们深入探讨下php中session的生成机制、回收机制与存储机制,把对session的认识提高一个层次。 以下内容由(www.)收集整理,学习php,请关注本站...

本节内容:
php session机制

php中session的用法,是很多php教程中必讲的内容,本节我们深入探讨下php中session的生成机制、回收机制与存储机制,把对session的认识提高一个层次。

以下内容由(www.)收集整理,学习php,请关注本站的php编程栏目。

1、php中session的生成机制

php中是怎么生成一个session的?

设计出session的目的是保持每一个用户的各种状态来弥补http协议的不足(无状态)。
session是保存在服务器的,既然它用于保持每一个用户的状态那它利用什么来区别用户的呢?此时就得借助cookie了。
当在代码中调用session_start();时,php会同时往session的存放目录(默认为/tmp/)和客户端的cookie目录各生成一个文件。

session文件名称像这样:

格式为sess_{SESSIONID} ,这时session文件中没有任何内容,当在session_start();添加了这两行代码:
 

$_SESSION['name'] = 'wanchun0222';
$_SESSION['blog'] = 'coderbolg.net';

这时文件就有内容了:
 

name|s:11:"wanchun0222";blog|s:13:"coderbolg.net";

这时再看看cookie:

可以看到服务器为我们自动生成了一个cookie,cookie名称为"PHPSESSID",cookie内容是一串字符,其实这串字符就是{SESSIONID}。也许你已经明白了,当我们使用session时,PHP就先生成一个唯一的SESSIONID号(如2bd170b3f86523f1b1b60b55ffde0f66),再在服务器的默认目录下生成一个文件,文件名为sess_{SESSIONID},同时在当前用户的客户端生成一个cookie,内容已经说过了。这样PHP会为每一个用户生成一个SESSIONID,也就是说一个用户一个session文件。

PHP第一次为某个用户使用session时就向客户端写入了cookie,当这个用户以后访问时,浏览器会带上这个cookie,PHP在拿到cookie后就读出里面的SESSIONID,拿着这个SESSIONID去session目录下找session文件。找到后在调用$_SESSION['blog']的时候显示出来。

2、php中session的过期回收机制
理解了session的生成及工作原理,发现在session目录下会有许多session文件。

当然这些文件一定不是永远存在的,PHP一定提供了一种过期回收机制。
在php.ini中session.gc_maxlifetime为session设置了生存时间(默认为1440s)。
如果session文件的最后更新时间到现在超过了生存时间,这个session文件就被认为是过期的了。
在下一次session回收的时候就会被删除。那下一次session回收是在什么时候呢?这和php请求次数有关的。
在php内部机制中,当php被请求了n次后就会有一次触发回收机制。

到底是请求多少次触发一次是通过以下两个参数控制的:
 

session.gc_probability = 1
session.gc_divisor = 100

这是php.ini的默认设置,意思是每100次PHP请求就有一次回收发生。概率是 gc_probability/gc_divisor 。我们了解了服务器端的session过期机制,再来看看客户端的cookie的过期机制。
如果cookie失效了浏览器自然发送不了cookie到服务器,这时即使服务器的session文件存在也没用,因为PHP不知道要读取哪个session文件。

PHP的cookie过期时间是在创建时设置的,那么PHP在创建session的同时为客户端创建的cookie的生命周期是多久呢?
这个在php.ini中有设置:session.cookie_lifetime 。这个值默认是0,代表浏览器一关闭SESSIONID就失效。
把session.gc_maxlifetime和session.cookie_lifetime设置成同一个值就可以控制session的失效时间了。

3、php中session的客户端存储机制
如果用户关闭了cookie,那session就完全没法工作了。
php中session的客户端存储机制只有cookie吗?不是的。既然sessionid 不能通过cookie传递到各个页面,那还有另一个法宝,就是通过页面get传值的方式。
php可以在cookie被禁用时自动通过get方式跨页传递sessionid,前提是设置php.ini的session.use_trans_sid为1。

这时当在客户端禁用了cookie时使用了session,并在当前页面通过点击链接到另一页面时,php会自动在链接上添加sessionid参数,像这样:nextpage.php?sessionid=2bd170b3f86523f1b1b60b55ffde0f66。

缺点:不够安全。


    
 
 

您可能感兴趣的文章:

  • php中Session的生成机制、回收机制和存储机制探究
  • php反射机制获取php类的所有方法
  • php垃圾回收机制解析
  • 简单的php缓存类分享 php缓存机制
  • php析构函数与垃圾回收机制
  • php中session过期时间设置及session回收机制介绍
  • PHP中copy on write写时复制机制介绍
  • PHP中的插件机制原理和实例
  • php自动加载autoload机制实例分析
  • php递归函数执行机制实例分享
  • php自动加载autoload机制示例分享
  • PHP缓存机制Output Control详解
  • PHP中的reflection反射机制测试例子
  • 实例介绍PHP的Reflection反射机制
  • PHP Session机制简介及用法
  • php autoload机制用法解析
  • windows的文件系统机制引发的PHP路径爆破问题分析
  • PHP OPP机制和模式简介(抽象类、接口和契约式编程)
  • Session的工作机制详解和安全性问题(PHP实例讲解)
  • php session 原理详解,用法介绍以及如何设置过期时间
  • PHP exif扩展方法开启详解
  • PHP正则匹配图片并给图片加链接详解
  • php mail to 配置详解
  • php运行环境配置详解
  • Windows server 2008搭建php运行环境图文详解(php5.3)
  • PHP中替换键名的简易方法示例详解
  • php 获取完整url地址实例详解
  • php实例分享之通过递归实现删除目录下的所有文件详解
  • PHP $_FILES中error返回值详解
  • centos源码编译php5 mcrypt模块步骤详解
  • php事务处理实例详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php中session_id()函数详细介绍,会话id生成过程及session id长度
  • PHP源码自动生成插件 PHP Source Plugin
  • php生成订单号的类 php订单号生成代码
  • php微博短网址算法 php生成短网址的实现代码
  • PHP 对象生成器 POG
  • php生成短网址 仿微博短网址生成代码
  • php生成数组与php全组合算法
  • 生成假数据的PHP库 Faker
  • php生成唯一标识符的代码
  • PHP代码生成器 PHPGEN
  • php guid生成函数 php生成唯一标识符
  • php生成excel中的列序号
  • PHP验证码生成脚本 Securimage
  • php生成数组的使用示例 php全组合算法
  • PHP生成静态文件简单示例
  • php生成指定位数(长度)的随机字符串
  • PHP生成PDF的类 FPDF
  • php生成短网址示例代码
  • PHP静态网站生成工具 Phrozn
  • PHP生成自定义长度随机字符串的函数分享
  • php动态生成函数示例
  • .net/c#/asp.net iis7站长之家
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • php输入流php://input使用示例(php发送图片流到服务器)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • PHP转换器 HipHop for PHP
  • PHP去除html标签,php标记及css样式代码参考
  • PHP 框架 Pop php
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP的JavaScript框架 PHP.JS


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3