<?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 自定义的设置测试的更多相关文章

  1. PHP session有效期session.gc_maxlifetime的设置方法

    PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适 ...

  2. c# webConfig中的session超时详细设置

    webConfig中的session超时详细设置 我们在webConfig中设置Session超时的时候,如果最后发行的地址是远程服务器,我们很多不是必须的属性并不用设置,如果设之后,倒不能让 ses ...

  3. 用c#开发微信(5)自定义菜单设置工具 (在线创建)

    读目录 1 使用 2 原理 3. 错误 上次写了<用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)>,有园友问到如何创建菜单的问题,今天就介绍下 ...

  4. session超时时间设置方法

    session超时时间设置方法 由于session值之前没有设置,以至于刚登录的网站,不到一分钟就超时了,总结了一下,原来是session过期的原因,以下是设置session时间的3个方法: 1. 在 ...

  5. asp.net项目发布网上-当前自定义错误设置禁止远程查看应用程序

    早上服务器的系统突然出错了,悲剧~ ==============异常信息:============================== 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止远程 ...

  6. unigui session超时时间设置

    unigui session超时时间设置 默认的SESSION超时时间是10分钟. 网络 SOCKET 程序,像 数据库,中间件,UNIGUI等...为了防止过多的僵死连接卡死服务端,服务端都会主动踢 ...

  7. handler 方法进不去,服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止远程查看

    HTTP/1.1 500 Internal Server ErrorCache-Control: privateContent-Type: text/html; charset=utf-8Server ...

  8. php session自定义处理

    原文:http://www.cnblogs.com/mrcoke/  这个人的博客上转的. 这个博客也好: 学算法和数据结构!!http://blog.csdn.net/21aspnet/articl ...

  9. 【VS开发】在VS2010中开发ActiveX控件设置测试容器的方式

    在VS2010中开发ActiveX控件设置测试容器的方式 借鉴文章http://blog.csdn.net/waxgourd0/article/details/7374669 在VS2010中开发MF ...

随机推荐

  1. FLASH轮播广告 在谷歌浏览器中不显示的解决办法(FLash轮播放广告在谷歌浏览器中无法显示处理方法)

    在用PHPWEB模板的时候,碰到首页有一个FLASH轮播广告,在IE浏览器下可以正常显示播放,在谷歌浏览器中却显示不了,解决办法如下: 欢迎转载:http://blog.csdn.net/aminfo ...

  2. 【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD_1.2

    作者: hzboy192@192.com Blog: http://my.csdn.net/peng_hao1988 版本总览:http://blog.csdn.net/peng_hao1988/ar ...

  3. BMVC reading list

    'Combining Local and Global Cues for Closed Contour Extraction' Vida Movahedi, James Elder 'FRIF: Fa ...

  4. 在LAMP环境下搭建JSP动态网页

    开发环境Linux的版本号Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 11:47:41 EST 2013 x ...

  5. Android开发之点九图的制作说明

    总结: 左边的点代表垂直拉伸的区域, 上边的点代表水平拉伸的区域. 右边的点代表文字等的垂直可可显示区域. 下边的点代表文字等的水平可显示区域. 左上重合的区域就是拉伸区域. 右下重合的区域就是显示区 ...

  6. OpenGL ES2学习笔记(9)-- 转换矩阵

    线性代数是计算机图形学的一块基石,本篇文章总结如何在Shader中使用矩阵来移动.缩放和旋转顶点. 代码和效果 把下面的代码复制到OpenGL Console里: import java.nio.By ...

  7. Run-Time Check Failure #2 - Stack around the variable 'ucPriKey' was corrupt

    Run-Time    Check    Failure    #2        一般是栈被破坏,你的代码可能有缓冲区溢出一类的问题. Run-Time Check Failure #2 - Sta ...

  8. 深入理解Fsync----JBD内核调试 专业打杂程序员 @github yy哥

    http://hustcat.github.io/ http://www.cnblogs.com/hustcat/p/3283955.html http://blog.sina.com.cn/s/ar ...

  9. NETBSD-DTARCE

    http://www.openbsd.org/papers/ https://2015.asiabsdcon.org/timetable.html.en#T3A http://teachbsd.org ...

  10. http 与https 安全链接

    安全连接 Web应用最常见的用途之一是电子商务,可以利用Web服务器端程序使人们能够网络购物,需要指出一点是,缺省情况下,通过Internet发送信息是不安全的,如果某人碰巧截获了你发给朋友的一则消息 ...