Работа с cookie в php

Discussion in 'PHP' started by Zed0x, 10 Nov 2012.

  1. Zed0x

    Zed0x Member

    Joined:
    4 Jun 2012
    Messages:
    114
    Likes Received:
    29
    Reputations:
    23
    Имеется ссылка вида:
    PHP:
    <a href='?cookie=".$com['id']."'>Favorit</a>
    Стоит на цикле, и каждый раз значение id меняется, соответственно и параметр в $_GET['cookie'] варьируется.

    При нажатии на ссылку, срабатывает:
    PHP:
    if(isSet($_GET['cookie'])) {
        
    $fav $_GET['cookie'];
        
    setcookie("favorite""$fav"time()+9999999);
        
    $_COOKIE['favorite'] = "$fav";
        if(isSet(
    $_COOKIE['favorite'])) {
            
    $id_vul =  $_COOKIE['favorite'];
        
    $fav_query mysql_query("SELECT * FROM joomla WHERE id=$id_vul");
        
    $div_fav mysql_fetch_array($fav_query);
        echo 
    $div_fav['title'];
        }
    }
    Сам скрипт по задумке, должен накапливать значения в cookie, потом выводить их если они есть, сейчас же скрипт работает только с одним значением.
    Пожалуйста, подскажите реализацию данного скрипта заточенного под несколько значений и их вывод.
     
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    foreach
     
  3. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    куки это ключ-значение. Соответственно твой код постоянно перезаписывает значение для ключа fav.
    2 выходна (если рассматривать только куки).

    выход 1.
    писать для каждого фейворита отдельную куку, типа:
    PHP:
    setcookie("favorite:$fav""1"time()+9999999); 
        
    $_COOKIE['favorite:'.$fav] = 1;
    И читать их форычем, как предложили выше:
    PHP:
    foreach($_COOKIE AS $k=>$v)
    {
      if (
    substr($k04)=='fav:')
      {
        
    $favorite=substr($k4);
      }
    выход 2.
    писать в куку favorite серилизованный массив, либо (предпочтительно) json массив кук. Код писать лень ) но смысл —*получаем массив из куки favorite, дописываем его новым элементом, и пишем json в куку обратно.

    Оба способа имеют одно и то же «НО», спецификация куков не позволяет хранить более 20 кук для домена. И каждая не может быть больше 4 килобайт. Т.е. в первом случае мы быстро упрёмся в количество кук, во втором в размер. По факту современные браузеры дают возможность писать сколько угодно кук любой длинны. Но я бы не рисковал и писал бы подобную инфу в базу. Если там прям нагрузка, то в мемкеш или подобное. Но не в куки
     
    _________________________
  4. Zed0x

    Zed0x Member

    Joined:
    4 Jun 2012
    Messages:
    114
    Likes Received:
    29
    Reputations:
    23
    Спасибо за отклики, не могу понять вот, что: почему происходит substr($k, 0, 4)=='fav:', ведь по моему префикс "favorite:"?
    Второе, почему мой, да и выше приведенные примеры работают, только тогда, когда существует $_GET['cookie'], ведь по идеи эта GET должна существовать только один раз, и присваивать свое значение кукам? А сейчас же, работает так: если site.com/?cookie=ляля, есть то выполняет echo $_COOKIE, если нет get переменной cookie, то соответственно не выполняет вывод кук
     
  5. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Да, my bad, substr($k, 0, 9)=='favorite:'
    echo не выполняется, потому, что у тебя сначала проверка isset($_GET['cookie']), а уже внутри на наличие куки. Т.е. if(isset($_COOKIE)) вынеси за блок if(isset($_GET))
     
    _________________________