php实现的SESSION类


Posted in PHP onDecember 02, 2014

本文实例讲述了php实现的SESSION类。分享给大家供大家参考。具体分析如下:

关于 SESSION 在 php 中的应用是必不要少的,是最重要的功能之一。SESSION 在网络应用中,称为“会话”,我们通常理解为存储特定用户会话所需的信息,这样,当用户在网站页面之间跳转时,存储的 SESSION 值不会丢失,而是在整个用户会话中一直存活下去。通俗一点讲,就是当用户A上网时,会创建一个ID(a)值进行保存下来,如果你的ID(A)值没有进行注销,下次上网时,这个网站还会记得你的ID(A)值,这个时候就可以在网上进行调用你的ID(A)值了,比如欢迎您ID(A)值再一次访问。

关于在 PHP 中应用 SESSION 值是很简单的,只要在顶端提前输入 session_start() 开始会话即可,下面就可以进行使用 SESSION 了,这只是小网站的应用方法,实际上,SESSION 自身还有许多属性,比如 SESSION周期,调用SESSION,SESSION数据有效期,SESSION保存,SESSION注销等等,如果有了这些属性,看起来才算是一个比较规范的SESSION应用会话。

下面是一个完整的 Session 类,整合了 Session 最基本的属性值,其中,打开,关闭与清理是符合php编程规范的,这也是一个很好的习惯。小小的说明一下,如果网站不是大量使用 Session 类,基本上就没必要使用 SESSION 类了。

<?php 

/** 

* 文件描述 Session类 

* ================================================================= 

* 文件名称 session.class.php 

* ----------------------------------------------------------------- 

* 适用环境: PHP5.2.x / mysql 5.0.x 

* ----------------------------------------------------------------- 

* 作 者 04ie。com 

* ----------------------------------------------------------------- 

* 创建时间 2010-2-1 

* ================================================================= 

*/ 

class Session 

{ 

/** 

* session默认有效时间 

* @access public 

* @var ineger $_expiry 

*/ 

public $_expiry = 3600; 

/** 

* 有效域名 

* @access public 

* @var string $_domain 

*/ 

public $_domain = '.3water.com'; 

//初始化 

public function __construct() 

{ 

ini_set('session.use_trans_id', 0); 

ini_set('session.gc_maxlifetime', $this->_expiry); 

ini_set('session.use_cookie', 1); 

ini_set('session.cookie_path', '/'); 

ini_set('session.cookie_domain', $this->_domain); 

session_module_name('user'); 

session_set_save_handler( 

array(&$this, 'open'), 

array(&$this, 'close'), 

array(&$this, 'read'), 

array(&$this, 'write'), 

array(&$this, 'destroy'), 

array(&$this, 'gc') 

); 

session_start(); 

} 

/** 

* 打开session 

* @access public 

* @param string $savePath 

* @param string $sName 

* @return true 

*/ 

public function open($savePath, $sName) 

{ 

$this->_conn = mysql_connect('localhost', 'root', ''); 

mysql_select_db('databases'); 

mysql_query('SET NAMES "utf8"'); 

return true; 

} 

/** 

* 关闭session 

* @access public 

* @return bool 

*/ 

public function close() 

{ 

return mysql_close($this->_conn); 

} 

/** 

* 读取session 

* @access public 

* @param string $sid sessionID 

* @return mixed 

*/ 

public function read($sid) 

{ 

$sql = "SELECT data FROM sessions WHERE sessionid='%s'"; 

$sql = sprintf($sql, $sid); 

$res = mysql_query($sql, $this->_conn); 

$row = mysql_fetch_assoc($res); 

return !$row ? null : $row['data']; 

} 

/** 

* 写入session 

* @access public 

* @param string $sid sessionID 

* @param string $data serialize序列化后的session内容 

* @return 

*/ 

public function write($sid, $data) 

{ 

$expiry = time() + $this->_expiry; 

$sql = "REPLACE INTO sessions (sessionid,expiratio 

n,data) VALUES ('%s', '%d', '%s')"; 

$sql = sprintf($sql, $sid, $expiry, $data); 

mysql_query($sql, $this->_conn); 

return true; 

} 

/** 

* 销毁session 

* @access public 

* @param string $sid sessionID 

* @return 

*/ 

public function destroy($sid) 

{ 

$sql = "DELETE FROM sessions WHERE sessionid='%s'"; 

$sql = sprintf($sql, $sid); 

mysql_query($sql, $this->_conn); 

return true; 

} 

/** 

* 清理过期session 

* @access public 

* @param integer $time 

* @return 

*/ 

public function gc($time = 0) 

{ 

$sql = "DELETE FROM sessions WHERE expiration < '%d'"; 

$sql = sprintf($sql, time()); 

mysql_query($sql, $this->_conn); 

mysql_query('OPTIMIZE TABLE sessions'); 

return true; 

}

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
基于mysql的论坛(4)
Oct 09 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
Aug 14 PHP
php class中public,private,protected的区别以及实例分析
Jun 18 PHP
使用php清除bom示例
Mar 03 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
PHP使用array_fill定义多维数组的方法
Mar 18 PHP
PHP连接access数据库
Mar 27 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
Sep 29 PHP
laravel model 两表联查示例
Oct 24 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 PHP
thinkphp配置连接数据库技巧
Dec 02 #PHP
Yii核心组件AssetManager原理分析
Dec 02 #PHP
php实现微信公众平台账号自定义菜单类
Dec 02 #PHP
php获取CSS文件中图片地址并下载到本地的方法
Dec 02 #PHP
PHP间隔一段时间执行代码的方法
Dec 02 #PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 #PHP
php面象对象数据库操作类实例
Dec 02 #PHP
You might like
php数字转汉字代码(算法)
2011/10/08 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
js计算页面刷新的次数
2009/07/20 Javascript
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
js innerHTML 改变div内容的方法
2013/08/03 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
2017/10/25 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
浅析JavaScript 函数柯里化
2020/09/08 Javascript
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
国贸专业的职业规划书
2014/03/15 职场文书
幼儿园小班评语
2014/04/18 职场文书
服务之星事迹材料
2014/05/03 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
2014年项目工作总结
2014/11/24 职场文书
2014年女职工工作总结
2014/11/27 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
自荐信大全
2019/03/21 职场文书
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫