PHP получает cookie по значению - PullRequest
1 голос
/ 01 февраля 2011

Я недавно пытался сделать эту маленькую модификацию на моем сайте. В основном авторизованные пользователи могут добавлять игры в избранное, а не авторизованные посетители будут перенаправлены на страницу регистрации.

Хотя я думал, что смогу немного поработать над своим PHP и дать посетителям возможность добавлять игры в свои любимые. (Флеш игры)

Итак, я сделал этот JS-скрипт, который позволит пользователю щелкнуть изображение, этот проверяет, существует ли cookie, если нет, он добавит его, и если он существует, он удалит cookie (изображение изменяется с «Добавить в избранное» на «Удалить из избранного» * ​​1005 *

Поскольку может быть много разных любимых игр, я не могу использовать простое имя файла cookie, поэтому я настроил его следующим образом: xx1200 = set (то есть 2 x, затем идентификатор игры, который создает заголовок файла cookie, а затем "set" - это значение cookie. Все избранные игры будут иметь одинаковое значение, но разные имена, являясь их идентификатором с xx впереди.

Теперь, чтобы распечатать файлы cookie на другой странице с отображением их любимых игр, я добавил PHP на страницу, чтобы в основном получить файл cookie, но в этом заключается моя проблема: как получить имя файла cookie по его значению (обычно вы будете печатать $_COOKIE["set"]; но теперь имя моего печенья меняется.

Я использую print_r($_COOKIE);, чтобы напечатать весь файл cookie, и я вижу свой [zz800] => set в массиве, но я не могу понять, как получить идентификатор (в приведенном выше примере 800), чтобы затем получить игру (ы). ) соответствует данному ID.

Любая помощь будет принята с благодарностью! Спасибо тебе:)

Обновление:

Это код, который у меня есть сейчас, я работал над ним и выключал последние пару часов, сейчас он работает нормально, я не добавил PHP, но только javascript.

Моя единственная проблема - когда я пытаюсь удалить 1 запись, она удаляет весь файл cookie, поэтому я не могу найти, где это исправить. Другая проблема заключается в том, чтобы вытащить идентификаторы из массива, и если бы кто-нибудь мог мне там помочь, это было бы оценено.

Вот мой код:

<?php
$globalCookie = '629';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Document sans titre</title>
<script>
function createCookie(value)
{
 if(document.cookie.search(value)==-1){
  if(document.cookie.indexOf('games') == -1) {
  document.cookie = 'games' + '=' + ',' + value + '; expires=Fri, 27 Jul 2011 02:47:11 UTC; path=/';
  } else {
  var deagle = document.cookie;
  document.cookie = deagle + ',' + value + '; expires=Fri, 27 Jul 2011 02:47:11 UTC; path=/';
  } 
 } else {
  // Removes the cookie (making the clear cookie problem most probably
  document.cookie = 'games' + '=' +escape( value ) + '; expires=Fri, 27 Jul 2001 02:47:11 UTC; path=/';
 }
}
</script>
</head>

<body>
<script>
var globalCookie = <?=$globalCookie?>;
</script>
<?php
$stuff = $_COOKIE["games"];
$game = $globalCookie;
$pos = strpos($stuff, $game);

if ($pos === false) { ?>
   <a href='javascript:;'><img id="mygame1" src='images/add_mygames.gif' border="0" onClick="createCookie(globalCookie); (this.src=='images/add_mygames.gif')?(this.src='images/remove_mygames.gif'):(this.src='images/add_mygames.gif');"></a>
<? 
} else { ?>
   <a href='javascript:;'><img id="mygame1" src='images/remove_mygames.gif' border="0" onClick="createCookie(globalCookie); (this.src=='images/remove_mygames.gif')?(this.src='images/add_mygames.gif'):(this.src='images/remove_mygames.gif');"></a>

<?
}
?>
</body>
</html>

Пока что я использую $ globalCookie вместо своих идентификаторов игр.

Еще раз спасибо за любую помощь!

Также файл cookie, который создается выше, выглядит так:

games=,621,256,637,57354

Единственный способ, которым я нахожу работу с explode (), так как, если запятая идет после числа, она не будет считаться первой

Ответы [ 4 ]

3 голосов
/ 01 февраля 2011

Изменить тактику

Вы должны хранить информацию о cookie-файлах по-разному, в виде списка идентификаторов игр через запятую, например:

games=123,345,641

Вы можете использовать что-то подобное для анализа и доступаданные:

$games = explode(',', $_COOKIE['games'];

foreach( $games as $game_id ){
    echo $game_id;
}

, который дает вам массив идентификаторов игр, которые понравились пользователю.

Добавление / удаление

Поскольку вы будете использовать только один файл cookieчтобы хранить избранные игры, в качестве пользователя избранных / нежелательных игр, вам нужно написать код для реализации следующего (в Javascript):

Когда пользователь добавляет в избранное / отменяет любимую игру

  • открыть текущий файл cookie любимых игр
  • добавить / удалить соответствующий идентификатор (подсказка: используйте split () , чтобы разбить cookie на массив Javascript для последнего действия)
  • переустанавливает cookie с новой строкой идентификатора игры

Почему?

Для значений с ключами действительно нужен ключ, который известен.Все остальное довольно бессмысленно.В вашей проблеме у вас есть информация, которую вы хотите сохранить в файле cookie, который может состоять из любого количества значений.Намного лучше хранить / отправлять эти значения в виде списка с разделителями, чем при попытке вставить каждое значение в файл cookie в качестве ключа.К счастью, ваши данные (числовые идентификаторы) хорошо подходят для этого метода.

0 голосов
/ 01 февраля 2011

Использовать array_keys для второго аргумента.Он похож на array_search, за исключением того, что он возвращает массив, совпадающий со значением, указанным во втором аргументе, в то время как array_search всегда возвращает только первое совпадение.

<?
//example data
$_COOKIE = array(
    'zz800' => 'set',
    'zz801' => 'set',
    'zz802' => 'set',
    'yz800' => 'test'
);

print_r(array_keys($_COOKIE, 'set'));
//result
array('zz800', 'zz801', 'zz802');
?>
0 голосов
/ 01 февраля 2011

Если вы хотите отсканировать файлы cookie и получить идентификатор игры, попробуйте:

foreach ($_COOKIE as $key => $value){
echo("Game ID: ".substr($key,3)." - Status: ".$value);
}

, что в приведенном выше примере должно вывести «Идентификатор игры: 800 - Состояние: установлено»

0 голосов
/ 01 февраля 2011

Вам нужен поиск по массиву, если вы хотите, чтобы он работал так, как вы его написали.

var_dump( array_search('set', $_COOKIE) );

Я думаю, что это довольно плохая идея, если честно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...