我在考虑一个允许用户每20分钟只发布一篇文章的系统。我不使用会员系统,所以我想我可以设置一个20分钟的cookie。并且当用户发布某些内容时检查是否设置了cookie,如果是,则显示消息,如“仅允许每20分钟发布一个帖子”,如果未设置,则将内容放入数据库中。
我是相对较新的PHP,不知道如何设置cookie,我试着在cookies上查看php.net手册,但这对我来说太混乱了。那么请你说明如何设置20分钟的安全cookie并检查它是否设置。也许你有更好的建议,而不是饼干等。
谢谢。
答案 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
文档: