SESSION运行原理(见过的比较好的SESSION介绍 转载)

1,设置sessio保存形式:

[Session]

session.save_handler = files

对应php函数:bool session_set_save_handler (callable $open , callable $close ,callable $read ,callable$write , callable $destroy , callable $gc [,callable $create_sid ] )

2,session_start()是session机制的开始,它有一定几率开启垃圾回收,因为SESSION是存放在文件中,PHP自身的垃圾回收是无效的。SESSION回收是要删除文件的,这个概率是根据php.ini的配置决定,但是有的系统session.gc_probability=0,也就是说概率是0,而是通过crontab脚本来实现来及回收。

php配置:

session.gc_probability=1,//概率

session.gc_divisor=1000,//概率因子

session.gc_maxlifetime=1440 //过期时间

session.save_path="N;/path":这是随机分级存储,这样的话垃圾回收将不起作用,需要自己写脚本

3,session会判断当前是否有$_COOKIE[session_name()];session_name()返回的是保存保存session_id的COOKIE键值,这个值在php.ini 中对应:session.name=PHPSESSID

$_COOKIE[session_name()]=session_id();

4,session_id([$id])

作用:1,如果$id不为空,作用是设置当前session的id,注意要在session_start()之前

2,如果$id为空,作用是获取session的id

5,如果不存在session_id,则session_start()会生成一个session_id,然后把生成的session_id做为COOKIE的值传递到客户端,相当于执行了下面的COOKIE操作,注意,这一步执行了setcookie(),COOKIE是在header头中发送的,这之前是不能有输出的,session_register_id()也可以生成session_id,这个函数之前也不能有输出

setcookie(

session_name(),

session_id(),

session.cookie_lifetime,

session.cookie_path,

session.cookie_domain

)

如果存在,则session_id=$_COOKIE[session_name()],然后去session.save_path指定的文件夹里去找名为‘SESS_‘.session_id()的文件,读取文件的内容,反序列化,然后放到$_SESSION中。

6. 为$_SESSION赋值

比如新添加一个值$_SESSION[‘test‘] = ‘blah‘; 那么这个$_SESSION只会维护在内存中,当脚本执行结束的时候,把$_SESSION的值写入到session_id指定的文件夹中,然后关闭相关资源.这个阶段有可能执行更改session_id的操作,比如销毁一个旧的的session_id,生成一个全新的session_id.一半用在自定义 session操作,角色的转换上比如Drupal.Drupal的匿名用户有一个SESSION的,当它登录后需要换用新的session_id

if (isset($_COOKIE[session_name()])) {

setcookie(session_name(), ‘‘, time() - 42000, ‘/‘);//旧session cookie过期

}

session_regenerate_id();//这一步会生成新的session_id

//session_id()返回的是新的值

3.写入SESSION操作

在脚本结束的时候会执行SESSION写入操作,把$_SESSION中值写入到session_id命名的文件中,可能已经存在,可能需要创建新的文件。

* 4. 销毁SESSION

SESSION发出去的COOKIE一般属于即时COOKIE,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期,比如 退出登录,而不是关闭浏览器,那么就需要在代码里销毁SESSION,方法有很多,

o 1. setcookie(session_name(), session_id(), time() - 8000000, ..);//退出登录前执行

o 2. usset($_SESSION);//这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据。

o 3. session_destroy();//这个作用更彻底,删除$_SESSION 删除session文件,和session_id

当不关闭浏览器的情况下,再次刷新,2和3都会有COOKIE传过来,但是找不到数据

2.session.save_handler = user

用户自定义session处理机制,更加直观

* session_set_save_handler(‘open‘, ‘close‘, ‘read‘, ‘write‘, ‘destroy‘, ‘gc‘);

*1.session_start(),

执行open($save_path, $session_name)打开session操作句柄

$save_path 在session.save_handler = files的情况下它就是session.save_path,

但是如果用户自定的话,这个两个参数都用不上,直接返回TRUE

执行read($id)从中读取数据.//这个参数是自动传递的就是session_id(),可以通过这个值进行操作。

* 2.脚本执行结束

执行write($id, $sess_data) //两个参数,很简单

* 3.假如用户需要session_destroy()

先执行destroy.在执行第2步

 一个实际例子:
      //SESSION初始化的时候调用
      function open($save_path, $session_name)
      {
        global $sess_save_path;
        $sess_save_path = $save_path;
        return(true);
      }
      //关闭的时候调用
      function close()
      {
        return(true);
      }
      function read($id)
      {
        global $sess_save_path;
        $sess_file = "$sess_save_path/sess_$id";
        return (string) @file_get_contents($sess_file);
      }
      //脚本执行结束之前,执行写入操作
      function write($id, $sess_data)
      {
        echo "sdfsf";
        global $sess_save_path;
        $sess_file = "$sess_save_path/sess_$id";
        if ($fp = @fopen($sess_file, "w")) {
          $return = fwrite($fp, $sess_data);
          fclose($fp);
          return $return;
        } else {
          return(false);
        }
      }
      function destroy($id)
      {
        global $sess_save_path;
        $sess_file = "$sess_save_path/sess_$id";
        return(@unlink($sess_file));
      }
      function gc($maxlifetime)
      {
        global $sess_save_path;
        foreach (glob("$sess_save_path/sess_*") as $filename) {
          if (filemtime($filename) + $maxlifetime < time()) {
            @unlink($filename);
          }
        }
        return true;
      }
时间: 2024-10-10 23:10:42

SESSION运行原理(见过的比较好的SESSION介绍 转载)的相关文章

第四篇 mybatis的运行原理(1):重要组件的介绍

一.组件介绍 相比其他框架,mybatis的组件构成还是相对简单的,下面是网络上比较常见的一张图,关于mybatis的执行流程,其中是mybatis的最常用的组件:   在来学习mybatis的源码和底层原理之前,先来了解各大组件的作用和生命周期:    (1)SqlSessionFactoryBuilder                  SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory的,通过它可以构建多个Sqls

Memcached概念、作用、运行原理、特性、不足简单梳理(1)

http://www.cnblogs.com/yinrq/p/5013742.html Memcached概念.作用.运行原理.特性.不足简单梳理(1) 大家可能对memcached这种产品早有了解,或者已经应用在自己的网站中了,但是也有一些朋友从来都没有听说过或者使用过.这都没什么关系,本文旨在从各个角度综合的介绍这种产品,尽量深入浅出,如果能对您现在或以后的工作有所帮助,笔者将感到无比荣幸. Memcached概念.作用.运行原理.特性.不足简单梳理(1) Memcached下载安装.NET

ASP.NET的运行原理与运行机制 -转

转自:原文  http://www.cnblogs.com/sntetwt/archive/2011/03/11/1980500.html 当一个HTTP请求到服务器并被IIS接收到之后,IIS首先通过客户端请求的页面类型为其加载相应的.dll文件,然后在处理过程中将这条请求发送给能够处理这个请求的模块.在ASP.NET 3.5中,这个模块叫做HttpHandler(HTTP处理程序组件),之所以.aspx文件可以被服务器处理,就是因为在服务器端有默认的HttpHandler专门处理.aspx文

iis6.0与asp.net的运行原理

这几天上网翻阅了不少前辈们的关于iis和asp.net运行原理的博客,学的有点零零散散,花了好长时间做了一个小结(虽然文字不多,但也花了不少时间呢),鄙人不才,难免有理解不道的地方,还望前辈们不吝赐教. 这篇博客主要是描述asp.net程序在iis6.0上的一个执行过程. 执行过程图: 组件描述 HTTP.SYS: Win2003和winXP SP2的核心操作系统组件,,能够让任何应用程序通过它提供的接口,以http协议进行信息通讯. 优点: 缓存-静态的内容被缓存于内核模式下,这使服务响应速度

ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.ConfigureServices 3.Configure方法

ASP.NET的运行原理与运行机制

http://kb.cnblogs.com/page/75702/ 当一个HTTP请求到服务器并被IIS接收到之后,IIS首先通过客户端请求的页面类型为其加载相应的.dll文件,然后在处理过程中将这条请求发送给能够处理这个请求的模块.在ASP.NET 3.5中,这个模块叫做HttpHandler(HTTP处理程序组件),之所以.aspx文件可以被服务器处理,就是因为在服务器端有默认的HttpHandler专门处理.aspx文件.IIS在将这条请求发送给能够处理这个请求的模块之前,还需要经过一些H

spark 任务运行原理

调优概述 在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置.资源参数设置的不合理,可能会导致没有充分利用集群资源,作业运行会极其缓慢:或者设置的资源过大,队列没有足够的资源来提供,进而导致各种异常.总之,无论是哪种情况,都会导致Spark作业的运行效率低下,甚至根本无法运行.因此我们必须对Spark作

正确理解cookie和session机制原理

php中cookie和session是我们常用的两个变量了,一个是用户客户端的,一个用在服务器的但他们的区别与工作原理怎么样,下面我们一起来看看cookie和session机制原理吧. cookie和session机制之间的区别和联系 具体来说cookie机制采用的是在客户端保持状态的方案.它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持.cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力. 而session机制采用的是一种在客户端与服务器之间保持状态的解决

session cookie原理及应用

一.术语session在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的. session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session.有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间 ①.最混乱的是“用户(客