课程咨询 :025-86971863

南京PHP培训 > 雇主企业 > 企业笔试题 > php session存数据库
  • php session存数据库

    发布:南京PHP培训      来源:企业笔试题    

  • 这个sesison存到数据库很简单,就是根据session_id进行对数据库的CRUD操作,主要是用到了,session_set_save_handler这个方法,自定义session的执行方法,

    首先创建数据表

    CREATE TABLE `sessions` ( `session_id` varchar(255) NOT NULL, `session_expires` int(11) DEFAULT NULL, `session_data` text, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    然后封装操作session的工具类:

    <!--?php

    //error_reporting(0);

    class session {

    var $lifeTime;

    var $dbHandle;

    function open($savePath, $sessName) {

    $this--->lifeTime = get_cfg_var("session.gc_maxlifetime");

    $dbHandle = mysql_connect("localhost","root","root");

    $dbSel = mysql_select_db("mysession",$dbHandle);

    if(!$dbHandle || !$dbSel)

    return false;

    $this->dbHandle = $dbHandle;

    return true;

    }

    function close() {

    $this->gc(ini_get('session.gc_maxlifetime'));

    return @mysql_close($this->dbHandle);

    }

    function read($sessID) {

    $res = mysql_query("SELECT session_data AS d FROM sessions

    WHERE session_id = '$sessID'

    AND session_expires > ".time(),$this->dbHandle);

    if($row = mysql_fetch_assoc($res))

    return $row['d'];

    return "";

    }

    function write($sessID,$sessData) {

    $newExp = time() + $this->lifeTime;

    $res = mysql_query("SELECT * FROM sessions

    WHERE session_id = '$sessID'",$this->dbHandle);

    if($res) {

    mysql_query("UPDATE sessions SET session_expires = '{$newExp}',session_data = '{$sessData}' WHERE session_id = '{$sessID}'",$this->dbHandle);

    if(mysql_affected_rows($this->dbHandle))

    return true;

    }

    else {

    mysql_query("INSERT INTO sessions (

    session_id,

    session_expires,

    session_data)

    VALUES(

    '{$sessID}',

    '{$newExp}',

    '{$sessData}')",$this->dbHandle);

    if(mysql_affected_rows($this->dbHandle))

    return true;

    }

    return false;

    }

    function destroy($sessID) {

    mysql_query("DELETE FROM sessions WHERE session_id = '$sessID'",$this->dbHandle);

    if(mysql_affected_rows($this->dbHandle))

    return true;

    return false;

    }

    function gc($sessMaxLifeTime) {

    mysql_query("DELETE FROM sessions WHERE session_expires < ".time(),$this->dbHandle);

    return mysql_affected_rows($this->dbHandle);

    }

    }

    #对session进行测试,发现数据库中并没有存入数据只有session_id,和session_expires的数值,其实session_data是存在的只是我们看不到

    $session = new session();

    session_set_save_handler(array(&$session,"open"),

    array(&$session,"close"),

    array(&$session,"read"),

    array(&$session,"write"),

    array(&$session,"destroy"),

    array(&$session,"gc"));

    session_start();

    $session->write(session_id(),json_encode(array("name"=>"gxx","pass"=>"123")));

    echo $session->read(session_id());

    ?>

    这里居然不支持插图。。

    数据库数据:

    s430j9t480ocbovq6a7a0rlk22 1435054078

    session查询数据:

    JSON

    ame"gxx"

    pass"123"不要被事物蒙蔽了眼睛。。。。

    南京php培训:nj.php.tedu.cn

    推荐文章

上一篇:PHP 数据类型

下一篇:PHP面向对象编程详解:类和对象

最新开班日期  |  更多

PHP高级开发工程师就业班

PHP高级开发工程师就业班

开班日期:04-28

PHP高级开发工程师精品班

PHP高级开发工程师精品班

开班日期:04-28

PHP高级开发工程师周末班

PHP高级开发工程师周末班

开班日期:04-28

PHP高级开发工程师定制班

PHP高级开发工程师定制班

开班日期:04-28

  • 地址:南京市秦淮区太平南路333号金陵御景园8楼达内
  • 课程培训电话:025-86971863     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2002-2018 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56