PLAN:编写读写session的函数(带简单语义解析)

2013-12-03 1,551 0 开发! 大超超。

把玩着大超超计划表,看调试记录里面的db查询记录时发现有重复查询,如下图:

131203调试内容中查询记录.png

就想着如何优化它,想到了用session保存查到的结果。session的数据保存在服务器硬盘,但是每次运行脚本使用session_start()函数时就载入到内存,如果把sid值保存到session中,并在在数据库查询sid之前判断一下是否在session中有sid了,如果有就直接取sid并返回,如果没有再查询并将sid保存到session,以后就都沿用这个session中的sid,这样可以降低服务器压力,提升系统效率。

sid这个值一般不会变,因此打算正好写一个和ckcookie读写函数)相对应的session读写函数ss,复制、编写、测试,最终得到如下代码:

// 读写session @ 2013-12-03 11:09:04
function ss( $s, $v=FALSE ){
    if( $s=='' ) return '未定义session名';
    if(!isset($_SESSION)) session_start();
    // 如果中间有>号,表示多重
    if( strpos($s, '>') ){
        $d = explode('>', $s);
        $count = count($d);
        if( $count>3 ){
            $ret = '最多三层(两个>号)';
            return $ret;
        }
        if( $count==3 ) $ssgt = &$_SESSION[$d[0]][$d[1]][$d[2]];
        elseif( $count==2 ) $ssgt = &$_SESSION[$d[0]][$d[1]];
    }
    else $ssgt = &$_SESSION[$s];
             
    // 如果是清除
    if( $v===NULL ){
        if( $count==3 ) unset($_SESSION[$d[0]][$d[1]][$d[2]]);
        elseif( $count==2 ) unset($_SESSION[$d[0]][$d[1]]);
        else unset($_SESSION[$s]);
    }
    else if( $v!==FALSE ){
        $ssgt = $v;
        $ret = 1;
    }
    else{
        $ret = $ssgt;
    }
    return $ret;
}

测试过程(ss('***>***>***')里面的">"greater than符号含有简单的语义哈):

测试-PHP代码:
ss('u_test>test>abc', 123);
echo (ss('u_test>test>abc')).'<br>';
echo $_SESSION['u_test']['test']['abc'];
         
输出结果-HTML:
123
123
         
查看session数组内容:
[u_test] => (
  [abc] => 2
  [test] => (
    [abc] => 123
  )
)

实际用处:

// 优化sid函数,使用session保存 @ 2013-12-03 11:14:54
function sid(){
    if( ss('u_sid')!='' ){
        $sid = ss('u_sid');
    }
    else{
        global $db;
        $sid = $db->val("select sid from session where hash='".hashid()."'");
        ss('u_sid', $sid);
    }
    return $sid;
}
         
// 数据库备份函数-避免短时间内重复备份
if( time()-ss('system>dbBackup_time')<3*60 ) return;
ss('system>dbBackup_time', time());

优化后:

131203调试内容中查询记录(优化后).png

并且在后续都不需要去数据库查询了,因为session里面已经保存这个值了。

 



声明: 本文由大超超。原创编译,转载请保留链接: http://www.thinkful.cn/archives/342.html