|
|
|
| во время просмотра юзером товаров в магазине надо запоминать, какие товары он посмотрел, т.е. сходил на страницу конкретного товара.
подозреваю, что это лучше делать куками, которые хранить сутки, чтоб в следующий заход юзера в магазин, если сутки не прошли, ему были бы показаны те товары, которые он уже видел.
делаю так: на странице товара (view_prod.php) устанавиваю куки:
$var = compact(intval($_GET["prod_id"]), $_SESSION["userid"], $_SESSION["interface_lang"], mktime());
$arr = implode("&", $var);
setcookie('views', $arr, time()+86400); ///sytki
|
на других страницах, где мне надо, вытаскиваю куки, разбираю их и вывожу данные соответствующих товаров.
if ($_COOKIE["views"]){
$arr =explode("&", $_COOKIE["views"]);
if (is_array($arr)) {
for ($i=0; $i<sizeof($arr);$i++) {
$prodid_v[$i]= $arr[0];
$userid_v[$i] = $arr[1];
$lang_v[$i] = $arr[2];
$date_v[$i] = $arr[3];
if ($userid_v[$i] == $_SESSION["userid"] && ((mktime() - $date_v[$i]) <= 86400)) { /// esli sovpadaet user i ne proshel den'
.....
|
только куки почему-то не устанавливаются ... соответственно и товар не вытаскивается... | |
|
|
|
|
|
|
|
для: elenaki
(16.12.2010 в 10:02)
| | compact() ,если это стандартная функция, как я понимаю, вернет пустой массив.
Она ведь значения переменных по их именам вытаскивает...
$arr в результате окажется пустой строкой,
setcookie будет вызвана с пустым значением.
для каждого пользователя предполагается хранить независимый набор ключей товаров.
А при чем тут язык?
Если пользователь поменяет язык, набор товаров должен исчезнуть? | |
|
|
|
|
|
|
|
для: Trianon
(16.12.2010 в 12:24)
| | Очень упрощенно, я бы сделал как-то так:
<?
$user = $_SESSION['userid']; // ключ клиента
$old_goods = @$_COOKIE['goods'][$user]; // товары, ранее просматривавшиеся
if(!empty($old_goods))$old_goods = explode(',', $old_goods); // этим клиентом (если есть)
$new_goods = array(......); // товары, просмотренные в данном сеансе (из прайса)
if(empty($old_goods)) $old_goods = array(); // сливаем массивы, убирая дубли
$o_goods = implode(',', array_unique(array_merge($old_goods, $new_goods)));
setcookie("goods[$user]",$o_goods, time()+24*60*60); // запоминаем под этим клиентом
|
| |
|
|
|
|
|
|
|
для: Trianon
(16.12.2010 в 13:36)
| | спасибо. куки записались. Ho при попытке вывести из них данные намертво завис браузер. где-то с циклами напортачила.. | |
|
|
|
|
|
|
|
для: elenaki
(16.12.2010 в 14:05)
| | тут, правда, такой аспект еще есть...
Если клиент заходит чаще раза в сутки, эти товары будут копиться не устаревая.
Если нужно , чтобы товары устаревали, придется делать не двумерный (пользователь, набор_товаров), а трехмерный (пользователь, время, набор_товаров) | |
|
|
|
|
|
|
|
для: Trianon
(16.12.2010 в 14:38)
| | я же саму куку храню сутки. вот за сутки и пусть накапливаются. | |
|
|
|
|
|
|
|
для: elenaki
(16.12.2010 в 14:55)
| | В куках не может храниться большое количество информации. Говорят не более 64 КБ. А если пользователь настолько активен, что за сутки превысит этот предел? | |
|
|
|
|
|
|
|
для: elenaki
(16.12.2010 в 14:55)
| | >я же саму куку храню сутки. вот за сутки и пусть накапливаются.
да. Но из вчера установленной куки (которая сегодня еще читается, а завтра уже не должна) попадут товары в куку сегодня установленную (которая еще будет читаться завтра)
Так что метки придется все же держать.
И здесь проблема в том, что метки времени более громоздкие, чем сами ключи.
Если бы можно было ослабить ограничение суточного хранения, например, так:
пользователю видны товары, которые он смотрел в пределах 1-2 суток,
тогда набор данных кукис, пригодный для устаревания, так сказать, можно было бы сформировать достаточно компактно даже для весьма активного пользователя. | |
|
|
|
|
|
|
|
для: elenaki
(16.12.2010 в 14:05)
| | И до какого максимума будут накапливаться товары? | |
|
|
|
|
|
|
|
для: elenaki
(16.12.2010 в 10:02)
| | Я бы порекомендовал хранить это не "снаружи", а "внутри" (в базе данных на сервере, например). Это более контролируемое решение и может быть полезно в будущем при анализе пользовательских предпочтений или чего-то ещё. | |
|
|
|
|
|
|
|
для: Саня
(16.12.2010 в 14:59)
| | нет. базу я сразу отмела. зачем мне этот мусор? | |
|
|
|
|
|
|
|
для: elenaki
(16.12.2010 в 15:20)
| | Сейчас это мусор, а завтра нет. | |
|
|
|
|
|
|
|
для: Саня
(16.12.2010 в 15:24)
| | завтра я про этого клиента и думать забуду. | |
|
|
|
|
|
|
|
для: elenaki
(16.12.2010 в 15:25)
| | Вы забудете, а маркетологи нет. Тем более про базу данных я сказал "например". | |
|
|
|
|
|
|
|
для: Саня
(16.12.2010 в 15:24)
| | пока оно в кукисах - это мусор.
А на сервере оно - повод накатить иск о неправомерной обработке персональных данных :)
Не то что бы это вообще нельзя делать.
Но подобного рода рояли в кустах как минимум должны быть описаны в соглашении о конфиденциальности. | |
|
|
|
|
|
|
|
для: Trianon
(16.12.2010 в 17:44)
| | > Но подобного рода рояли в кустах как минимум должны быть описаны в
> соглашении о конфиденциальности.
Это уже другой вопрос :) | |
|
|
|
|
|
|
|
для: elenaki
(16.12.2010 в 10:02)
| | Как вариант можете использовать для этих целей локальное хранилищие.
Алгоритм может быть следующий: после получения браузером страницы с товаром, удаляете из хранилища все товары, которые находятся в хранилище более суток, далее, с помощью AJAX получаете от сервера данные всех товаров, которые находятся в хранилище и добавляете их на страницу (можно, конечно, вообще всё хранить в хранилище и AJAX-запросы не отправлять, но тогда есть риск рассинхронизации с сервером - допустим товар вы из базы удалили, а в хранилище он осталься и пользователь его увидит ).
Ну и после этого проверьте сохранён ли текущий товар в хранилищи или нет. Если сохранён, то ничего делать не нужно, если нет - добавляете его туда.
Минус этого подхода заключается в том, что он, в чистом виде, работать с IE7 и IE6 не будет (т.к. эти браузеры не поддреживают работу с локальным хранилищем). Но, в принципе, это ограничение легко обойти: вначале проверить доступно ли хранилище, если да - используем его, если нет - используем куки. Или же можно вообще эту рутину переложить на плечи плагина jStorage. | |
|
|
|
|
|
|
|
для: Ирбис
(16.12.2010 в 16:00)
| | заноза в пальце.
Если есть микроскоп, лучше электронный - используем его.
Если нет - обходимся увеличительным стеклом.
:)) | |
|
|
|
|
|
|
|
для: Trianon
(16.12.2010 в 17:16)
| | ну, типа того ))
но наш микроскоп весьма удобен, прост в использовании и потребляет всего несколько ватт электроэнергии. С лупой примерно тоже самое, только возможностей у неё меньше, но в принципе, и этих возможностей здесь достаточно.
А на деле решение может оказаться весьма удобным.
Псюс ко всему - это возможность пощупать на практике возможности HTML5. | |
|
|
|