PHP实现session对象封装
<?php
class Session
{
private $db; // 设置数据库变量
private $expiry = 3600; // 设置Session失效时间 public function Session()
{
session_set_save_handler(array(& $this,'_session_open'),
array(& $this,'_session_close'),
array(& $this,'_session_read'),
array(& $this,'_session_write'),
array(& $this,'_session_destroy'),
array(& $this,'_session_gc')
);
} public function _session_open($save_path,$session_name)
{
$this->db = mysql_connect('localhost','root','123456') or die ("数据库连接失败!");
mysql_select_db("db_database11",$this->db);
return(true);
} public function _session_close()
{
mysql_close($this->db);
return(true);
} public function _session_read($key)
{
$time = time(); // 设定当前时间
$sql = "select session_data from tb_session where session_key = '$key' and session_time > $time";
$result = mysql_query($sql,$this->db);
$row = mysql_fetch_array($result);
if ($row)
{
return($row['session_data']); // 返回Session名称及内容
}else
{
return(false);
}
} public function _session_write($key,$data)
{
$lapse_time = time() + $this->time; // 得到Unix时间戳
$sql = "select session_data from tb_session where session_key = '$key' and session_time > $lapse_time";
$result = mysql_query($sql,$this->db);
if (mysql_num_rows($result) == 0 ) // 没有结果
{
$sql = "insert into tb_session values('$key','$data',$lapse_time)"; // 插入数据库sql语句
$result = mysql_query($sql,$this->db);
}else
{
$sql = "update tb_session set session_key = '$key',session_data = '$data',session_time = $lapse_time where session_key = '$key'"; // 修改数据库sql语句
$result = mysql_query($sql,$this->db);
}
return($result);
} public function _session_destroy($key)
{
$sql = "delete from tb_session where session_key = '$key'"; // 删除数据库sql语句
$result = mysql_query($sql,$this->db);
return($result);
} public function _session_gc($expiry_time)
{
$expiry_time = time(); // 将参数$expiry_time赋值为当前时间戳
$sql = "delete from tb_session where expiry_time < $expiry_time"; // 删除数据库sql语句
$result = mysql_query($sql,$this->db);
return($result);
}
}
$_session_new = new Session();
session_start(); $_SESSION['SID'] = true;
?>
这里令人费解的是,$this本来就是引用类型,按理说PHP的引用操作符&只是针对基本变量(非引用类型)所采取的一种补救措施,这里针对$$this进行引用,又是为何?
PHP实现session对象封装的更多相关文章
- struts2获得request和session对象
在struts1中,获得到系统的request或者session对象非常方便,都是按照形参传递的,但是在struts2中,request和session都被隐藏了 struts2提供两种方式访问ses ...
- 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?
既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...
- 如何获取Session对象中的对象
先调用request的getSession()方法获取一个HttpSession的对象,然后将这个对象进行强制类型转换成原本封装的对象,这样就能获取Session对象中的对象了 1.调用request ...
- JS 对象封装的常用方式
JS是一门面向对象语言,其对象是用prototype属性来模拟的,下面,来看看如何封装JS对象. 常规封装 function Person (name,age,sex){ this.name = na ...
- WebAPI中无法获取Session对象的解决办法
在MVC的WebApi中默认是没有开启Session会话支持的.需要在Global中重写Init方法来指定会话需要支持的类型 public override void Init() { PostAut ...
- 重温Servlet学习笔记--session对象
session的类型是属于HttpSession,HttpSession是由javaWeb提供的,用来会话跟踪的类.session是服务器端对象,保存在服务器端. HttpSession是servle ...
- 什么是Cookie对象,Session对象,Application对象。
Cookie是: 一个由网页服务器放在您硬盘上的非常小的文本文件. 它本质上就像您的身份证明一样,并且不能像代码那样被执行或被用来散布病毒.它只能被您使用并且只能由提供的服务器读取. 使用Cookie ...
- Application对象、Session对象、Cookie对象、Server对象初步认识
Application对象:记录应用程序参数的对象 用于共享应用程序级信息,即多个用户共享一个Application对象.在第一个用户请求ASP.NET文件时,将启动应用程序并创建Applicatio ...
- Session对象
Session对象用于存储在多个页面调用之间特定用户的信息.Session对象只针对单一网站使用者,不同的客户端无法互相访问.Session对象中止于联机机器离线时,也就是当网站使用者关掉浏览器或超过 ...
随机推荐
- 【分享】一个集成tracert和ping的网络监测工具
最近接到一个需求,需求背景是这样的:目前Windows平台下本身都有tracert和ping的实现,而且可以直接在cmd下使用. 需求中有两个要求: 1. Windows平台中的tracert执行速度 ...
- LNMP安装Let’s Encrypt 免费SSL证书方法:自动安装与手动配置Nginx
前几天介绍了最新StartSSL免费SSL申请与配置,很多人看到部落介绍SSL证书安装时总是推荐了OneinStack,因为OneinStack提供了一键添加和配置Let's Encrypt 免费SS ...
- 关于php存储cookie时path存放路径放的详细介绍
以前在存储cookie时,没有用到path这个参数,最近开发中在存储cookie时,要用到path参数来决定存储的路径,结果一开始的时候一直取不到值,到最后详细看了一下path参数的介绍后,才顿悟.分 ...
- Hibernate 的原生 SQL 查询
Hibernate除了支持HQL查询外,还支持原生SQL查询. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取 ...
- Django中的F和Q函数
内容简介: 介绍Django中的F和Q作用以及使用方法 一.F介绍 作用:操作数据表中的某列值,F()允许Django在未实际链接数据的情况下具有对数据库字段的值的引用,不用获取对象放在内存中再对字段 ...
- Jasper之table报表
这段时间用Jasper画报表,讲真的Jasper IDE真的很难用,网上找很久都没找到用table画的配置方法,以下是直接操作源码画table的方法,不用IDE一样可以做出来(不过样式还是得借助IDE ...
- linux unzip 解压后文件名乱码
在windows上zip的包,rz上传到linux下,发现出现乱码.记录下解决过程: 1.确定windows上的默认字符集 在Windows平台下,直接在命令行中,输入:chcp 在显示的结果中,会出 ...
- Windows核心编程&进程
1. 进程的定义 说白了进程就是一个正在运行的执行程序,包含内核对象和独立的地址空间,内核对象负责统计和管理进程信息,地址空间包括所有可执行文件或DLL 模块的代码和数据.动态内存分配(线程堆和栈的分 ...
- android 中的ExpandableListView取消一级图标
mainlistview = (ExpandableListView) view.findViewById(R.id.listview_myteacher); mainlistview.setGrou ...
- awkOFS问题
awk改变了OFS,$0却没变化一个文件1.txt,内容如下 a b c d e 目的把列变行,输出为: a b c d e 脚本如下: awk 'BEGIN{RS="";FS=& ...