Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с куки в разных операх

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
allasan
Отправлено: 21 Декабря, 2013 - 17:33:10
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Здравствуйте. У меня возникла проблема с удалением куки.
задача:
создаем куки:
PHP:
скопировать код в буфер обмена
  1. SetCookie("oresult", "Спасибо! Отзыв отправлен на модерацию.",time()+3600);


Если куки существует и не пустое, то выводим ее содержимое, после чего удаляем (все для того, чтобы сообщение вывелось только один раз):
PHP:
скопировать код в буфер обмена
  1. if(isset($_COOKIE['oresult']) && $_COOKIE['oresult'] !== '') {
  2. echo '
  3. <script>
  4. alert ("'.$_COOKIE['oresult'].'");
  5. $("#blok_otz").slideToggle("normal");
  6. </script>
  7. ';
  8. SetCookie("oresult", "",time()-3600);
  9. }


Это работает в опере 12.16, но в хромированной опере таким путем куки не удаляется, и при следующих загрузках страницы опять выводится alert сообщение.

Если создаю куки так:
PHP:
скопировать код в буфер обмена
  1. SetCookie("oresult", "Спасибо! Отзыв отправлен на модерацию.",time()+1);


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

Подскажите, пожалуйста, как сделать ПРАВИЛЬНО, чтобы работало везде?
Заранее благодарен!
 
 Top
Мелкий Супермодератор
Отправлено: 21 Декабря, 2013 - 17:51:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Это неправильно делать кукой вовсе.
Записываете при действии в сессию, при выводе - если в сессии значение есть, то выводите и удаляете его из сессии.


-----
PostgreSQL DBA
 
 Top
allasan
Отправлено: 21 Декабря, 2013 - 18:12:19
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Пробовал. делаю так
создаю:
PHP:
скопировать код в буфер обмена
  1. $_SESSION['oresult'] = "Ошибка проверочного кода!";


Проверяю/очищаю:
PHP:
скопировать код в буфер обмена
  1. if(isset($_SESSION['oresult']) && $_SESSION['oresult'] !== '') {
  2. echo '
  3. <script>
  4. alert ("'.$_SESSION['oresult'].'");
  5. $("#blok_otz").slideToggle("normal");
  6. </script>
  7. ';
  8. $_SESSION['oresult'] = "";
  9. }


Не работает. Не выводится alert сообщение.
p.s. session_start() прописан
 
 Top
Мелкий Супермодератор
Отправлено: 21 Декабря, 2013 - 18:27:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Собственно, включите вывод ошибок (да и в целом статью почитайте, полезно): http://phpfaq[dot]ru/debug
В первый раз не стал читать ваш код, а сейчас обратил внимание. Если только у вас не буферизуется вывод, то после любого echo и любого другого вывода в браузер, невозможно модифицировать заголовки. Вполне возможно, что у вас и сессия потому же не стартует вовсе.


-----
PostgreSQL DBA
 
 Top
allasan
Отправлено: 21 Декабря, 2013 - 18:31:14
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Мелкий пишет:

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


И как это исправить? Как заставить сессию стартовать?
(Добавление)
Кстати забыл сказать, создание сессии идет в одном файле, после чего при помощи header("Location: перемещаемся в другой. Может ли быть в этом причина, и как с такими условиями заставить правильно работать сессию или куки?
(Добавление)
Да, заметил что сессия создается только один раз. И после того, как она очищается, она больше не заполняется. Как это исправить?
(Добавление)
Пожалуйста, любые предложения могут помочь!
 
 Top
kotyara1979
Отправлено: 22 Декабря, 2013 - 06:00:45
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


Помог: 7 раз(а)




header("Location:") собственно и является вашей проблемой. Это же переадресация, как если бы вы на странице кликнули по ссылке.
session_start() должен вызываться при каждом обращении к серверу.

"session_start() создаёт сессию (или продолжает текущую на основе session id, переданного через GET-переменную или куку)" http://www.php.su/session_start


-----
Сделать можно все. Главное одеть каску.
 
 Top
allasan
Отправлено: 22 Декабря, 2013 - 08:08:15
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




kotyara1979 пишет:
header("Location:") собственно и является вашей проблемой. Это же переадресация, как если бы вы на странице кликнули по ссылке.
session_start() должен вызываться при каждом обращении к серверу.

"session_start() создаёт сессию (или продолжает текущую на основе session id, переданного через GET-переменную или куку)" http://www.php.su/session_start


Это я все читал. Но не понимаю, как быть то?
Get использовать не получается из-за ЧПУ, и в исключения добавить тоже не выходит.
Остаются только сессии или куки, как сделать чтобы они работали в моем примере?
(Добавление)
Может быть зря все таки переходить на сессии, может с куками разобраться? почему они так по разному себя ведут в разных операх, и как правильно работать с куками? может я не правильно создаю, или не правильно стираю?
 
 Top
kotyara1979
Отправлено: 22 Декабря, 2013 - 09:39:19
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


Помог: 7 раз(а)




Если вы используете сессии, то не нужно делать перенаправление на другую страницу. Используйте include для скрипта с идентификацией пользователя.

Если куки, то не понимаю зачем вам нужно указывать время жизни для стираемой переменной. Это имеет значение для задаваемого значения, а для стирания? По крайней мере мне хватало всегда просто указания пустого значения.


-----
Сделать можно все. Главное одеть каску.
 
 Top
allasan
Отправлено: 22 Декабря, 2013 - 09:47:08
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




kotyara1979 пишет:
Если вы используете сессии, то не нужно делать перенаправление на другую страницу. Используйте include для скрипта с идентификацией пользователя.

Все необходимо оставить так как есть, перенаправление должно остаться.

kotyara1979 пишет:
Если куки, то не понимаю зачем вам нужно указывать время жизни для стираемой переменной. Это имеет значение для задаваемого значения, а для стирания? По крайней мере мне хватало всегда просто указания пустого значения.
в любом случае и если указывать время в прошлом, и если просто стирать, то в каком то браузере работает, в каком то не работает
 
 Top
kotyara1979
Отправлено: 22 Декабря, 2013 - 09:55:41
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


Помог: 7 раз(а)




allasan пишет:
в любом случае и если указывать время в прошлом, и если просто стирать, то в каком то браузере работает, в каком то не работает


а нельзя использовать оба метода за один раз?

CODE (htmlphp):
скопировать код в буфер обмена
  1. SetCookie("oresult", "Спасибо! Отзыв отправлен на модерацию.",time()+3600);
  2. SetCookie("oresult", "Спасибо! Отзыв отправлен на модерацию.",time()+1);


Интересно что получится?
(Добавление)
allasan пишет:
kotyara1979 пишет:
Если вы используете сессии, то не нужно делать перенаправление на другую страницу. Используйте include для скрипта с идентификацией пользователя.

Все необходимо оставить так как есть, перенаправление должно остаться.


Смысл? Убить $_POST?


-----
Сделать можно все. Главное одеть каску.
 
 Top
allasan
Отправлено: 22 Декабря, 2013 - 10:01:07
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




kotyara1979 пишет:
allasan пишет:
в любом случае и если указывать время в прошлом, и если просто стирать, то в каком то браузере работает, в каком то не работает


а нельзя использовать оба метода за один раз?

CODE (htmlphp):
скопировать код в буфер обмена
  1. SetCookie("oresult", "Спасибо! Отзыв отправлен на модерацию.",time()+3600);
  2. SetCookie("oresult", "Спасибо! Отзыв отправлен на модерацию.",time()+1);


Интересно что получится?


Да ничего, в хроме вот это
PHP:
скопировать код в буфер обмена
  1. SetCookie("oresult", "Спасибо! Отзыв отправлен на модерацию.",time()+3600);

вот этим

или вот этим

не удаляется. А в обычной нормальной опере все работает.

А вот это
PHP:
скопировать код в буфер обмена
  1. SetCookie("oresult", "Спасибо! Отзыв отправлен на модерацию.",time()+3);

в хроме работает, куки удаляется сама, а в опере вообще не создается
 
 Top
kotyara1979
Отправлено: 22 Декабря, 2013 - 10:09:38
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


Помог: 7 раз(а)




Еще вопрос.

А зачем добавляешь время жизни для куки? Тебе же просто передать со страницы на страницу сообщение о выполненном действии. По умолчанию "до закрытия окна" тебе за глаза должно хватать.

Мне по крайней мере хватает. Сам использую подобный механизм для неавторизованных пользователей. Время жизни специально нигде на назначаю, стирается простым назначением пустого значения. Накладок в браузерах пока не заметил.


-----
Сделать можно все. Главное одеть каску.
 
 Top
allasan
Отправлено: 22 Декабря, 2013 - 10:17:56
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




kotyara1979 пишет:
Еще вопрос.

А зачем добавляешь время жизни для куки? Тебе же просто передать со страницы на страницу сообщение о выполненном действии. По умолчанию "до закрытия окна" тебе за глаза должно хватать.

Мне по крайней мере хватает. Сам использую подобный механизм для неавторизованных пользователей. Время жизни специально нигде на назначаю, стирается простым назначением пустого значения. Накладок в браузерах пока не заметил.


Ну время жизни мне как раз нужно чтобы было маленькое, короче нужно чтобы сообщение показалось только один раз, и если страницу обновляешь чтобы больше не показываллось.

А вот у меня что-то не стирается без времени в хроме. А в опере не создается
 
 Top
kotyara1979
Отправлено: 22 Декабря, 2013 - 10:30:58
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


Помог: 7 раз(а)




Сделал такой вот тест. файл cccc.php:

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. header("Content-Type: text/html; charset=utf-8");
  4.  
  5. if(isset($_COOKIE['oresult']) and $_COOKIE['oresult']<>'')
  6. {$m1 = $_COOKIE['oresult'];SetCookie('oresult','');}
  7. else {$m1 = 'oresult нет.';SetCookie('oresult','Привет');}
  8.  
  9. if(isset($_COOKIE['log']) and $_COOKIE['log']<>'')
  10. {$m2 = $_COOKIE['log'];SetCookie('log','');}
  11. else {$m2 = 'log нет.';SetCookie('log','Здрасте');}
  12.  
  13. print $m1;
  14. print $m2;
  15.  
  16.  
  17.  
  18. ?>
  19.  
  20.  
  21. <a href="cccc.php">ссылка</a>
  22.  


сообщение передаются и стираются нормально.
Проверил на опере, хроме, лисе.

а у тебя работает?


-----
Сделать можно все. Главное одеть каску.
 
 Top
allasan
Отправлено: 22 Декабря, 2013 - 10:52:47
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




kotyara1979 пишет:
Сделал такой вот тест.

сообщение передаются и стираются нормально.
Проверил на опере, хроме, лисе.

а у тебя работает?


Этот то пример работает, вот только он не такой какой нужен. делаю так:

В файле 1.php
PHP:
скопировать код в буфер обмена
  1. SetCookie('oresult','Привет');
  2. $kuda = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; header('Location: '.$kuda.'');

В файле 2.php (сюда направлен header("Location)
PHP:
скопировать код в буфер обмена
  1. if(isset($_COOKIE['oresult']) and $_COOKIE['oresult']<>'') {
  2. $m1 = $_COOKIE['oresult'];SetCookie('oresult','');
  3. }
  4. echo '
  5. <script>
  6. alert("'.$m1.'");
  7. </script>
  8. ';


куки создается, но не очищается. проверял в опере 15
(Добавление)
В опере 12 тоже не очищается
(Добавление)
при перезагрузке страницы 2.php все равно остается кука

(Отредактировано автором: 22 Декабря, 2013 - 10:54:05)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB