如何缓存rand()的结果?

时间:2018-07-30 08:58:18

标签: php caching

我想将rand()的结果缓存5分钟。

<?php

$sec = 300;
$expires = gmdate("D, d M Y H:i:s", time() + $sec) . " GMT";
header("Expires: $expires");
header("Pragma: cache");
header("Cache-Control: max-age=$sec");

echo "Test " . rand(1, 10);

不幸的是,我不知道为什么我的代码不起作用。每次我在浏览器中调用php文件时,随机数都是不同的。 有人知道问题出在哪里吗?

编辑: 标头已正确发送,但是每次我重新加载页面时,Expires标头都会更改。 当我打印$_SERVER时,HTTP_CACHE_CONTROL标头显示no-cache。 可能是问题所在吗?

3 个答案:

答案 0 :(得分:0)

I want to cache the result of rand() for 5 minutes.It can be possible throw javascript code. But it store in cookie

// this fun call after every 5 miniute
setInterval(function(){ 
    generate_and_cookie_random_fun();   
}, 5000);

// this fun generate random number and sotre it to cookie
function generate_and_cookie_random_fun(){
  var random_number = Math.floor(Math.random() * 6) + 1 ;
  setCookie('name_of_cookie',random_number ,7);  // here 7 mean seven days
}

// below code for cookie 
function setCookie(name,value,days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + (value || "")  + expires + "; path=/";
}
function getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}
function eraseCookie(name) {   
    document.cookie = name+'=; Max-Age=-99999999;';  
}

答案 1 :(得分:0)

好吧,这里的每个人都在建议替代方法,包括javascript,cookie等,但不能回答问题。

问题是要使用标头进行缓存,以明确存在304 NOT Modified响应...

<?php
$sec = 300;
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
{
    $if_modified=time($_SERVER['HTTP_IF_MODIFIED_SINCE']);
    if($if_modified>time()-$sec)
    {
        Header("HTTP/1.1 304 Not Modified");
        exit();
    }

}

$expires = gmdate("D, d M Y H:i:s", time() + $sec) .' '. date_default_timezone_get();
$modified= gmdate("D, d M Y H:i:s", time()) . ' '.date_default_timezone_get();
header("Expires: $expires");
header("Last-Modified: $modified");
header("Pragma: cache");
header("Cache-Control: max-age=$sec");

echo "Test " . rand(1, 10);

你去了。 缓存带有标头的随机数。

答案 2 :(得分:-2)

简单的方法是将其存储在cookie中,并检查cookie是否存在以显示存储的号码,否则生成新的

类似这样的东西:

<?php
setcookie("random_number", rand(1, 10), time() + 300);

if(isset($_COOKIE['random_number'])) {
echo $_COOKIE['random_number'];
} else {
setcookie("random_number", rand(1, 10), time() + 300);    
}