php 重写session
重写session的存储机制 转自 http://www.cnblogs.com/bc8web/p/5699935.html
Session数据区
默认以 文件的形式存储与服务器操作系统临时目录中!
当 session数据区过多时,文件形式的存储,操作速度变慢。磁盘的读写(IO,input/output)开销是很大的。
实际项目中,都会采用其他的方式更快地存储session数据。典型的办法:数据库,内存。
以 数据库存储为例,讲解:session数据入库!
重写 与 session数据区直接的相关操作即可:
最基本的只有2个:读,写!
一:定义2个可以完成读和写的函数。
二:告知session机制,在需要读写时,使用用户自定义的读写函数完成。
定义2(其实共6个需要的相关函数)个可以完成读和写的函数


告知session机制,在需要读写时,使用用户自定义的读写函数完成
Session_set_save_handler(
开始函数,结束函数,读函数,写函数,删除函数,GC函数
);
用来将用户自定义的函数,设置成session存储相关的函数。

以上的语法,仅仅是设置告知,不是调用以上6个函数,这六个函数,在session机制运行到某个时间点时,才会被调用!例如,咋开启session时,才需要调用sessRead()
常规使用session
开启session机制
操作$_SESSION

创建session表
该session中,每条记录,就是一个session数据区,相当于原来的一个session文件。
表结构:

读操作:sessRead()
谁调用,谁传参!
在PHP的session机制调用该函数时,会将当前的session-ID作为参数传递到函数中:
因此,需要定一个形参,接受传递的session-ID 参数:
需要返回,读取到的session数据字符串。就是sess_content字段的内容。如果没有读到,则返回空字符串即可,表示没有session数据。

写操作:sessWrite()
当PHPsession机制调用该函数执行写操作时,会将 当前session-ID和 需要写入的内容(序列化好的)传递到函数!
需要2个形参来接收:

测试:


删除操作:sessDelete()
销毁session时。
执行了PHP函数:
Session_destroy();
可以销毁session,删除对应的session数据区,同时关闭session机制!

由于需要删除session数据区,需要增加用于删除的方法:
PHP的session机制,在调用sessDelete时,会传递 当前session-ID作为参数:
需要定义形参来接收:

垃圾回收操作:sessGC()
垃圾:服务器上过时的session数据区。、
垃圾如何判定?
如果一个session数据区已经超过多久没有使用(最后一次写操作)了,就是被视为垃圾数据。
该时间临界点:默认1440s。可以被配置:

配合最后写入时间,就可以断定是否为垃圾
需要增加字段,记录最后写入时间。


写入时,更新该字段:
sessWrite();


判断条件:过期
Last_write < 当前时间-1440
如何删除?
在 session_start()过程中,开启session机制过程中:有几率地执行 垃圾回收操作。一旦执行,就会删除所有的过期的垃圾数据区。
默认的概率为1/1000。
可以设置该几率:
可能性:

基数(除数):

调整几率测试:
建议在脚本周期调整,使用函数ini_set(),在开启session机制前完成:

实现 sessGC()
PHP的session机制将 最大有效期作为参数,传递过来!

开始操作sessBegin():
初始化工作
可保证在第一个执行。将初始代码,在sessBegin完成:
例如初始化数据库连接:

结尾操作sessEnd():
收尾性工作
Return true;

语法细节
先设置在开启session机制
Session_set_save_handler()先于session_start()被调用。
不要自动开启session!php.ini: session.auto_start = 0
PHP配置项:session.save_handler
PHP所使用的存储机制:

最后建议,将以上配置改为 user: 表示用户自定义!
php 重写session的更多相关文章
- php重写session的存储机制
重写session的存储机制 Session数据区 默认以 文件的形式存储与服务器操作系统临时目录中! 当 session数据区过多时,文件形式的存储,操作速度变慢.磁盘的读写(IO,input/ou ...
- 重写session
<?php ini_set('session.use_only_cookies', 0); $session_id = rand(10000, 99999); session_set_cooki ...
- 理解Cookie和Session机制(转)
目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...
- 10 Cookie/Session
JSP/EL入门 * SUN提供了开发WEB资源的技术 Servlet/JSP * response.getWriter().write(); ...
- 基于ZooKeeper的分布式Session实现(转)
1. 认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...
- JavaWeb-10(会话技术之session&JSP)
JavaWeb-会话技术之session&JSP 会话管理之Session技术 一.Session 在WEB开发中,server能够为每一个用户浏览器创建一个会话对象(session对象),注 ...
- 会话—session
这篇随笔是上一篇的姊妹篇@_@! session 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下) ...
- 基于ZooKeeper的分布式Session实现
1. 认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...
- 会话技术cookie和session详解
什么是会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话技术解决了什么问题 每个用户与服务器进行交互的过程中,各自会有一 ...
随机推荐
- HttpSolrServer 实例管理参考,来自org.eclipse.smila.solr
http://dev.eclipse.org/svnroot/rt/org.eclipse.smila/trunk/core/org.eclipse.smila.solr/code/为什么要对实例管理 ...
- Web服务(Web Service)相关概念
1.概述 Web服务技术(Web Service )是一种面向服务的架构技术,通过标准的Web协议提供服务,保证不同平台的应用服务能够互相操作. 因为Web服务公布的数据基于XML格式和 SOAP协议 ...
- zoj 3299(区间改动+离散化)
题意:有n个由小木块组成的长条木块要掉下来.给出木块的左右区间,然后有给了m个木板的左右区间和高度用来接住木块,由于木块是由小木块接触组成的,也就是木板能够接住一部分的木块.剩下的会继续掉落,问最后每 ...
- Android 资源保护问题——探索
apk文件使用解压工具就能看到drawable等资源,但是有些游戏中的图片资源却是无法看到的. 这个问题探索了许久…… [1]图片资源不放置在drawable文件下,放在assets中(但是解压apk ...
- 0072 Java中的泛型--泛型是什么--泛型类--泛型方法--擦除--桥方法
什么是泛型,有什么用? 先运行下面的代码: public class Test { public static void main(String[] args) { Comparable c=new ...
- oracle 函数判断字符串是否包含图片格式
首先是写一个分割字符串的函数,返回table类型 CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARC ...
- Hive Compiler过程
通过Parser将HiveQL转换成AST,通过Semantic Analyzer将AST转换为QB,通过Logical Plan Generator将QB转换成Operator Tree,通过Log ...
- DelphiXE8FMX工程实现无边框托动(发送消息)
1.引用单元 uses Winapi.Windows, FMX.Platform.Win, Winapi.Messages; 2.发送消息 //发送系统消息SendMessage(FmxHandleT ...
- bash的使用技巧
- su和sudo命令
su命令用于在不同的用户之间切换,比如使用user1登陆了系统,但要执行一些管理操作,比如useradd,普通用户没有这个权限的,解决的办法有两个. 1:退出user1用户,重新以root用户登录系统 ...