SESSION存放在数据库用法实例


Posted in PHP onAugust 08, 2015

本文实例讲述了SESSION存放在数据库用法。分享给大家供大家参考。具体如下:

<?php
/*
CREATE TABLE `ws_sessions` (
 `session_id` varchar(255) binary NOT NULL default '',
 `session_expires` int(10) unsigned NOT NULL default '0',
 `session_data` text,
 PRIMARY KEY (`session_id`)
) TYPE=InnoDB;
*/
class session {
 // session-lifetime
 var $lifeTime;
 // mysql-handle
 var $dbHandle;
 function open($savePath, $sessName) {
 // get session-lifetime
 $this->lifeTime = get_cfg_var("session.gc_maxlifetime");
 // open database-connection
 $dbHandle = @mysql_connect("localhost","root","");
 $dbSel = @mysql_select_db("test",$dbHandle);
 // return success
 if(!$dbHandle || !$dbSel)
  return false;
 $this->dbHandle = $dbHandle;
 return true;
 }
 function close() {
 $this->gc(ini_get('session.gc_maxlifetime'));
 // close database-connection
 return @mysql_close($this->dbHandle);
 }
 function read($sessID) {
 // fetch session-data
 $res = mysql_query("SELECT session_data AS d FROM ws_sessions
    WHERE session_id = '$sessID'
    AND session_expires > ".time(),$this->dbHandle);
 // return data or an empty string at failure
 if($row = mysql_fetch_assoc($res))
  return $row['d'];
 return "";
 }
 function write($sessID,$sessData) {
 // new session-expire-time
 $newExp = time() + $this->lifeTime;
 // is a session with this id in the database?
 $res = mysql_query("SELECT * FROM ws_sessions
    WHERE session_id = '$sessID'",$this->dbHandle);
 // if yes,
 if(mysql_num_rows($res)) {
  // ...update session-data
  mysql_query("UPDATE ws_sessions
    SET session_expires = '$newExp',
    session_data = '$sessData'
    WHERE session_id = '$sessID'",$this->dbHandle);
  // if something happened, return true
  if(mysql_affected_rows($this->dbHandle))
  return true;
 }
 // if no session-data was found,
 else {
  // create a new row
  mysql_query("INSERT INTO ws_sessions (
    session_id,
    session_expires,
    session_data)
    VALUES(
    '$sessID',
    '$newExp',
    '$sessData')",$this->dbHandle);
  // if row was created, return true
  if(mysql_affected_rows($this->dbHandle))
  return true;
 }
 // an unknown error occured
 return false;
 }
 function destroy($sessID) {
 // delete session-data
 mysql_query("DELETE FROM ws_sessions WHERE session_id = '$sessID'",$this->dbHandle);
 // if session was deleted, return true,
 if(mysql_affected_rows($this->dbHandle))
  return true;
 // ...else return false
 return false;
 }
 function gc($sessMaxLifeTime) {
 // delete old sessions
 mysql_query("DELETE FROM ws_sessions WHERE session_expires < ".time(),$this->dbHandle);
 // return affected rows
 return mysql_affected_rows($this->dbHandle);
 }
}
$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"));
session_start();
// etc...
?>

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP中的正规表达式(一)
Oct 09 PHP
PHP5中新增stdClass 内部保留类
Jun 13 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
Oct 29 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
Nov 24 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
Laravel实现表单提交
May 07 PHP
PHP使用PDO调用mssql存储过程的方法示例
Oct 07 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 PHP
php函数式编程简单示例
Aug 08 PHP
php输出文字乱码的解决方法
Oct 04 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
Oct 16 PHP
摘自织梦CMS的HTTP文件下载类
Aug 08 #PHP
摘自织梦CMS中的图片处理类
Aug 08 #PHP
PHP模拟asp.net的StringBuilder类实现方法
Aug 08 #PHP
php自动识别文字编码并转换为目标编码的方法
Aug 08 #PHP
PHP模拟asp中response类实现方法
Aug 08 #PHP
PHP实现根据图片色界在不同位置加水印的方法
Aug 08 #PHP
PHP中使用curl伪造IP的简单方法
Aug 07 #PHP
You might like
PHP集成FCK的函数代码
2008/09/27 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP的引用详解
2015/02/22 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
js改变鼠标的形状和样式的方法
2014/03/31 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
JS常见算法详解
2017/02/28 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
js实现点击生成随机div
2020/01/16 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
Python序列化基础知识(json/pickle)
2017/10/19 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
Python中装饰器学习总结
2018/02/10 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
高中运动会入场词
2014/02/14 职场文书
终止劳动合同协议书
2014/04/14 职场文书
幼儿园标语大全
2014/06/19 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
单位工作证明范本
2015/06/15 职场文书
领导欢送会主持词
2015/07/06 职场文书
幼儿园国培研修日志
2015/11/13 职场文书