<?php

 function userSessionBegin() {
echo '<br>Begin<br>';
//初始化数据库服务器连接,这个函数是最先执行,所以,以下的几个函数都用到数据库连接,所以,我就把它放在最先执行的函数里面,因为只要是数据库连接了,在整个文件中都有效。
$link = mysql_connect('127.0.0.1:3306', 'root', '1234abcd');
mysql_query('set names utf8');
mysql_query('use `php34`');
}
function userSessionEnd() {
echo '<br>End<br>';
return true;
}
/**
* 读操作
* 执行时机: session机制开启程中执行
* 工作: 从当前session数据区读取内容
* @param $sess_id string
* @return string
*/
function userSessionRead($sess_id) {
echo '<br>Read<br>';
//查询
$sql = "SELECT session_content FROM `session` WHERE session_id='$sess_id'";
$result = mysql_query($sql);
if ($row = mysql_fetch_assoc($result)) {
return $row['session_content'];
} else {
//没有找到,返回空字符串
return '';
}
}
/**
* 写操作
* 执行时机: 脚本周期结束时,PHP在整理收尾时
* 工作: 将当前脚本处理好的session数据,持久化存储到数据库中!
* @param $sess_id string
* @param $sess_content string 序列化好的session内容字符串
* @return bool
*/
function userSessionWrite($sess_id, $sess_content) {
echo '<br>Write<br>';
// 完成写,这里的REPLACE和INSERT一样,都是要是数据存在,就不写了,要是数据不在,就写进数据库
$sql = "REPLACE INTO `session` VALUES ('$sess_id', '$sess_content', unix_timestamp())";
// $sql = "INSERT INTO `session` VALUES ('$sess_id', '$sess_content') ON DUPLICATE KEY UPDATE session_content='$sess_content', last_time=unix_timestamp()"
return mysql_query($sql);
}
/**
* 删除操作
* 执行时机: 调用了session_destroy()销毁session过程中被调用
* 工作: 删除当前session的数据区(记录)
* @param $sess_id string
* @return bool
*/
function userSessionDelete($sess_id) {
echo '<br>Delete<br>';
//删除
$sql = "DELETE FROM `session` WHERE session_id='$sess_id'";
return mysql_query($sql);
}
/**
* 垃圾回收操作
* 执行时机: 开启session机制时,有概率的执行
* 工作: 删除那些过期的session数据区
* @param $max_lifetime
* @return bool
*/
function userSessionGC($max_lifetime) {
echo '<br>GC<br>';
//删除
$sql = "DELETE FROM `session` WHERE last_time<unix_timestamp()-$max_lifetime";
return mysql_query($sql);
} // 设置
session_set_save_handler(
'userSessionBegin',
'userSessionEnd',
'userSessionRead',
'userSessionWrite',
'userSessionDelete',
'userSessionGC'
);
ini_set('session.save_handler', 'user');

最新文章

  1. jQuery 菜单
  2. Java 测试URL地址是否能正常连接
  3. Effective Java 49 Prefer primitive types to boxed primitives
  4. 最小生成树之prim
  5. jetty ZipException: invalid entry size
  6. Java Thread.interrupt 害人! 中断JAVA线程(zz)
  7. CNKI翻译助手-连接数据库失败
  8. VB指针 与CopyMemory
  9. fitnesse 中各类fit fixture的python实现
  10. 过渡到SSAS之一:简单模型认识
  11. tomcat 错误查看
  12. iOS集成友盟推送
  13. DRAM(MT48LC8M32B2)学习
  14. 1.5 WEB API 上传文件
  15. emwin之在中断服务程序中创建窗口的结果
  16. MySQL 的安装与使用(一)
  17. [Python学习笔记] turtle库的基本使用
  18. 泛型-----键值对----映射 hashmap--entry中key value 链表
  19. python 自然语言处理(二)____获得文本语料和词汇资源
  20. dfs——n的全排列(回溯)

热门文章

  1. 记录 TypeError: render() got an unexpected keyword argument &#39;renderer&#39; 错误
  2. Windows 远程桌面连接 CentOS7 (xrdp)
  3. vue表单选项框
  4. 2019~2020icpc亚洲区域赛徐州站H. Yuuki and a problem
  5. vimdiff换行
  6. MySQL学习笔记——〇三 MySQL习题
  7. sql plus笔记
  8. 从西班牙、英国出租车与Uber之争,看共享打车未来发展趋势
  9. springBoot中mybatis错误之 Property &#39;configuration&#39; and &#39;configLocation&#39; can not specified with together 解决
  10. node 配置文件