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论坛登录用户名、用户组、用户ID等信息的实现代码
Dec 29 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
PHP中$_FILES的使用方法及注意事项说明
Feb 14 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
Jun 19 PHP
浅析PHP中strlen和mb_strlen的区别
Aug 31 PHP
php支持断点续传、分块下载的类
May 02 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
浅谈Laravel队列实现原理解决问题记录
Aug 19 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
PHP实现微信小程序用户授权的工具类示例
Mar 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
使用PHP下载CSS文件中的图片的代码
2013/09/24 PHP
sae使用smarty模板的方法
2013/12/17 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
js实现登录与注册界面
2017/11/01 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
详解python之配置日志的几种方式
2017/05/22 Python
PyQt5主窗口动态加载Widget实例代码
2018/02/07 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
Python tkinter常用操作代码实例
2020/01/03 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
巡警年度自我鉴定
2014/02/21 职场文书
收银出纳员岗位职责
2014/02/23 职场文书
国旗下的演讲稿
2014/05/08 职场文书
水电维修专业推荐信
2014/09/06 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
诚实守信主题班会
2015/08/13 职场文书