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


How to set cookies for 20 min and check if they are expired

我在想一个系统,允许用户每20分钟只发布1篇文章。我不使用会员系统,所以我想我可以设置一个cookie为20分钟。当用户发布的东西检查cookie是否设置,如果是,显示消息,如"每20分钟只允许1篇文章",如果它不设置比放在数据库中的东西。

我对php比较陌生,不知道如何设置cookie,我试着看了看php.net的cookie手册,但它对我来说太混乱了。所以你能告诉我如何设置一个20分钟的安全cookie,并检查它是否被设置。也许你有更好的建议,而不是饼干等。

谢谢。

查看这些函数:

  • setCookie
  • 获取cookie值

设置一个20分钟的cookie,你可以这样做:

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
}    

将cookie用于此目的是没有意义的。
如果您谈论的是注册用户,则必须在服务器端存储这些信息。
但如果是匿名用户,你无法阻止他们每秒钟都发帖子。从浏览器中清除cookie只需要按下一个按钮。

正如其他人指出的那样,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
}
?>

set like

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

在20分钟后检查是否会过期,否则不会。

我知道这是8年前的事了,但是我想补充一些关于使用cookie的问题,以满足您的特定需求。

如果你真的希望用户只发布20分钟,那么最好的方法是使用会话,而不是cookie,因为cookie可以很容易地编辑,人们可以将他们的时间设置为1分钟或更短。所以最好是使用会话。我知道这个答案离题了,但我只是想说一些关于这个的信息,我希望它能在某种程度上有所帮助。我也包括了一些文档cookie和会话,所以如果你或任何人需要一些额外的帮助。

来源: Stack Overflow

文档:

  • W3School - Sessions
  • W3School - Cookies
  • php.net - Sessions