正务库

利用cookie应该可以实现php指定时间随机一次

时间:11个月前   游览量:155    标签: nbsp    quot    时间    过期    39   

在取出数据之后把数据缓存在客户端,然后cookie指定一个时间周期,在下次刷新时先判断这个cookie时间到期没,如果到期了就重新刷新,否则就调用本地缓存。以下是以 emlog 博客为案例的代码

<?php
    //载入全局加载项
    require_once 'init.php';
    //链接数据库
    $DB = MySql::getInstance();
    /*****************根据条件随机获取20条文章的GID***************/
    $sql = "SELECT * FROM ".DB_PREFIX."blog ORDER BY rand() DESC LIMIT 20";
    $list = $DB->query($sql);
    while($row = $DB->fetch_array($list)){
        $arrgid.= $row['gid'].',';
    }
    $arrgid = substr($arrgid,0,strlen($arrgid)-1);//去除最后一个逗号
    $arr = explode(",",$arrgid);//将获取的gid以逗号分割为数组
    
    
    /***********函数,根据文章gid输出文章标题与连接**************/
    function sylist($gid){
        $DB = MySql::getInstance();
        $sql = "SELECT * FROM ".DB_PREFIX."blog WHERE gid = '{$gid}'";
        $list = $DB->query($sql);
        while($row = $DB->fetch_array($list)){
            return '<li><a target="_blank" href="'.Url::log($row['gid']).'">'.$row['title'].'</li>';
        }
        
    }

    /***********根据cookie在指定时间内获取内容**************/
    //判断cookie【gid】是否存在
    if (isset($_COOKIE["gid"])){
        
        //判断cookie【date】过期时间是否存在
        if(isset($_COOKIE["date"])){
            
            echo '过期时间为:'.date("Y-m-d H:i:s", $_COOKIE["date"]).'<br/><br/>';
            
            //判断时间是否过期,当前时间大于cookie【date】中储存的时间则为过期
            if(time() > $_COOKIE["date"]){
                //如果过期了,重新创建过期时间
                setcookie("date", "", time()-3600);//删除过期时间
                setcookie("date", time()+60*1,time()+3600);//重新创建过期时间,其中的60*1为一分钟
                //刷新内容
                setcookie("gid", "", time()-3600);//删除过期内容
                setcookie("gid", $arrgid,time()+3600);//重新创建内容
            }

            //输出内容
            $arr = explode(",",$_COOKIE["gid"]);
            //循环输出数组
            foreach($arr as $value){
                echo sylist($value);
            } 
            
        }else{
            //如果不存在,则创建一个距离当前时间一分钟的时间为过期时间
            setcookie("date", time()+60*1,time()+3600);//其中的60*1为一分钟
            //如果date不存在时则会输出空白,此时随机输出内容
            foreach($arr as $value){
                echo sylist($value);
            }
        }
    }else{
        setcookie("date", time()+60*1,time()+3600);//其中的60*1为一分钟
        setcookie("gid", $arrgid,time()+3600);//如果gid不存在,则创建gidcookie,内容为随机获取的文章gid
        //如果gid不存在时则会输出空白,此时随机输出内容
        foreach($arr as $value){
            echo sylist($value);
        }
    }
?>

本文代码由 emlog学院陈子文提供,博客簿仅作保存分享之用!