Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 每个IP 1个视图或设置Cookie_Php_Mysql_Html_Cookies - Fatal编程技术网

Php 每个IP 1个视图或设置Cookie

Php 每个IP 1个视图或设置Cookie,php,mysql,html,cookies,Php,Mysql,Html,Cookies,好的,我想允许一个用户每一页查看一次,然后向他们发送一个cookie,阻止他们再次查看该页面,但我不擅长cookies,我希望使用IP,但我更希望通过cookies。这可能吗?我该怎么做?最简单的答案: if(isset($_COOKIE['myCookie'])){ die('Not allowed! Only one view per user!'); } else{ setcookie('myCookie', true); } //content here 使用会话进行操

好的,我想允许一个用户每一页查看一次,然后向他们发送一个cookie,阻止他们再次查看该页面,但我不擅长cookies,我希望使用IP,但我更希望通过cookies。这可能吗?我该怎么做?

最简单的答案:

if(isset($_COOKIE['myCookie'])){
    die('Not allowed! Only one view per user!');
}
else{
    setcookie('myCookie', true);
}
//content here
使用会话进行操作:

session_start();
if(isset($_SESSION['mySession'])){
    die('Not allowed! Only one view per user!');
}
else{
    $_SESSION['mySession'] = true;
}
//content here
重定向而不是显示错误:

if(isset($_COOKIE['myCookie'])){
    header('Location: error.php');
    exit;
}
else{
    setcookie('myCookie', true);
}
//content here
很有可能

<?php 
    if(isset($_COOKIE['blocked'])) {die('Access denied');}
    setcookie("blocked", true);
?>

当然,绕过(删除cookies)是很简单的

你真正的问题是信任问题。Cookie由客户发送给您,您永远不应该信任客户

从根本上说,如果您想限制访问,您要么需要在服务器端保留无法更改的记录(例如强制用户登录、与用户关联),要么接受这一点,实际上,您正在建立一种非常不安全的防御

请注意,IP地址也不好,因为一家公司中的许多用户可能都具有相同的IP地址,所以阻止一个用户会阻止所有用户。此外,一些家庭用户只需断开/重新连接调制解调器/路由器,就可以获得新的IP地址

if ( !isset($_COOKIE['visited'][$page_id]) )
{
    // leave him view the page
    $_COOKIE['visited'][$page_id] = true;
}
else
{
    // get him out of there
}
这需要在索引/页面开始时写入

但是,我不建议这样做,因为客户端很容易编辑cookie。会话是安全的方式。

我会避免使用:

A) 限制访问的Cookie(可由客户端编辑)

B) IP地址’(可以轻松更改。)


正如@Basic所说,可能让他们登录,只让该用户查看一次。

但当cookie被清除后,他将能够查看该页面。任何用户都可以查看该页面,或者用户已在您的站点注册吗?任何用户、来宾和注册者,我也会通过IP进行查看,但我不想让家里的每个人都不能方便地查看iTunes,会话也基于cookie或在链接中保留ID,因此删除cookie缓存将阻碍这两者。我的“答案”也是如此。从根本上说,我知道这不是正确的方法,但是用IP做这件事也很容易。从长远来看,我可能会做其他事情,但另一页上没有什么有价值的东西,所以即使他们删除他们的cookie也没什么大不了的。如果用户删除会话cookie会怎么样?@Terry Seidler:天哪,你错了。基本:会话已被破坏。他们可以通过以下方式创建另一个帐户:(@NateCorky,这就是为什么大多数网站强制使用一个可以被检查为唯一的电子邮件地址。当然,现在每个人都有多个地址,所以这也不好。你正处于一个漫长、持续的游戏的一端。这都是为了在努力和安全性之间找到折衷。在最极端的情况下,用户可以重新设计他们的系统(或者更简单地说,交换浏览器)。现在你根本不可能知道是同一个人。除非与每个人面对面地见面并向他们提供帐户,否则无法保证每个用户都是唯一的。是的,很不幸:(但我想让来宾查看,只有当文本文件的所有者希望每人定义一个视图时才进行注册,这是不可能的。)(我将暂时使用cookies,直到我构建了一个安全的系统(ish)我可以问一下你为什么要这样做吗?他们只能查看一次是否很重要?你是对的,但我只想禁止每个人(计算机)查看一次它有多重要?如果它不重要,像这样的cookie就可以了——但任何拥有超级用户级知识的人都可以绕过它。你要么毫无疑问地识别每个用户,记录谁看到了页面并阻止服务器端,要么信任客户端告诉你真相,希望它没有被任何方式修改。从根本上说没有其他选择。您的解决方案的强度将取决于a)您能够识别您的访客有多困难,或b)客户伪造您正在检查的细节有多困难。伪造cookies并不十分重要。如果绕过它,他们就无法编辑(不是管理面板等)只是另一个用户希望他们只查看一次的一段文本。然后我倾向于将cookie解决方案作为一个快速、肮脏的修复方案,它不是非常安全,但会阻止大多数不主动尝试绕过它的用户。将其视为“将钥匙藏在石头下”解决方案。