【问题标题】:PHP Cookie store user form searches - multiple searches storedPHP Cookie 存储用户表单搜索 - 存储多个搜索
【发布时间】:2017-09-24 20:29:44
【问题描述】:

我正在尝试将用户搜索存储在 cookie 中,以向用户显示“最近搜索”。表单包含 2 个参数:

  1. 关键字
  2. 位置

我可以创建 cookie 没问题,但我无法更新它并存储超过 1 个搜索。 Indeed.co.uk 他们将搜索存储在 Cookie 中,格式如下:

"q=carpenter&l=london&ts=1506177856392:q=bricklayer&l=Southwark&ts=1506008036065:q=labourer&l=Southwark&ts=1506007988029"

如您所见,Indeed 存储多个 UNIQUE 搜索。

我正在使用 PHP,有人知道如何复制 Indeed 存储用户表单搜索的方式吗?我需要将查询作为一个数组。

谢谢

约翰

更新 - 代码尝试:

if (isset($_COOKIE["RS"])) {

    // Get cookie value
    $new = "key=$keyword&loc=$locationKey:";
    //"q=carpenter&l=london&ts=1506177856392:q=bricklayer&l=Southwark&ts=1506008036065:q=labourer&l=Southwark&ts=1506007988029"
    $prev_value = $_COOKIE["RS"];

    $prev_value = stripslashes($prev_value);
    $prev_value = json_decode($prev_value, true);
    // Add current value to array and set cookie again

    $prev_value = $prev_value."".$new;

    $new_value = json_encode($prev_value, true);

    setcookie('RS', $new_value, time()+3600);

}else {

    // Set cookie to current value
    $init_value = "key=$keyword&loc=$locationKey:";
    $init_value = json_encode($init_value, true);
    setcookie('RS', $init_value, time()+3600);

} 

【问题讨论】:

  • 你试过什么?
  • Mr Pro Pop - 已尝试代码更新问题
  • 那么,您要做的是保存多个值吗?
  • 是的,我想保存工作网站的所有独特表单搜索,以便显示“我最近的搜索”
  • Zaaayymn 兄弟!我正在编写代码,但首先是另一个答案。无论如何,确实用冒号分隔它们。加上吉米所说的。

标签: php cookies cookiestore


【解决方案1】:

要将更多搜索存储到一个 cookie 中,首先您必须从 cookie 中读取实际值,然后添加新搜索。

类似这样的:

<?php
$cookie_name = "searches";
$stored_searches = isset($_COOKIE[$cookie_name]) ? $_COOKIE[$cookie_name] : null;

$new_search_value = "keyword:asdf&location=http://example.com";

if($stored_searches){

    $searches = explode('|',$stored_searches);

    $searches[] = $new_search_value;

    $searches_to_store = implode('|', $searches);

} else {
    $searches_to_store = $new_search_value;
}


setcookie($cookie_name, $searches_to_store, time() + (86400 * 30), "/");

此代码检查您的 cookie 是否存在,如果存在,则将所有搜索解析为数组。然后添加新的搜索并内爆到 cookie 字符串中。 搜索由 | 分隔(管道)字符 然后保存..

不过,我建议将有关搜索的这些数据保存到会话值中,这些数据存储在服务器上,用户无法操作

$_SESSION['searches'] = $searches_to_store;

编辑: 要仅存储唯一搜索,可以通过某个键将存储的搜索分配到数组中。

例如这样:

//after explode
$searches_by_key = array();
foreach($searches as $search){
     list($keyword, $location) = explode('&', $search);
     $searches_by_key[$keyword] = $search;
}

这样您将在 $searches_by_key 中拥有唯一键,您可以将其存储到 cookie 中

希望对你有帮助;)

【讨论】:

  • 吉米,谢谢你,它确实有效!我现在唯一的问题是停止将复制的表单搜索添加到 cookie 中,并且只存储唯一的关键字+位置组合
  • 我编辑了答案以包含有关唯一搜索的提示
猜你喜欢
  • 2010-10-29
  • 2014-09-09
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 2019-11-03
相关资源
最近更新 更多