<?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对象封装的更多相关文章

  1. struts2获得request和session对象

    在struts1中,获得到系统的request或者session对象非常方便,都是按照形参传递的,但是在struts2中,request和session都被隐藏了 struts2提供两种方式访问ses ...

  2. 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?

    既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...

  3. 如何获取Session对象中的对象

    先调用request的getSession()方法获取一个HttpSession的对象,然后将这个对象进行强制类型转换成原本封装的对象,这样就能获取Session对象中的对象了 1.调用request ...

  4. JS 对象封装的常用方式

    JS是一门面向对象语言,其对象是用prototype属性来模拟的,下面,来看看如何封装JS对象. 常规封装 function Person (name,age,sex){ this.name = na ...

  5. WebAPI中无法获取Session对象的解决办法

    在MVC的WebApi中默认是没有开启Session会话支持的.需要在Global中重写Init方法来指定会话需要支持的类型 public override void Init() { PostAut ...

  6. 重温Servlet学习笔记--session对象

    session的类型是属于HttpSession,HttpSession是由javaWeb提供的,用来会话跟踪的类.session是服务器端对象,保存在服务器端. HttpSession是servle ...

  7. 什么是Cookie对象,Session对象,Application对象。

    Cookie是: 一个由网页服务器放在您硬盘上的非常小的文本文件. 它本质上就像您的身份证明一样,并且不能像代码那样被执行或被用来散布病毒.它只能被您使用并且只能由提供的服务器读取. 使用Cookie ...

  8. Application对象、Session对象、Cookie对象、Server对象初步认识

    Application对象:记录应用程序参数的对象 用于共享应用程序级信息,即多个用户共享一个Application对象.在第一个用户请求ASP.NET文件时,将启动应用程序并创建Applicatio ...

  9. Session对象

    Session对象用于存储在多个页面调用之间特定用户的信息.Session对象只针对单一网站使用者,不同的客户端无法互相访问.Session对象中止于联机机器离线时,也就是当网站使用者关掉浏览器或超过 ...

随机推荐

  1. Postgresql中string转换成timestamp类型

    Mybatis+Postgresql TO_DATE(#{startTime}, 'YYYY-MM-DD') AND op_date <![CDATA[>= ]]>  TO_TIME ...

  2. Java进阶篇(五)——Java的I/O技术

    程序中,为了永久的保存创建的数据,需要将其保存在磁盘文件中,以便在其它程序中使用它们.Java的I/O技术可以将数据保存到文本文件.二进制文件甚至是ZIP压缩文件中,以达到永久性保存数据的要求. 本篇 ...

  3. xampp使用中mysql端口被占用问题的解决方案

    如果在安装XAMPP前本机已经安装了mysql,并且添加了Windows服务中 使用xampp时,两个Mysql在Windows服务中有冲突 这意味着你之前在电脑上使用过mysql,路径.端口都被占用 ...

  4. .net Core连接MongoDB

    前两天在学习MongoDB相关的知识,做了个小Demo,大概是省份里面有多少所学校 连接MongoDB首先要通过Nuget添加一个MongoDB的包,下载此包 安装完毕后开始写代码了,创建一个省份实体 ...

  5. CSS--使用方式

    创建CSS有三种方式: 外部样式表, 内部样式表和内联样式. 外部样式表 先建立外部样式表文件(.css),然后在网页文件的<head>内使用<link>链接.这种方式将样式文 ...

  6. Execption:the database returned no natively generated identity value

    org.hibernate.HibernateException: The database returned no natively generated identity value at org. ...

  7. Android 使用EventBus发送消息接收消息

    基本使用 自定义一个类 public class LoginEvent { private String code;//是否成功 public LoginEvent(String code) { th ...

  8. js调用系统虚拟键盘

    <input type="text" id="tt" /> <script language="javascript" t ...

  9. ansible-playbook相关

    获取目标主机的信息 ansible all -m setup -a "filter=ansible_os_family" 不执行仅测试 ```sh 安装一个zabbix-agent ...

  10. Matlab实用技巧

    1  Matlab Cell 编程模式 在一个长长的脚本m文件中,可能需要对其中的一段反复修改,查看执行效果,这时,cell模式就非常有用了.cell模式相当于将其中的代码拷贝到命令窗口中运行.两个% ...