За последние 24 часа нас посетили 15587 программистов и 1638 роботов. Сейчас ищут 790 программистов ...

Пробелмы с session и cookies в браузере Opera

Тема в разделе "Прочие вопросы по PHP", создана пользователем Krnkazaryan, 6 июн 2014.

  1. Krnkazaryan

    Krnkazaryan Новичок

    С нами с:
    6 июн 2014
    Сообщения:
    12
    Симпатии:
    0
    Доброго всем времени суток
    Вопрос возник такой
    Код (Text):
    1.  
    2. session_set_cookie_params(360000, '/','.moidoman.ru',false,false);
    3.         session_name($session_name);
    4.         session_id($session_id);
    5.         session_start();
    Никак не могу в Опере поставить куки. В мозиле и хроме все работает отлично.
    Поначалу скрипт проверяет если ли запущенная сессия с таким названием, потом если нет разрушается сессия (session_destroy) и устанавливается новая, так как я показал. Но в Опере этого не происходит, либо происходит но с так что потом программно не избавиться от этой куки и приходится в ручную удалять его из папки.
    Посоветуйте пожалуйста правильный способ решения этой проблемы. Уже писал на некоторых форумах, но безрезультатно
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    давай сразу уточним: разные браузеры на одном и том же рабочем месте? ты про это не сказал ничего. а это может иметь значение — из-за локальных косяков со временем.

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

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

    если рассуждать логически, разное поведение браузеров может быть следствием ошибок в заголовках (куках). чтобы поймать ошибку, сделай минималистический пример и постепенно добавляй в него плюшки из настоящего проекта. не забывая чистить куки. смотришь посл какого шага проявится косяк.
     
  3. Krnkazaryan

    Krnkazaryan Новичок

    С нами с:
    6 июн 2014
    Сообщения:
    12
    Симпатии:
    0
    На моем компе так. А сказал мне про этот косяк мой знакомый. У него тоже так было. То есть получается на двух разных компьютерах наблюдается одно и тоже (не зависит от компьютера и системы, как бы).

    Добавлено спустя 9 минут 25 секунд:
    До этого отрезка код такой
    Код (Text):
    1.  
    2. session_set_cookie_params(360000, '/','.moidoman.ru',false,false);
    3. session_name($session_name);
    4. session_start();
    5. if (session_id()==$session_id) {
    6.    Наш человек
    7. }
    8. else {
    9.       session_destroy();
    10.       session_set_cookie_params(360000, '/','.moidoman.ru',false,false);
    11.       session_name($session_name);
    12.       session_id($session_id);
    13.       session_start();
    14. }
    В хедере при ответ сервера идеальный, остальные браузеры цепляют куку, а вот опера после перехода на другую страницу сразу показывает кустыми куки. Да и еще одна особенность, каким-то магическим образом она подцепила что-то и потом уже да удалипь.
    Сразу скажу в настройках оперы все стоит правильно "принимать куки".
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    может имя сессионной переменной какое-то слишком крутое для Opera? )))
     
  5. Krnkazaryan

    Krnkazaryan Новичок

    С нами с:
    6 июн 2014
    Сообщения:
    12
    Симпатии:
    0
    32-значное шестнадцатеричное число
     
  6. Krnkazaryan

    Krnkazaryan Новичок

    С нами с:
    6 июн 2014
    Сообщения:
    12
    Симпатии:
    0
    Никто не сталкивался с подобным?
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    нет.

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

    собственно Opera, возможно, не при чем, просто совпало что в ней сохранилась живучая говнокука.
     
  8. Krnkazaryan

    Krnkazaryan Новичок

    С нами с:
    6 июн 2014
    Сообщения:
    12
    Симпатии:
    0
    Спасибо что помогли советом
    Последовал вашему совету, хотя и не в нем было дело.
    Оказывается Опера на цеплает куки с поддоменов. Если сразу на основной домен зайти то все в порядке, а если зайти на поддомен она мало того что его просто игнорирует.
    Получается вопрос остался открытым, на надо его переформулировать
    "Как в Opera подключить куки из поддомена на основной домен и другие поддомены?"
    Может здесь копать?
    Код (Text):
    1. session_set_cookie_params(360000, '/','.moidoman.ru',false,false);
     
  9. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    хм... попробуй задать маску, типа *.moidoman.ru ну или что-то подобное.
     
  10. Krnkazaryan

    Krnkazaryan Новичок

    С нами с:
    6 июн 2014
    Сообщения:
    12
    Симпатии:
    0
    Перелопатил
    Не помогло
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    каноническая форма ".domain.tld" должна работать везде одинаково! т.е. на всех поддоменах. исключение для доменов первого уровня — на ".localhost" например не так.

    может быть проблема таки не в ЭТОМ, а в том, что присутствовала вторая кука — на домене описанном по другому. и они конкурировали, не?

    Добавлено спустя 3 минуты 44 секунды:
     
  12. Krnkazaryan

    Krnkazaryan Новичок

    С нами с:
    6 июн 2014
    Сообщения:
    12
    Симпатии:
    0
    Я в ручную удалил все куки в Опере, потом тестировал
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    а получится воспроизвести ошибку на простых примерах setcookie — без магии с сессионными функциями?
     
  14. Krnkazaryan

    Krnkazaryan Новичок

    С нами с:
    6 июн 2014
    Сообщения:
    12
    Симпатии:
    0
    Какой код написать, по вашему, чтоб выяснить все?
    Не могли бы накинуть примерчик, ото уже мозга за мозгу заходит
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    я провел такой эксперимент с неоднозначными куками:
    есть скрипт читающий куку
    Код (PHP):
    1. echo isset($_COOKIE['xxx']) ? $_COOKIE['xxx'] : '---'; 
    есть два скрипта пишущие куку, но один пишет в .domain.tld, а другой в sub.domain.tld
    Код (PHP):
    1. setcookie('xxx', 'from a', time() + 360000, '/', '.domain.tld', false, false); 
    и
    Код (PHP):
    1. setcookie('xxx', 'from b', time() + 360000, '/', 'sub.domain.tld', false, false); 
    ну и еще два скрипта, стирающие ту или иную куку.

    запускаю все это в домене sub.domain.tld в разной последовательности и смотрю что получилось. периодически тотально чищу куки средствами браузера, чтобы начать с чистого листа.

    а получается вот что: сосуществуют две одноименные куки, но прописанные к разным (под)доменам. читающий скрипт получает то значение, которое прописалось первым!!! неважно был это домен или поддомен. если я сотру эту куку (или она сэкпарится), то проявляется вторая.

    вывод: кука такая кука! надо её писать строго по одному и тому же адресу. ошибки из прошлого могут настичь тебя внезапно и свести с ума.

    https://www.dropbox.com/s/ch5ow1gydnawm4g/sc-test.zip

    p.s. у меня нет Opera. я тестировал в друх других браузерах.
     
  16. Krnkazaryan

    Krnkazaryan Новичок

    С нами с:
    6 июн 2014
    Сообщения:
    12
    Симпатии:
    0
    На всех браузерах (файрфокс, хром) у меня начальный код (свой) код так же работал
    Проблема в Опере.
    Чуть позже попробую ваш код у себя на сайте и доложу о результатах.
    Кстати нарыл в интернете интересную информацию
    http://www.askdev.ru/webdev/8820/Ка...domain-tld-не-работает-в-некоторых-браузерах/
     
  17. Krnkazaryan

    Krnkazaryan Новичок

    С нами с:
    6 июн 2014
    Сообщения:
    12
    Симпатии:
    0
    Отчет о выполненном задании
    Одним словом положение дел не изменилось
    код который я написал имеет следующий вид
    Код (Text):
    1. setcookie('xxx', '1111', time() + 360000, '/', '.moidoman.ru', false, false);
    С поддоменов не цеплает опера, а хром и файрфокс цеплают, ну и соответственно с основного домена цеплает>
    В принципе это можно понять ведь есть же такие доменные зоны как например net.ua, org.uk или de.com.
    Т. е. можно сослаться на политику безопасности браузеров, но в таком случае почему Хром цеплает и огнелис?
    Да и не удобно все это.
    Должен быть способ способ из поддомена подцепить куку для основного домена и всех поддоменов
    Если кто-то знает прошу поделиться инфой. Ну или перенаправить туда где могут знать
     
  18. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    то есть ошибка локализована?
    opera + попытка поставить куку с поддомена на родительский домен, так? это новая информация.

    гугль подсказывает, что в опере есть возможность настройки кук для конкретного домена. попробуй на другом домене.
    http://operawiki.info/NewCookieSettings

    ошибка, описанная на askdev просто чушь собачья. на этом форуме тоже найдется немало ложных проблем и их "решений".

    Добавлено спустя 3 минуты 46 секунд:
    p.s. ты работаешь с выдуманными доменами из собственного hosts или они резолвятся внешним DNS? домен и поддомен на одном адресе?
     
  19. Krnkazaryan

    Krnkazaryan Новичок

    С нами с:
    6 июн 2014
    Сообщения:
    12
    Симпатии:
    0
    Все в сети (на своем домене и на его поддоменах).
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    как насчет всего остального? если прогнать те же тесты на ДРУГОМ домене и его поддоменах, ошибка повторится?
    если такая "особенность" браузера существует, наверное были бы многочисленные репорты.
     
  21. Krnkazaryan

    Krnkazaryan Новичок

    С нами с:
    6 июн 2014
    Сообщения:
    12
    Симпатии:
    0
    На некоторых форумах встречал заявления о том что опера не принимает куки с поддоменов прописанные для всего домена.
    То есть не впервые эта тема поднимается.
    У вас нет домена на котором можно сделать тест под оперу?
    Если нет то могу в лс скинуть пример.
    Просто для простоты надо будет заранее некоторые моменты отключить.