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 mssql 数据库分页SQL语句
Dec 16 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
PHP写的资源下载防盗链类分享
May 12 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
php中session与cookie的比较
Jan 27 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 PHP
PHP文件操作方法汇总
Jul 01 PHP
PHP 验证身份证是否合法的函数
Feb 09 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
PHP使用Redis实现防止大并发下二次写入的方法
Oct 09 PHP
解决Laravel使用验证时跳转到首页的问题
Nov 17 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服务器实现多session并发运行
2006/10/09 PHP
用javascript实现自定义标签
2007/05/08 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
2019/08/23 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
python数据封装json格式数据
2018/03/04 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
国际贸易专业推荐信
2013/11/15 职场文书
最新奶茶店创业计划书范文
2014/02/08 职场文书
标准化管理实施方案
2014/02/25 职场文书
社区交通安全实施方案
2014/03/22 职场文书
小学毕业寄语大全
2014/04/03 职场文书
个人工作表现评语
2014/04/30 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
小学生植树节活动总结
2014/07/04 职场文书
作弊检讨书
2015/01/27 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android