如何设置饼干20分钟,并检查它们是否已过期

时间:2011-12-21 12:02:10

标签: php cookies

我在考虑一个允许用户每20分钟只发布一篇文章的系统。我不使用会员系统,所以我想我可以设置一个20分钟的cookie。并且当用户发布某些内容时检查是否设置了cookie,如果是,则显示消息,如“仅允许每20分钟发布一个帖子”,如果未设置,则将内容放入数据库中。

我是相对较新的PHP,不知道如何设置cookie,我试着在cookies上查看php.net手册,但这对我来说太混乱了。那么请你说明如何设置20分钟的安全cookie并检查它是否设置。也许你有更好的建议,而不是饼干等。

谢谢。

5 个答案:

答案 0 :(得分:12)

请参阅以下功能:

要将Cookie设置为20分钟,您可以执行以下操作:

setcookie("postedArticle", true, time() + (60 * 20)); // 60 seconds ( 1 minute) * 20 = 20 minutes

检查是否设置了cookie:

if(isset($_COOKIE['postedArticle']) && $_COOKIE['postedArticle'] == true)
{ 
    // IS SET and has a true value
}    

答案 1 :(得分:2)

为此目的使用cookie毫无意义 如果您正在谈论的是注册用户,则必须在服务器端存储此类信息 但如果它是匿名用户,则无法阻止他们每秒发布一次。要从浏览器中清除cookie,只需按一个按钮即可。

答案 2 :(得分:1)

正如其他人所指出的,做这种工作的cookie方法是没用的。因此加密也是浪费资源。

如果您想阻止垃圾邮件,则应插入CAPTCHA验证

您在这里尝试的是准备使用的代码。

我已经加入了Cookie值,因此任何人都无法更改Cookie的值。

但他们仍然可以删除普通用户在看到加密值时不会做的cookie。

<?php
$cookiename="yourcookiename";
$mysalt="secret salt";
function encrypt($text, $salt) 
{ 
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)))); 
} 

function decrypt($text, $salt) 
{ 
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $salt, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))); 
}

$read="false";
if(isset($_COOKIE[$cookiename]))
    {$read=decrypt($_COOKIE[$cookiename], $mysalt);
    }
if($read=='true')
{
//your stuff
setcookie($cookiename, encrypt("true", $mysalt), time()+20*60);
}
else {
//can't post
}

?>

答案 3 :(得分:0)

设置为

setcookie("TestCookie", $value, time()+1200);

20分钟后检查是否会过期而不是其他工作..

答案 4 :(得分:0)

我知道这是8岁的孩子,但是想补充一些关于使用cookie以满足您的特定需求的事情。

如果您真的希望用户仅发布20分钟,那么最好的方法是使用会话,而不是cookie,因为可以轻松地编辑cookie,人们可以将时间设置为1分钟或更短。因此,最好使用的是会话。我知道这个答案是题外话,但只想说一些有关此的信息,希望对您有所帮助。我也将一些文档包含在Cookies和Sessions中,因此,如果您或任何人需要一些额外的帮助。

来源: Stack Overflow

文档: