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 相关文章推荐
php discuz 主题表和回帖表的设计
Mar 13 PHP
如何使用PHP批量去除文件UTF8 BOM信息
Aug 05 PHP
smarty内置函数config_load用法实例
Jan 22 PHP
php正则表达式获取内容所有链接
Jul 24 PHP
PHP+MySQL之Insert Into数据插入用法分析
Sep 27 PHP
php搜索文件程序分享
Oct 30 PHP
Zend Framework实现自定义过滤器的方法
Dec 09 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
Laravel如何创建服务器提供者实例代码
Apr 15 PHP
在laravel中实现ORM模型使用第二个数据库设置
Oct 24 PHP
PHP利用curl发送HTTP请求的实例代码
Jul 09 PHP
WordPress伪静态规则设置代码实例
Dec 10 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图片上传类带图片显示
2006/11/25 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
Python 字符串操作方法大全
2014/03/11 Python
在Django框架中设置语言偏好的教程
2015/07/27 Python
儿童编程python入门
2018/05/08 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
Python简单基础小程序的实例代码
2019/04/28 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
大学生求职简历的自我评价
2013/10/14 职场文书
上班看电影检讨书
2014/02/12 职场文书
大学四年个人自我小结
2014/03/05 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
工会优秀工作者事迹
2014/08/17 职场文书
高三复习计划
2015/01/19 职场文书
2015年度物流工作总结
2015/04/30 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
表彰大会新闻稿
2015/07/17 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL