一个php页面,收到需要查询的字符串,怎么加入session或者memcache,来记录提交到服务器的时间,下次查询的时间也记录,时间差超过多少才能继续查询一个简单的框架示意就行,拜托大家了!

解决方案 »

  1.   

    if (!empty($_SESSION['get_time']) && time() - $_SESSION['get_time'] < 5){
      // 5秒内重复提交,报错返回
    }else {
      // 首次提交或5秒后提交,正常操作
      $_SESSION['get_time'] = time();
    }
      

  2.   

    很感谢楼上,代码可用!请问memcache的写法是怎么样的?
      

  3.   

    <?php// 链接memcache
    $memcache = new Memcache;
    $memcache->addServer($server_host, $server_port, $server_persistent);$key = 'get_time';$get_time = $memcache->get($key);if(!empty($get_time) && time() - $get_time < 5) {
            // 5秒内重复提交,报错返回
    } else {
            // 首次提交或5秒后提交,正常操作
            $memcache->set($key, time());
    }
      

  4.   

    根据1#的代码修改一下为:
    //根据40条PHP代码优化的建议,用$_SERVER['REQUEST_TIME']代替time();<?php
    header("content-type:text/html;charset=utf-8");
    session_start();
    if ((!!isset($_SESSION['cha'])) && (($_SERVER['REQUEST_TIME']-$_SESSION['cha']) >30))
    {

         // 如果session存在,并且请求时间大于SESSION保存时间差为30秒,也就是过30秒后再请求,就重新给SESSION赋值,并执行查找!
         $_SESSION['cha'] = $_SERVER['REQUEST_TIME'];
     //......
            echo '这里是查找SQL的语句';
     //输出该条语句仅测试使用!正常情况只有每30秒才能输出该条语句,而后跟上查找的SQL操作和数据返回!
         }
      else 
      {
        $_SESSION['cha']=$_SERVER['REQUEST_TIME'];
     echo $_SESSION['cha'];
          //如果session、COOKIE为空,即为第一次执行查找,把时间附加到session/cookie,并设置一个长时间!
          }

    ?>
      

  5.   

        仔细看了一下1#的这种结构,感觉忽略了一种特殊情况,楼主可以试试,如果我不断执行刷新,那么$_SESSION['get_time']或$_SESSION['cha']将不断获得请求的新时间time(),这种情况如果也考虑在内,将让用户永远无法查询,即IF里的第一种情况一直都不会产生,再改一下为:
      
    <?php
    header("content-type:text/html;charset=utf-8");
    session_start();
    if(!isset($_SESSION['cha']))
    {
     $_SESSION['cha']=$_SERVER['REQUEST_TIME']; //单独列出来if判断分支,如果SESSION不存在就给值,如果存在就不再重复给值,刷新也不会重新获得请求值!
     echo $_SESSION['cha'];
    }
    if ((!!isset($_SESSION['cha'])) && (($_SERVER['REQUEST_TIME']-$_SESSION['cha']) >30))
    {
        
         // 如果session存在,并且请求时间大于SESSION保存时间差为30秒,也就是过30秒后再请求,就重新给SESSION赋值,并执行查找!
         $_SESSION['cha'] = $_SERVER['REQUEST_TIME'];
         //......
            echo '这里是查找SQL的语句';
         //输出该条语句仅测试使用!正常情况只有每30秒才能输出该条语句,而后跟上查找的SQL操作和数据返回!     }

    ?>
      
     you will try it! I hope it can help you!
      

  6.   

        如果只是判断选择分支语句这几条,根本不存在效率的区别!    关键是查询的SQL语句比较耗时,尤其是查找大数据量的情况下,Memcache肯定强过普通直接的SQL语句,它用内存缓冲数据来提升性能,这个速度,基本上就是直接从内存获取数据了,无需再经过数据库检索这个环节,唯一速度的阻挡就是带宽,而不是服务器自身了。所以它的速度不容置疑,前提要空间支持,如果服务器是自己的那一切都好说,如果是虚拟空间,未必一定支持Memcache!