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
php关于array_multisort多维数组排序的使用说明
Jan 04 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
Oct 27 PHP
深入PHP5中的魔术方法详解
Jun 17 PHP
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
destoon二次开发入门示例
Jun 20 PHP
Smarty日期时间操作方法示例
Nov 15 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 PHP
50个优秀经典PHP算法大集合 附源码
Aug 26 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 图片上传实现代码 带详细注释
2010/04/29 PHP
php 验证码实例代码
2010/06/01 PHP
php+highchats生成动态统计图
2014/05/21 PHP
PHP数组实例详解
2016/06/26 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
2017/12/15 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
[04:40]2016个国际邀请赛中国区预选赛场地——华西村观战指南
2016/06/25 DOTA
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
[04:03][TI9趣味短片] 小鸽子茶话会
2019/08/20 DOTA
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
Python实现二叉堆
2016/02/03 Python
django之session与分页(实例讲解)
2017/11/13 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
django使用graphql的实例
2020/09/02 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
自考毕业自我鉴定范文
2013/10/27 职场文书
毕业设计说明书
2014/05/07 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫