0

我正在尝试将用户搜索存储在 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);

} 
4

1 回答 1

0

要将更多搜索存储到一个 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 中

希望能帮助到你 ;)

于 2017-09-24T11:57:56.937 回答