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 相关文章推荐
PHPMailer邮件类利用smtp.163.com发送邮件方法
Sep 11 PHP
PHP导入Excel到MySQL的方法
Apr 23 PHP
php实现用户在线时间统计详解
Oct 08 PHP
解析crontab php自动运行的方法
Jun 24 PHP
如何使用PHP批量去除文件UTF8 BOM信息
Aug 05 PHP
CI(CodeIgniter)框架配置
Jun 10 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
php + nginx项目中的权限详解
May 23 PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 PHP
laravel http 自定义公共验证和响应的方法
Sep 29 PHP
实例化php类时传参的方法分析
Jun 05 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缩略图生成程式(需要GD库支持)
2007/03/06 PHP
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
PHP处理excel cvs表格的方法实例介绍
2013/05/13 PHP
PHP异常处理浅析
2015/05/12 PHP
封装的原生javascript弹出层代码
2010/09/24 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
详解vue路由
2020/08/05 Javascript
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
Django验证码的生成与使用示例
2017/05/20 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
2018/07/25 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
美国内衣品牌:Leonisa
2016/08/14 全球购物
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
面试后感谢信怎么写
2014/02/01 职场文书
交通事故私了协议书
2014/04/16 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
中考标语大全
2014/06/05 职场文书
房产公证委托书范本
2014/09/20 职场文书
同学聚会通知书
2015/04/20 职场文书
担保书范文
2019/07/09 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
SQL基础的查询语句
2021/11/11 MySQL
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers