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 相关文章推荐
在线短消息收发的程序,不用数据库
Oct 09 PHP
php&amp;java(一)
Oct 09 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
Views rows style模板重写代码
May 16 PHP
PHP写的求多项式导数的函数代码
Jul 04 PHP
解析strtr函数的效率问题
Jun 26 PHP
php实现最简单的MVC框架实例教程
Sep 08 PHP
PHP文件锁函数flock()详细介绍
Nov 18 PHP
php实现统计目录文件大小的函数
Dec 25 PHP
Laravel框架模板继承操作示例
Jun 11 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
Linux下 php7安装redis的方法
Nov 01 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/11/23 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
jquery map方法使用示例
2014/04/23 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
vue基础之事件v-onclick=&quot;函数&quot;用法示例
2019/03/11 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
解决removeEventListener 无法清除监听的问题
2020/10/30 Javascript
用python实现k近邻算法的示例代码
2018/09/06 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
信息技术教学反思
2014/02/12 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
运动会800米赞词
2015/07/22 职场文书
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android