【问题标题】:Make Cookie expire according to URL-variable with PHP使用 PHP 根据 URL 变量使 Cookie 过期
【发布时间】:2017-02-17 00:20:49
【问题描述】:

我正在开发一个新产品/网站,主页(而不是子页面)应该对访问者关闭,直到网站启动。应该像这样从 URL 中读出发布日期:

website.com/some-subpage?launch=0421

在本例中,从 4 月 21 日 (21) 日 (04) 日起,访问者应该可以访问主页。

为此,我想这样做,如果有人访问“某些子页面”(或任何其他子页面,没关系),应该像这样设置 cookie:

  • Cookie 名称:启动
  • Cookie 值:0421
  • Cookie 过期:在发布时,因此在本例中为 4 月 21 日

这是我目前所拥有的:

<?php
if ($_GET['launch'] != "null") {
date_default_timezone_set('Europe/Berlin');
$launchdate = $_GET['launch'];

$launchdatenew->format('*********'); // Here I probably need to convert the "0421" to a readable time, but I dont know how
// or probably using this version?
$launchdatenew = date_format(date_create_from_format('m d', $launchdate), '*********'); // Here I probably need to convert the "0421" to a readable time, but I dont know how

setcookie("Launch", $launchdate, $launchdatenew, "/"); // The Cookie-Name should be "Launch", the value "0421", and it should expire when the launch starts

} ?>

你能帮我完成这个吗?我不知道如何将“0421”转换为可以设置为 cookie 过期日期的新格式。不幸的是,我的 PHP 技能几乎为零。

非常感谢! 再见, 伊姆雷

【问题讨论】:

  • 您是否遇到错误?什么不起作用?显而易见的事情是您信任的用户土地数据$_GET['launch'];,然后也将其存储在用户土地中。
  • 不,我还没有测试它,因为我确定它不会工作(我不知道如何将“0421”转换为可以设置为到期日期的新格式cookie。这不是问题,用户可以操纵它——他们不会。
  • 他们会的。永远不要相信他们。

标签: php cookies time setcookie


【解决方案1】:

然后我将向您展示如何根据 $launch 中的日期在该 cookie 上设置 expire

假设将始终采用“mmdd”格式,然后进行一些简单的字符串操作...

$launchDateStr = '0421';

$launchTime = mktime(0, 0, 0, substr($launchDateStr, 0, 2), substr($launchDateStr, 2));

$ttl = $launchTime - time(); //just an example... find seconds between now and launch

setcookie("launch", $launchDateStr, $launchTime, "/");

警告...这忽略了年份。您不应该信任用户数据。所有这些都可以被欺骗。

【讨论】:

  • 谢谢ficuscr,这对我有进一步的帮助!如何计算从现在到 $launchTime 之间的秒数?忽略年份这一事实不是问题。感谢您提供不信任用户数据的提示 - 但只要他们单击带有“启动”变量的链接,cookie 就会被设置 - 现有的 cookie 不会被覆盖(我将使用 IF 执行此操作),因此更改启动变量和访问这个新链接不会做任何事情。顺便说一句,“$ttl”不应该是到期日期吗?
  • “我如何计算从现在到 $launchTime 的秒数?”参见 TTL 示例。 ““$ttl”不应该是到期日期吗?” 不。它想要那个日期时间的 unix 时间戳,而不是剩余的秒数。
  • 为什么我们需要 "$ttl" 部分?算了算没用过吧?
  • 不,我也错误地开始认为我需要它来做饼干。然后认为离开可能是一件有用的事情,因为它很可能是你的下一个问题,所以我只是离开了那一行,以展示如果需要你将如何获得它。
  • 非常-非常感谢您的帮助,榕树!我现在测试了它,它工作得很好! (顺便说一句,在 setcookie 中,你拼错了“launchDateStr”,这让我花了几分钟才发现缺少一个“n”:))。
猜你喜欢
  • 1970-01-01
  • 2011-09-08
  • 2023-04-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 2023-04-08
相关资源
最近更新 更多