Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2013, 10:25   #1
pray_driver
Форумчанин
 
Аватар для pray_driver
 
Регистрация: 18.08.2010
Сообщений: 140
По умолчанию как быть с куками?

Ребят, такой вопрос. Честно говоря встречаю такое впервые, как бороться - не знаю.

Есть проект на php, очень высоконагруженный с мощной кодовой базой, фундаментально сделанной.

В проекте есть вывод просмотренных пользователем объявлений - список этих объявлений сохраняется в куки. Например, если пользователь просмотрел какое-то объявление, берётся соответстующая объявлениям кука и в конец её дописывается номер этого объявления.

А теперь сама проблема: если пользователь открыл одно или больше объявлений сразу - пока первая страница не догрузилась, кука в ней не изменилась. При этом вторая страница уже открыта и считала ту же куку что и первая. Затем первая страница догрузилась, записала в куку свой ID. Затем догрузилась вторая страница, записала в куку свой ID - В итоге потерялся ID первой страницы (она его просто затёрла)

Как можно эту ситуацию разрешить? Скажем сделать какой-нибудь финт, проверяющий, не блокирована ли кука, если блокирована, то подождать, или что-нибудь такое.
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
pray_driver вне форума Ответить с цитированием
Старый 07.08.2013, 12:09   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Предлагаю так:
ключом будет номер объявления, а значением например adv.
Как это спросите меня вы?
Вот так:
PHP код:
$_COOKIE["1"]='adv';
$_COOKIE["12"]='adv';
$_COOKIE["13"]='adv';
$_COOKIE["14"]='adv';
$array=$_COOKIE;
foreach (
$array as $key => $value)
if(
$value='adv') echo '№: '.$key
Т.е. вы не затрете ничего.
ИМХО.
Кольша вне форума Ответить с цитированием
Старый 07.08.2013, 20:15   #3
pray_driver
Форумчанин
 
Аватар для pray_driver
 
Регистрация: 18.08.2010
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Кольша Посмотреть сообщение
Предлагаю так:
ключом будет номер объявления, а значением например adv.
Как это спросите меня вы?
Вот так:
PHP код:
$_COOKIE["1"]='adv';
$_COOKIE["12"]='adv';
$_COOKIE["13"]='adv';
$_COOKIE["14"]='adv';
$array=$_COOKIE;
foreach (
$array as $key => $value)
if(
$value='adv') echo '№: '.$key
Т.е. вы не затрете ничего.
ИМХО.
Вариант, конечно, хороший. Если бы для каждой страницы можно было бы свою куку создваать - я бы конечно сделал так. Но проблема в другом. По концепции для данного типа страниц выделена одна специальная кука. В неё записывается результат в виде 1234_5678_9101112 - при посещении следующей страницы через знак подчеркивания добавляется следующий номер. Эта конструкция концептуального характера. Отсюда и проблема. Как говорится "Твой БелАЗ - твои правила". Но в этом случае БелАЗ не мой)
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
pray_driver вне форума Ответить с цитированием
Старый 07.08.2013, 20:40   #4
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Ну тогда скорей всего она будет затиратся.
Кольша вне форума Ответить с цитированием
Старый 07.08.2013, 20:45   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

ИМХО - подход неверный, поэтому все будут предлагать альтернативные варианты.
Ваш подход все равно упрется в макс размер куки ... когда пользователь просмотрит довольно большое количество объявлений - произойдет переполнение куки....

как вариант - в куке хранить какой то уникальный идентификатор пользователя. а просмотр объяв записывать с БД для данного идентификатора.....
id id_cooke id_message
1 12345 23
2 12345 45
будет означать что просмотрены объявы 23 и 45

наверняка не очень производительно, но че-то больше не лезет пока в голову

как вариант посмотреть как пашет "из рук в руки", авито и другие "мощные" сайты объяв
ADSoft вне форума Ответить с цитированием
Старый 08.08.2013, 09:36   #6
pray_driver
Форумчанин
 
Аватар для pray_driver
 
Регистрация: 18.08.2010
Сообщений: 140
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
ИМХО - подход неверный, поэтому все будут предлагать альтернативные варианты.
Ваш подход все равно упрется в макс размер куки ... когда пользователь просмотрит довольно большое количество объявлений - произойдет переполнение куки....

как вариант - в куке хранить какой то уникальный идентификатор пользователя. а просмотр объяв записывать с БД для данного идентификатора.....
id id_cooke id_message
1 12345 23
2 12345 45
будет означать что просмотрены объявы 23 и 45

наверняка не очень производительно, но че-то больше не лезет пока в голову

как вариант посмотреть как пашет "из рук в руки", авито и другие "мощные" сайты объяв
Да, мне тоже этот подход показался странным. Кука выдержит, там нужно максимум последние 10 просмотренных, не больше. Но вот этот подход, когда данные записываются в одну и ту же куку меня смутил тоже. Но, что есть то есть. БД использовать нельзя. Другой вариант крутить куки - не одобряют) Нужно как-то в этом варианте выкрутиться)
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
pray_driver вне форума Ответить с цитированием
Старый 08.08.2013, 11:19   #7
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

ну, выкручивание в жестко замкнутых условиях - это уже во фриланс
ADSoft вне форума Ответить с цитированием
Старый 08.08.2013, 19:48   #8
pray_driver
Форумчанин
 
Аватар для pray_driver
 
Регистрация: 18.08.2010
Сообщений: 140
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
ну, выкручивание в жестко замкнутых условиях - это уже во фриланс
Вы смеётесь чтоли))) Думаете, мне зарплату платят, чтобы я фрилансеров на неё нанимал. Я там для того и есть, чтобы такие проблемы решать.
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
pray_driver вне форума Ответить с цитированием
Старый 08.08.2013, 21:31   #9
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

Ну тогда решайте....
Как вариант . написать свой класс для работы куки
ADSoft вне форума Ответить с цитированием
Старый 09.08.2013, 08:54   #10
pray_driver
Форумчанин
 
Аватар для pray_driver
 
Регистрация: 18.08.2010
Сообщений: 140
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
Ну тогда решайте....
Как вариант . написать свой класс для работы куки
Да, видимо этим и займусь)
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
pray_driver вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регистрация на сайте журнала: быть или не быть Levsha100 Свободное общение 12 12.06.2010 00:39
Быть или не быть? Вот в чем вопрос! VadEr Свободное общение 8 23.09.2009 16:16
Упал телефон в сельский туалет. Как быть, как мыть? Лукманов Александр Свободное общение 28 30.04.2009 10:42
Как быть? Mitron Свободное общение 8 11.03.2008 20:01