【问题标题】:PHP - How to I save a cookie and be able to refer to it later onPHP - 如何保存 cookie 并在以后引用它
【发布时间】:2013-12-14 22:18:52
【问题描述】:

我正在编写一个脚本。我需要一些可以保存会话 ID(MD5 散列,RAND 1、1000)变量的东西。我希望能够在另一个页面中从他们的计算机中调用此 cookie。但我只希望它删除一个在 10 分钟内过期的 cookie。

我正在编写一个脚本,用户可以在其中购买东西,我想要它,所以一旦他们订购了东西,比如说 VIP 包 1,它会检查它是否在出售(在我的 switch 语句中),它会返回订购商品的 URL - 我想要这个 cookie,这样如果他们要订购东西,并且他们已经 15 分钟不活动,cookie 将被删除,并且无法访问下一页。

我的表格如下:

if(isset($_POST['order']))
        {
    switch($_POST['order']) {
    case NULL:
        echo'<b>No order was selected.</b>';
        break;

    case 'vip1':
        echo 'You are ordering VIP 1!';
        break;

    case 'vip2':
        echo 'You are ordering VIP 2!';
        break;

    case 'vip3':
        echo 'You are ordering VIP 3!';
        break;

    case 'vip4':
        echo 'This is test 3!';
        break;
            } 
                } else { echo '<form action="shop.php" method="post">
    <input type="radio" name="order" value="vip1">VIP Package 1<br />
    <input type="radio" name="order" value="vip2">VIP Package 2<br />
    <input type="radio" name="order" value="vip3">VIP Package 3<br />
    <!--<input type="hidden" name="order"/>-->
    <input type="submit" value="Submit">
    </form>'; }

现在,在回声中,将包含购买该物品的链接。但是我想在他们访问页面时在某个地方生成一个 cookie,一旦他们选择了要购买的商品,它就会为他们提供购买它的 URL。当他们访问该 URL (checkout.php) 时,我希望它检查他们是否有有效的 cookie(他们不需要检查 ID,只是为了查看他们是否有来自我们网站的实际 cookie,其中将包含购买 ID)- 以及 cookie 的原因。这可能吗?

【问题讨论】:

    标签: php cookies


    【解决方案1】:

    您可以创建一个类实例来管理您的 cookie:

    class CookieStorage {
        protected $cookie;
    
        function __construct() {}
    
        //The setter function for the cookie
        public function set($key,$value,$expire=900) {
            //This will only update the cookie IF it is not already there.
            if(!$this->get($key)) {
                set_cookie($key,$value,$expire);
            }
        }
    
        //The getter function for the cookie
        public function get($key) {
            if(isset($_COOKIE[$key])) {
                $this->cookie = $_COOKIE[$key];
                return $this->cookie;
            } else {
                return false;
            }
        }
    

    }

    从技术上讲,您可以在类之外通过调用 $_COOKIE[$key] 来调用值来执行此操作,但这样做的好处是您有一个可以引用的工作实例,您可以取消访问全局变量$_COOKIE,你可以在一个地方添加额外的逻辑。这样就省去了必须更新每个检查 cookie 的地方的麻烦。

    要调用它,您只需执行以下操作:

    $cookie = new CookieStorage();
    $cookie->set($key,$value);
    

    然后检索:

    $cookie->get($key);
    

    【讨论】:

    • 我试过这个:pastebin.com/8GnpS79J - 但它不会在回显中显示 cookie,使用:$_COOKIE["sec_check_id"]
    • 我已经复制了你的代码,它对我有用,所以你有设置问题。您是否在浏览器上阻止了第一方 cookie?或者 - 您是否在代码的开头添加了 cookie,在任何 HTML 之前?因为如果你不这样做可能是问题:)
    【解决方案2】:

    您只需要使用 setcookie 函数设置一个 cookie。 More information here.

    一个 10 分钟到期的示例

    setcookie("name", $value, time()+600);  /* expires in 10 minutes */
    

    【讨论】:

    • 对,感谢您的帮助 :) 所以让我做对了。 “名称”将是 cookie 的名称?正确的? $value 将是我给他们的安全 ID,然后是时间?现在这个 cookie 是否可以在以后的页面中从我的网站中获取,就像它的变量一样? ($value) - 另外,我如何设置它,所以只给出 1 个 cookie,有没有办法检查我的网站是否已经有一个 cookie(如 IF cookie = true,否则给出 cookie)
    • 您可以使用 setcookie 覆盖现有的 cookie,只要您使用相同的密钥即可。您可以使用 $_COOKIE[$key]; 检索如果需要,您可以在其周围添加逻辑。
    • 我试过这个:pastebin.com/8GnpS79J - 但它不会在回显中显示 cookie,使用:$_COOKIE["sec_check_id"]
    • 您阅读文档了吗?它很好地解释了它。如果仅当前会话需要这样做,则可能值得使用会话。 $_SESSION['name'] = '价值';只需确保在要从中访问会话的每个脚本的顶部调用 session_start()。
    • 另外,您需要重定向到另一个页面才能读取 cookie 值,因为该值是作为 HTTP 请求的一部分设置的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多