PHP用mysql数据库存储session的代码

隐患一:如果客户端机器的cookie一旦因病毒而失效了,那么session也就相当于没有了。
隐患二:session在PHP认的是以文件的形式保存在一个临时文件夹里面的,对于一个小型系统来说,这样做完全可以,
可是对于一个大型而又被经常访问的系统来说,就不是很好的办法了。假设这个网站一天有1000个人访问。一个月以后session的临时文件夹就会有30000个临时文件。想象一下计算机要从30000里面找一条session_sid是一个多么漫长的事情呀!
因此为了提高效率。
交易使用用数据库保存session。具体方法如下:
1.更改PHP.ini文件
由于PHP认保存session的方式是files所以我们要改变它。即:找到“session.save_handler = files”将“files”改为“User”。
把session的模式改成用户自定义的。
2.建立数据库
CREATE TABLE db_session (
sesskey char(32) NOT NULL,
expiry int(11) unsigned NOT NULL,
value text NOT NULL,
PRIMARY KEY (sesskey)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
[/code]
数据库表明:dbsession
列名:sesskey,expiry,value 其中:sesskey为主键。
Value里面存放着session里面的值。
3.建立session
MysqL.PHP文件。这个文件是用来构造保存session的方法的。修改一下参数直接使用就可以了。
session_MysqL.PHP
PHP代码:
<div class="codetitle"><a style="CURSOR: pointer" data="37318" class="copybut" id="copybut37318" onclick="doCopy('code37318')"> 代码如下:

<div class="codebody" id="code37318">
<?PHP
$gb_dbname="db_myBBS";//数据库名称
$gb_DBuser="root";//数据库用户名
$gb_DBpass="23928484";//数据库密码
$gb_DBHOSTname="localhost";//主机的名称或是IP地址
$SESS_DBH="";
$SESS_LIFE=get_cfg_var("session.gc_maxlifetime");//得到session的最大有效期。
function sess_open($save_path,$session_name){
global $gbDBHOSTname,$gbdbname,$gb_DBuser,$gb_DBpass,$SESS_DBH;
if(!$SESS_DBH=MysqL_pconnect($gb_DBHOSTname,$gb_DBpass)){
echo "
  • MysqL Error:".MysqL_error()."
  • ";
    die();
    }
    if(!MysqL_selectdb($gbdbname,$SESS_DBH)){
    echo "
  • MysqL Error:".MysqL_error()."
  • ";
    die();
    }
    return true;
    }
    function sess_close(){
    return true;
    }
    function sess_read($key){
    global $SESS_DBH,$SESS_LIFE;
    $qry="select value from db_session where sesskey = '$key' and expiry > ".time();
    $qid=MysqL_query($qry,$SESS_DBH);
    if(list($value)=MysqL_fetch_row($qid)){
    return $value;
    }
    return false;
    }
    function sess_write($key,$val){
    global $SESS_DBH,$SESS_LIFE;
    $expiry=time()+$SESS_LIFE;
    $value=$val;
    $qry="insert into db_session values('$key',$expiry,'$value')";
    $qid=MysqL_query($qry,$SESS_DBH);
    if(!$qid){
    $qry="update db_session set expiry=$expiry,value='$value' where sesskey='$key' and expiry >".time();
    $qid=MysqL_query($qry,$SESS_DBH);
    }
    return $qid;
    }
    function sess_destroy($key){
    global $SESS_DBH;
    $qry="delete from db_session where sesskey = '$key'";
    $qid=MysqL_query($qry,$SESS_DBH);
    return $qid;
    }
    function sess_gc($maxlifetime){
    global $SESS_DBH;
    $qry="delete from db_session where expiry < ".time();
    $qid=MysqL_query($qry,$SESS_DBH);
    return MysqL_affected_rows($SESS_DBH);
    }
    session_module_name();
    session_set_save_handler("sess_open","sess_close","sess_read","sess_write","sess_destroy","sess_gc");
    ?>

  • 4.建立测试文件
    在使用之前必须引用刚刚建立的session_MysqL.PHP文件
    session_test.PHP
    PHP代码:
    <div class="codetitle"><a style="CURSOR: pointer" data="29032" class="copybut" id="copybut29032" onclick="doCopy('code29032')"> 代码如下:
    <div class="codebody" id="code29032">
    <?PHP
    include ("session_MysqL.PHP");
    session_start();
    $_SESSION['abc']= "A: I will be back!";
    $_SESSION['meto']= "B: Me too ";
    $_SESSION['name']= "louis ";
    echo "<a href=\"get_session_test.php\">click me";
    ?>

    get_session_test.php
    <div class="codetitle"><a style="CURSOR: pointer" data="7005" class="copybut" id="copybut7005" onclick="doCopy('code7005')"> 代码如下:
    <div class="codebody" id="code7005">
    <?PHP
    include ("session_MysqL.PHP");
    session_start();
    echo $_SESSION['abc'];
    echo "
    ";
    echo $_SESSION['meto'];
    echo "
    ";
    echo $_SESSION['name'];
    $_SESSION['wq']="12e";
    echo "
    <a href=\"get_session_test2.php\">click again";
    ?>

    get_session_test2.php
    <div class="codetitle"><a style="CURSOR: pointer" data="46526" class="copybut" id="copybut46526" onclick="doCopy('code46526')"> 代码如下:<div class="codebody" id="code46526">
    <?PHP
    include ("session_MysqL.PHP");
    session_start();
    echo $_SESSION['abc'];
    echo "
    ";
    echo $_SESSION['meto'];
    echo "
    ";
    echo $_SESSION['name'];
    echo "
    ";
    echo $_SESSION['wq'];
    //session_destroy();//用来销毁所有session的函数
    ?>

    mysqlPHP存储session数据库数据库

    相关文章

    统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
    统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
    前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
    FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
    之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
    统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...