【问题标题】:1 View per IP or Set Cookie1 查看每个 IP 或设置 Cookie
【发布时间】:2012-08-31 18:20:48
【问题描述】:

好的,我想允许一个用户在每个页面上查看 1 次,然后向他们发送一个 cookie,以阻止他们再次查看该页面,但我不擅长使用 cookie,我会使用 IP 但我宁愿通过cookies做到这一点。这可能吗?我该怎么做?

【问题讨论】:

  • 但是当cookie被清除后,他将能够查看该页面..
  • 任何用户都可以查看该页面,或者用户在您的网站上注册了吗??
  • 任何用户、访客和注册用户,我也会通过 IP 进行操作,但我不希望他们家中的每个人都无法查看它

标签: php mysql html cookies


【解决方案1】:

最简单的答案:

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

【讨论】:

  • 不幸的是,会话也基于 cookie 或在链接中保留 Id - 因此删除 cookie 缓存将挫败两者。这同样适用于我的“答案”。从根本上说,这不是正确的方法
  • 我知道,但是使用 IP 进行操作也很容易通过。从长远来看,我可能会做其他事情,但其他页面上没有任何有价值的东西,所以即使他们删除了他们的 cookie 也没什么大不了的。
【解决方案2】:

很有可能

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

当然,绕过(删除cookies)是微不足道的。

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

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

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

【讨论】:

  • 你说得对,但我只想禁止每人(计算机)查看 1 次
  • 它有多重要?如果它不重要,那么像这样的 cookie 就可以了——但任何拥有高级用户级别知识的人都可以绕过它。您要么需要明确地识别每个用户,记录谁看过该页面并阻止服务器端,要么相信客户端会告诉您真相并希望它没有以任何方式被修改。从根本上说,没有其他选择。您的解决方案的强度将取决于 a) 您识别访问者的难易程度,或 b) 客户伪造您正在检查的细节的难易程度。伪造饼干是微不足道的
  • 不是很重要。如果他们绕过它,他们就无法编辑(它不是管理面板等)。只是另一个用户希望他们只查看一次的一段文本。
  • 那么我倾向于将 cookie 解决方案作为一种快速的'n脏修复',它不是很安全,但会阻止大多数不主动尝试绕过它的用户。将其视为“将钥匙藏在岩石下”的解决方案。
【解决方案3】:
if ( !isset($_COOKIE['visited'][$page_id]) )
{
    // leave him view the page
    $_COOKIE['visited'][$page_id] = true;
}
else
{
    // get him out of there
}

这需要写在索引/页面的开头。

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

【讨论】:

  • 如果用户删除会话cookie会发生什么?
  • @Terry Seidler:天哪,你错了。基本:会话被销毁。
【解决方案4】:

我会避免使用:

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

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

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

【讨论】:

  • 他们可以创建另一个帐户 :(
  • @NateCorky 这就是为什么大多数网站强制使用可以检查为唯一的电子邮件地址的原因。当然,现在每个人都有多个地址,所以这也不好。你正处于一场漫长而持续的游戏的尽头。这一切都是为了在工作量和安全性之间找到一个折衷方案。在最极端的情况下,用户可以重新格式化他们的系统(或者不太彻底,交换浏览器)。现在绝对不可能知道它是同一个人。如果无法与每个人面对面交流并为他们提供帐户,就无法保证每个用户都是独一无二的
  • 是的,很不幸 :( 但我想让客人查看,只有在文本文件的所有者想要定义每人 1 个查看时才注册,这将是不可能的。:( 我'将暂时只使用cookie,直到我建立一个安全的系统(ish)
  • 请问您为什么要这样做?他们只能查看一次,这很重要吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 2013-11-19
  • 2016-06-01
  • 2014-01-12
  • 2017-10-14
  • 2019-08-03
  • 1970-01-01
相关资源
最近更新 更多