我在想一个系统,允许用户每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