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 相关文章推荐
从Web查询数据库之PHP与MySQL篇
Sep 25 PHP
php self,$this,const,static,-&amp;gt;的使用
Oct 22 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
Aug 07 PHP
WebQQ最新登陆协议的用法
Dec 22 PHP
PHP往XML中添加节点的方法
Mar 12 PHP
php查看当前Session的ID实例
Mar 16 PHP
使用PHP如何实现高效安全的ftp服务器(二)
Dec 30 PHP
PHP目录操作实例总结
Sep 27 PHP
php连接mysql数据库
Mar 21 PHP
php 使用curl模拟ip和来源进行访问的实现方法
May 02 PHP
php 数组元素快速去重
May 05 PHP
RSA实现JS前端加密与PHP后端解密功能示例
Aug 05 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
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
vue项目前端埋点的实现
2019/03/06 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
TensorFlow实现简单卷积神经网络
2018/05/24 Python
django如何通过类视图使用装饰器
2019/07/24 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
Python远程方法调用实现过程解析
2020/07/28 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
韩语专业本科生求职信
2013/10/01 职场文书
专业幼师实习生自我鉴定范文
2013/12/08 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
售后客服工作职责
2014/06/16 职场文书
自主招生学校推荐信
2014/09/26 职场文书
2015年双拥工作总结
2015/04/08 职场文书
部门2015年度工作总结
2015/04/29 职场文书
淮海战役观后感
2015/06/11 职场文书
2015年团委副书记工作总结
2015/07/23 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
MySQL 全文检索的使用示例
2021/06/07 MySQL