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的历史和优缺点
Oct 09 PHP
php4的session功能评述(二)
Oct 09 PHP
Apache 配置详解(最好的APACHE配置教程)
Jul 04 PHP
PHP以及MYSQL日期比较方法
Nov 29 PHP
php中怎么搜索相关联数组键值及获取之
Oct 17 PHP
php使用curl存储cookie的示例
Mar 31 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
PHP学习记录之数组函数
Jun 01 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
PHP高并发和大流量解决方案整理
Mar 09 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+mysql保存和输出文件
2006/10/09 PHP
PHP中for循环语句的几种变型
2007/03/16 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
MVVM框架下实现分页功能示例
2018/06/14 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
python实用代码片段收集贴
2015/06/03 Python
python实现kNN算法
2017/12/20 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
编程用JAVA解析XML的方式
2013/07/07 面试题
《逃家小兔》教学反思
2014/02/23 职场文书
年会搞笑主持词串词
2014/03/24 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
自书遗嘱范文
2015/08/07 职场文书
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle
Redis 哨兵机制及配置实现
2022/03/25 Redis