<?php 
//修改session的存储机制

//最起码应该有一个 读方法, 和一个 写方法。

//1, 我们先去建立 读方法 和 写方法。
//2, 告知session系统,使用我们的方法完成数据的读和写操作。

//建立读方法
/**
 * 利用 sessionID 获得session数据
 *@param $sess_id string 当前会话的ID
 *@return string 当前的sessiondata (不需要考虑序列化与反序列化的问题)
 */
function sess_read($sess_id) {
    echo 'read';
    //查询的sql语句
    $query = "select sess_data from sessions where sess_id='{$sess_id}'";
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    //返回查询到的数据
    return $row['sess_data'];

}

//写方法
/**
 * @param $sess_id string 当前的sessionID
 * @param $sess_data string 当前的session数据,(序列化好的)
 */
function sess_write($sess_id, $sess_data) {
    echo 'write';
    //应该考虑到 当前的session记录是否存在
    //存在应该update更新,不存在应该insert新建
    $expire = time();
    $query = "insert into sessions values ('{$sess_id}', '{$sess_data}', {$expire}) on duplicate key update sess_data='{$sess_data}', expire={$expire}";
    return mysql_query($query);

}

/**
 *session_start 是执行的方法,用户初始化资源
 * @param $save_path string php.ini中 session.save_path 的值。
 * @param $sess_name string php.ini中 session.name 的值。ini_get()也可以获得。
 *  这2参数就是php.ini文件中对应的值---可以输出看看
 */
function sess_open($save_path, $sess_name) {//这2个参数可以不写
    echo 'open';
    //连接上数据库  其他几个函数都可以用这个链接不会涉及到作用于的问题
    $link = mysql_connect('localhost', 'root', '1234abcd');
    mysql_query('use test', $link);
    mysql_query('set names utf8');
}

/**
 *在最后,释放资源的方法
 */
function sess_close() {
//    echo 'close';
    mysql_close();
}
/**
 * @param $sess_id string 当前的sessionID
 */
function sess_destroy($sess_id){
    echo 'destroy';
    $query = "delete from sessions where sess_id='{$sess_id}'";
    return mysql_query($query);

}
/**
 *负责回收垃圾的函数
 *@param $ttl 当前的session数据的最大生存周期
 */
function sess_gc($ttl) {
    //
//    echo 'gc';
    $expire = time() - $ttl;
    $query = "delete from sessions where expire < {$expire}";

return mysql_query($query);

}

//将我们的方法 告知给当前的session系统
//利用函数 session_set_save_handler();
session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc');

//开启session

session_start();

$_SESSION['name'] = 'leyangjun';

$_SESSION['age'] = '23';

unset($_SESSION['name']);
//session_destroy();

//var_dump($_SESSION);

修改session的存储机制的更多相关文章

  1. 138.更改session的存储机制

    修改session的存储机制: 默认情况下,session数据时存储到数据库中,当然也可以将session数据存储到其他地方.可以通过设置SESSION_ENGINE来更改session的存储位置,这 ...

  2. php重写session的存储机制

    重写session的存储机制 Session数据区 默认以 文件的形式存储与服务器操作系统临时目录中! 当 session数据区过多时,文件形式的存储,操作速度变慢.磁盘的读写(IO,input/ou ...

  3. 自定义session的存储机制

    <?php class MSession implements SessionHandlerInterface{ // reids 对象 protected $handler = null; / ...

  4. Session 知识点再整理(二) 自定义 Session 存储机制

    对于访问量大的网站,用默认的 Session 存储方式(以文件存储)不适合,因为文件的 I/O 开销会非常大,另外 Session 机制本身使 Session 不能跨机访问,在 Web 集群中无法达到 ...

  5. php中session的生成机制、回收机制和存储机制探究

    1.php中session的生成机制 我们先来分析一下PHP中是怎么生成一个session的.设计出session的目的是保持每一个用户的各种状态来弥补HTTP协议的不足(无状态).我们现在有一个疑问 ...

  6. [转]mvc3 使用session来存储类来存储用户登陆信息

    mvc3 使用session来存储类来存储用户登陆信息 2013-08-26 09:48:56|  分类: NET开发 |举报 |字号 订阅   项目之前的登陆机制是这样的:用户登陆后初始化一个类,类 ...

  7. 多台web如何共享session进行存储(转载)

    session的存储了解以前是怎么做的,搞清楚了来龙去脉,才会明白进行共享背后的思想和出发点.我喜欢按照这样的方式来问(或者去搞清楚):为什么要session要进行共享,不共享会什么问题呢? php中 ...

  8. Session会话保持机制的原理与Tomcat Session共享的几种实现方式(Session Cluster、memcached+MSM)

    一.Session的定义 在计算机科学中,特别是在网络中,session是两个或更多个通信设备之间或计算机和用户之间的临时和交互式信息交换.session在某个时间点建立,然后在之后的某一时间点拆除. ...

  9. Laravel 5.1 中 Session 数据存储、访问、删除及一次性Session实例教程

    1.Session的由来及其实现 HTTP协议是无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的.也就是说我们无法在服务器端确认两次请求是否是同一个用户所为,这为我们在一些应用场景中实现 ...

随机推荐

  1. Linux+Apache+Mysql+Php

    CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境 一.简介 什么是LAMP    LAMP是一种Web网络应用和开发环境,是Linux, Apache, My ...

  2. 第一个Python程序的Hello Python,竟然有问题

    print 'hello python' 运行时显示:SyntaxError: invalid syntax 解决办法: 这应该是版本的问题,Python2的话直接就可以输出,但是到了Python3需 ...

  3. WebApi异常

    WebApi异常处理解决方案   前言:上篇C#进阶系列——WebApi接口传参不再困惑:传参详解介绍了WebApi参数的传递,这篇来看看WebApi里面异常的处理.关于异常处理,作为程序员的我们肯定 ...

  4. 从零開始学android&lt;ImageSwitcher图片切换组件.二十六.&gt;

    ImageSwitcher组件的主要功能是完毕图片的切换显示,比如用户在进行图片浏览的时候.能够通过button点击一张张的切换显示的图片,并且使用ImageSwitcher组件在每次切换的时候也能够 ...

  5. 一个使用Java jdk8中Nashorn(Java javascript引擎)设计的Web开发框架

    地址:https://github.com/iboxdb/hijk 採用给框架开发应用,简单直接.开发效率高 下载后 set PATH to /JAVA 8_HOME/bin jjs build.js ...

  6. Visual Studio Code中配置GO开发环境

    在Visual Studio Code中配置GO开发环境 一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的 ...

  7. const使用摘要

    const在四种方案如以下: int b = 500; const int *a = &b; ①(底层const) int const *a = &b; ②(底层const) int ...

  8. python可变参数调用函数的问题

    已使用python实现的一些想法,近期使用python这种出现的要求,它定义了一个函数,第一种是一般的参数,第二个参数是默认,并有可变参数.在第一项研究中python时间,不知道keyword可变参数 ...

  9. 【Nginx】epoll事件驱动模块

    Linux 2.4之前的内核版本号,Nginx事件驱动的方法是使用poll.select功能.过程必须等待一个事件发生在连接上(接收数据)时间,部连接都告诉内核,由内核找出哪些连接上有事件发生.因为须 ...

  10. iOS 获取联系人,并调用系统地址簿UI

    1.加入 AddressBook库 推断授权状态 -(bool)checkAddressBookAuthorizationStatus { //取得授权状态 ABAuthorizationStatus ...