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+javascript模拟Matrix画面
Oct 09 PHP
?繁体转换的class
Oct 09 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
Nov 27 PHP
php生成excel列序号代码实例
Dec 24 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
PHP中实现Bloom Filter算法
Mar 30 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
反射调用private方法实践(php、java)
Dec 21 PHP
Yii控制器中filter过滤器用法分析
Jul 15 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 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 SQL Injection with MySQL
2011/02/27 PHP
php fsockopen伪造post与get方法的详解
2013/06/14 PHP
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
vue实现分页组件
2020/06/16 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
vue mvvm数据响应实现
2020/11/11 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
详解Python如何获取列表(List)的中位数
2016/08/12 Python
django 删除数据库表后重新同步的方法
2018/05/27 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
世界上最大的各式箱包网络零售店:eBag
2016/07/21 全球购物
Python OpenCV快速入门教程
2021/04/17 Python
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技
Nginx配置根据url参数重定向
2022/04/11 Servers