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 相关文章推荐
ajax php 实现写入数据库
Sep 02 PHP
PHP函数常用用法小结
Feb 08 PHP
一个简单php扩展介绍与开发教程
Aug 19 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
PHP采用XML-RPC构造Web Service实例教程
Jul 16 PHP
在Windows系统下使用PHP生成Word文档的教程
Jul 03 PHP
php常用正则函数实例小结
Dec 29 PHP
PHP中的函数声明与使用详解
May 27 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
Apr 20 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
Jun 25 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
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
2011/11/23 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
js的逻辑运算符 ||
2010/05/31 Javascript
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
countup.js实现数字动态叠加效果
2019/10/17 Javascript
[01:54]TI珍贵瞬间系列(五):压力
2020/08/29 DOTA
Python导入txt数据到mysql的方法
2015/04/08 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
python如何实现异步调用函数执行
2019/07/08 Python
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
2014年体育部工作总结
2014/11/13 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
使用Ajax实现无刷新上传文件
2022/04/12 Javascript