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 相关文章推荐
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
CI框架源码阅读,系统常量文件constants.php的配置
Feb 28 PHP
php环境下利用session防止页面重复刷新的具体实现
Jan 09 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
2014年10个最佳的PHP图像操作库
Jul 14 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
Dec 15 PHP
php利用scws实现mysql全文搜索功能的方法
Dec 25 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
使用Zttp简化Guzzle 调用
Jul 02 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
php调用云片网接口发送短信的实现方法
Oct 25 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/05/24 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
php分页代码学习示例分享
2014/02/20 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
easyui combogrid实现本地模糊搜索过滤多列
2017/05/13 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
使用Python在Windows下获取USB PID&amp;VID的方法
2019/07/02 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
python os.listdir()乱码解决方案
2021/01/31 Python
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
《临死前的严监生》教学反思
2014/02/13 职场文书
义务教育学校标准化建设汇报材料
2014/08/16 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis