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实现mysql数据库备份类
Mar 20 PHP
spl_autoload_register与autoload的区别详解
Jun 03 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
Jul 19 PHP
PHP四大安全策略
Mar 12 PHP
PHP计算一年多少个星期和每周的开始和结束日期
Jul 01 PHP
php结合ACCESS的跨库查询功能
Jun 12 PHP
php正则表达式获取内容所有链接
Jul 24 PHP
php检测文本的编码
Jul 26 PHP
php实现留言板功能
Mar 05 PHP
Smarty模板配置实例简析
Jul 20 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 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
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
Smarty分页实现方法完整实例
2016/05/11 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
php微信开发之关注事件
2018/06/14 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
取得父标签
2006/11/14 Javascript
Javascript Global对象
2009/08/13 Javascript
JS小框架 fly javascript framework
2009/11/26 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
Vue 中mixin 的用法详解
2018/04/23 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
django初始化数据库的实例
2018/05/27 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
澳大利亚百货公司:David Jones
2018/02/08 全球购物
财务部岗位职责
2013/11/19 职场文书
函授毕业生的自我鉴定
2013/11/26 职场文书
党员学习十八大感想
2014/01/17 职场文书
倡议书范文格式
2014/05/12 职场文书
保研推荐信范文
2015/03/25 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android