php session 自定义的设置测试
<?php
// ini_set('session.save_handler', 'user'); // 注意 set_session_save_handler() 一定要在 session_start()前执行
// session.gc_probability =1 //session 回收机制的概率分子
// session.gc_divisor = 1000 // session 回收机制的概率分母
// session.gc_maxlifetime = 1440 // session 有效期
// 当开启 session 时,如 session_start(),
// 执行顺序为 sess_open() -> sess_read()->sess_write() -> sess_close() ->sess_destroy() -> sess_gc() ini_set("session.save_handler", "user"); // 自定义保存方式 function sess_open($sess_path, $sess_name)
{
echo "session 路径:" . $sess_path . "<br />";
echo "session名称:" . $sess_name . "<br />";
return true;
} function sess_close()
{
echo "session 关闭<br />";
return true;
} function sess_read($sess_id)
{
echo "读取session id :" . $sess_id . "<br />";
return true;
} function sess_write($sess_id, $data)
{
echo "写入数据 session id " . $sess_id . "<br />";
echo "session 数据 " . $data . "<br />";
return true;
} function sess_destroy($sess_id)
{
echo "销毁 session id " . $sess_id . "<br />";
return true;
} function sess_gc($sess_maxlifetime)
{
echo "session 回时机制,每隔时间为 " . $sess_maxlifetime;
return true;
} session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
session_start();
$_SESSION['lin'] = 'lin3615';
echo 'hi, world ';
$_SESSION['long'] = 'good luck for you';
// 开启 cookie 时,默认时会以 session 名称 PHPSESSID 为了cookie 为记录
// 如 $_COOKIE['PHPSESSID'] = session_id; 值即为session_id值。 // 默认时,它们之间的关系是:session_name() = PHPSESSID ; $_COOKIE[session_name()] = session_id();
print_r($_COOKIE); ?> ================ 以下适合 <?php
/*
数据表
CREATE TABLE IF NOT EXISTS `sessions` (
`id` char(200) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`data` text COLLATE utf8_unicode_ci,
`timestamp` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
*/
class Session
{ /**
* a database connection resource
* @var resource $maxTime 生存时间
*/
private $_sess_db;
private $maxTime; /**
* Open the session
* @return bool
*/
public function open() {
$this->maxTime = get_cfg_var("session.gc_maxlifetime") > 0 ? get_cfg_var("session.gc_maxlifetime") : 3600;
if ($this->_sess_db = mysql_connect('localhost',
'root',
'123456')) {
return mysql_select_db('test', $this->_sess_db);
}
return false; } /**
* Close the session
* @return bool
*/
public function close() { return mysql_close($this->_sess_db); } /**
* Read the session
* @param int session id
* @return string string of the sessoin
*/
public function read($id) { $id = mysql_real_escape_string($id);
$sql = "SELECT `data` FROM `sessions` " .
"WHERE id = '" . $id . "'"; if ($result = mysql_query($sql, $this->_sess_db)) {
if (mysql_num_rows($result)) {
$record = mysql_fetch_assoc($result);
return $record['data'];
}
}
return ''; } /**
* Write the session
* @param int session id
* @param string data of the session
*/
/*
replace [into] 与 insert 功能类似,不同点在于:replace into 首先尝试插入数据表中,如果发现表中已经有此行数据(根据主键或者唯一索引判定)则先删除此行,然后插入新的数据。否则直接插入数据。要注意是:插入数据的表必须有主键或者唯一索引。否则就成了 insert 了
*/
public function write($id, $data) { $sql = sprintf("REPLACE INTO `sessions` VALUES('%s', '%s', '%s')",
mysql_real_escape_string($id),
mysql_real_escape_string($data),
mysql_real_escape_string(time() + $this->maxTime));
return mysql_query($sql, $this->_sess_db); } /**
* Destoroy the session
* @param int session id
* @return bool
*/
public function destroy($id) { $sql = sprintf("DELETE FROM `sessions` WHERE `id` = '%s'", $id);
return mysql_query($sql, $this->_sess_db); } /**
* Garbage Collector
* @param int life time (sec.)
* @return bool
* @see session.gc_divisor 100
* @see session.gc_maxlifetime 1440
* @see session.gc_probability 1
* @usage execution rate 1/100
* (session.gc_probability/session.gc_divisor)
*/
public function gc($max) { $sql = sprintf("DELETE FROM `sessions` WHERE `timestamp` < '%s'",
mysql_real_escape_string(time() - $max));
return mysql_query($sql, $this->_sess_db); } } //ini_set('session.gc_probability', 50); ini_set('session.save_handler', 'user'); $session = new Session();
session_set_save_handler(array($session, 'open'),
array($session, 'close'),
array($session, 'read'),
array($session, 'write'),
array($session, 'destroy'),
array($session, 'gc')); // below sample main session_start();
//session_regenerate_id(true); if (isset($_SESSION['counter'])) {
$_SESSION['counter']++;
} else {
$_SESSION['counter'] = 1; } print_r($_SESSION);
//unset($_SESSION);
//session_destroy();
?>
<?php
// 以下这官网手册整合
/**
数据表
CREATE TABLE `ws_sessions` (
`session_id` char(100) NOT NULL default '',
`session_expires` int(11) unsigned NOT NULL default '0',
`session_data` text,
PRIMARY KEY (`session_id`)
) engine=InnoDB;
*/
class MySessionHandler implements SessionHandlerInterface
{
// 生存时间
public $lifeTime;
// 连接句柄
public $dbHandle;
function open($savePath, $sessName) {
// 获取生存时间
$this->lifeTime = get_cfg_var("session.gc_maxlifetime"); // $dbHandle = new mysqli("主机名", "用户名", "密码", "数据库名");
$dbHandle = new mysqli("localhost", "root", "", "test"); if($dbHandle->connect_error)
return false;
$this->dbHandle = $dbHandle;
return true;
}
function close() {
$this->gc(ini_get('session.gc_maxlifetime'));
// 关闭连接
return $this->dbHandle->close();
}
function read($sessID) {
// fetch session-data
$res = $this->dbHandle->query("SELECT session_data AS d FROM ws_sessions
WHERE session_id = '$sessID'
AND session_expires > ".time()); if($dd = $res->fetch_assoc())
{
return $dd['d'];
}
return "";
}
function write($sessID,$sessData) {
// 新的有效时间
$newExp = time() + $this->lifeTime; $res = $this->dbHandle->query("SELECT * FROM ws_sessions
WHERE session_id = '$sessID'");
// 有效
if($res->num_rows) {
// 更新
$this->dbHandle->query("UPDATE ws_sessions
SET session_expires = '$newExp',
session_data = '$sessData'
WHERE session_id = '$sessID'");
// 更新是否生效
if($this->dbHandle->affected_rows)
return true;
}
else {
$this->dbHandle->query("INSERT INTO ws_sessions (
session_id,
session_expires,
session_data)
VALUES(
'" . $sessID ."',
" . $newExp .",
'" . $sessData ."')");
// 更新是否生效
if($this->dbHandle->affected_rows)
return true;
}
// 发生错误
return false;
}
function destroy($sessID) {
// delete session-data
$this->dbHandle->query("DELETE FROM ws_sessions WHERE session_id = '$sessID'");
// if session was deleted, return true,
if($this->dbHandle->affected_rows)
return true;
// ...else return false
return false;
}
function gc($sessMaxLifeTime) {
// delete old sessions
$this->dbHandle->query("DELETE FROM ws_sessions WHERE session_expires < ".time());
// return affected rows
return $this->dbHandle->affected_rows;
}
} ini_set('session.save_handler', 'user');
$handler = new MySessionHandler();
session_set_save_handler($handler, true); // 引用方法,以为另存文件,如:session.php,新建立文件,如test.php
include('session.php');
session_start();
$_SESSION['lin3615'] = date('Y-m-d H:i:s', time());
print_r($_SESSION);
php session 自定义的设置测试的更多相关文章
- PHP session有效期session.gc_maxlifetime的设置方法
PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适 ...
- c# webConfig中的session超时详细设置
webConfig中的session超时详细设置 我们在webConfig中设置Session超时的时候,如果最后发行的地址是远程服务器,我们很多不是必须的属性并不用设置,如果设之后,倒不能让 ses ...
- 用c#开发微信(5)自定义菜单设置工具 (在线创建)
读目录 1 使用 2 原理 3. 错误 上次写了<用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)>,有园友问到如何创建菜单的问题,今天就介绍下 ...
- session超时时间设置方法
session超时时间设置方法 由于session值之前没有设置,以至于刚登录的网站,不到一分钟就超时了,总结了一下,原来是session过期的原因,以下是设置session时间的3个方法: 1. 在 ...
- asp.net项目发布网上-当前自定义错误设置禁止远程查看应用程序
早上服务器的系统突然出错了,悲剧~ ==============异常信息:============================== 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止远程 ...
- unigui session超时时间设置
unigui session超时时间设置 默认的SESSION超时时间是10分钟. 网络 SOCKET 程序,像 数据库,中间件,UNIGUI等...为了防止过多的僵死连接卡死服务端,服务端都会主动踢 ...
- handler 方法进不去,服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止远程查看
HTTP/1.1 500 Internal Server ErrorCache-Control: privateContent-Type: text/html; charset=utf-8Server ...
- php session自定义处理
原文:http://www.cnblogs.com/mrcoke/ 这个人的博客上转的. 这个博客也好: 学算法和数据结构!!http://blog.csdn.net/21aspnet/articl ...
- 【VS开发】在VS2010中开发ActiveX控件设置测试容器的方式
在VS2010中开发ActiveX控件设置测试容器的方式 借鉴文章http://blog.csdn.net/waxgourd0/article/details/7374669 在VS2010中开发MF ...
随机推荐
- No valid host was found
set in nova.conf -> scheduler_default_filters=AllHostsFilter Tried without success.
- eclipse设置项目发布到tomcat webaap下
之前用myeclipse,自动deploy到web app下.目前的项目换了eclipse,项目被发布到本地,通过一个链接到tomcat中,很不习惯. 设置的地方很隐晦,在tomcat中,而不是在pr ...
- IO(Input Output)流__字节流
续: ------->>>>字节流 IntputStream OutputStream 需求:想要操作图片数据,就需要用到字节流. 读写操作: FileOutputStrea ...
- Chrome/Chromium HTML5 video 视频播放硬件加速
Chromium站点上有个大致的框图.描写叙述了Chromium的video在各个平台 - 包含Android - 上是怎样使用硬件资源来做视频编解码加速的: 而依据Android Kitkat上的C ...
- C语言中volatilekeyword的作用
一.前言 1.编译器优化介绍: 由于内存訪问速度远不及CPU处理速度,为提高机器总体性能,在硬件上引入硬件快速缓存Cache,加速对内存的訪问.另外在现代CPU中指令的运行并不一定严格依照顺序运行,没 ...
- Windows XP下安装WinCE6.0开发环境
Windows下怎样编译WinCE6.0及开发应用程序.以下介绍(安装之前必须保证C盘有足够的空间!20g左右!主要是由于在安装程序在安装过程中要解压): 在Visual Studio 2005之前, ...
- oracle4
分页查询 按雇员的id号升序取出 oracle的分页一共有三种方式 .根据rowid来分 ) ) order by cid desc; 执行时间0.03秒 .按分析函数来分 and rk> ...
- mysql日期时间函数2
win7可以设定每周从哪一天开始,win2003等不能方便的修改.有的是周日开始,有的是周一开始.而工作中有的时候每周是从周六开始算的,有些数据需要按周统计,那么那种方式比较好呢? 通过下面的研究 ...
- O(1)调度器的时间计算公式与CFS调度器
http://blog.csdn.net/dog250/article/details/48750809 O(1): 优先级计算: 进程优先级公式:prio=MAX_RT_PRIO+nice+20其中 ...
- Performing a thread dump in Linux or Windows--reference
Linux/Unix 1. Find the Java/Tomcat process id. % ps ax | grep java You should see output like this 1 ...