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 相关文章推荐
smarty模板中拼接字符串的方法
Feb 14 PHP
PHP读取RSS(Feed)简单实例
Jun 12 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
PHP实现全角字符转为半角方法汇总
Jul 09 PHP
全面解读PHP的人气开发框架Laravel
Oct 15 PHP
使用PHP如何实现高效安全的ftp服务器(二)
Dec 30 PHP
PHP反射机制原理与用法详解
Feb 15 PHP
使用WAMP搭建PHP本地开发环境
May 10 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
Feb 16 PHP
redis+php实现微博(一)注册与登录功能详解
Sep 23 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
解析CodeIgniter自定义配置文件
2013/06/18 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
jQuery实现倒计时按钮功能代码分享
2014/09/03 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
Web服务器框架 Tornado简介
2014/07/16 Python
python Django批量导入不重复数据
2016/03/25 Python
关于反爬虫的一些简单总结
2017/12/13 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
对Python实现累加函数的方法详解
2019/01/23 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
2019/08/13 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
Python爬取某平台短视频的方法
2021/02/08 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
HTML5中的强制下载属性download使用实例解析
2016/05/12 HTML / CSS
毕业生的求职信范文分享
2013/12/04 职场文书
旷课检讨书2000字
2014/01/14 职场文书
2015年招聘工作总结
2014/12/12 职场文书
第28个世界无烟日活动总结
2015/02/10 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
工程款催款函
2015/06/24 职场文书
运动会100米广播稿
2015/08/19 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
高二英语教学反思
2016/03/03 职场文书