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 相关文章推荐
简单易用的计数器(数据库)
Oct 09 PHP
搜索和替换文件或目录的一个好类--很实用
Oct 09 PHP
PHP执行速率优化技巧小结
Mar 15 PHP
解析curl提交GET,POST,Cookie的简单方法
Jun 29 PHP
php多功能图片处理类分享(php图片缩放类)
Mar 14 PHP
ThinkPHP CURD方法之data方法详解
Jun 18 PHP
CI框架给视图添加动态数据
Dec 01 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
PHP chunk_split()函数讲解
Feb 12 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
Feb 15 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
May 09 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中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
JS查找英文文章中出现频率最高的单词
2017/03/20 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
手挽手带你学React之React-router4.x的使用
2019/02/14 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
Python中生成器和yield语句的用法详解
2015/04/17 Python
遗传算法之Python实现代码
2017/10/10 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
浅析Python中字符串的intern机制
2020/10/03 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
python3中for循环踩过的坑记录
2020/12/14 Python
一套.net面试题及答案
2016/11/02 面试题
大三自我鉴定范文
2013/10/05 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
感恩教育活动总结
2014/05/05 职场文书
2014年教育工作总结
2014/11/26 职场文书
2015年清明节活动总结
2015/02/09 职场文书
2015年售票员工作总结
2015/04/29 职场文书
大学开学感言
2015/08/01 职场文书