Доброго всем времени суток Вопрос возник такой Код (Text): session_set_cookie_params(360000, '/','.moidoman.ru',false,false); session_name($session_name); session_id($session_id); session_start(); Никак не могу в Опере поставить куки. В мозиле и хроме все работает отлично. Поначалу скрипт проверяет если ли запущенная сессия с таким названием, потом если нет разрушается сессия (session_destroy) и устанавливается новая, так как я показал. Но в Опере этого не происходит, либо происходит но с так что потом программно не избавиться от этой куки и приходится в ручную удалять его из папки. Посоветуйте пожалуйста правильный способ решения этой проблемы. Уже писал на некоторых форумах, но безрезультатно
давай сразу уточним: разные браузеры на одном и том же рабочем месте? ты про это не сказал ничего. а это может иметь значение — из-за локальных косяков со временем. приведенный код не должен вызывать проблем. а вот описание на словах про проверки и session_destroy какое-то мутное, может там что-то не так? перед тестированием удали вообще все куки, чтобы избежать наложения кук с одним именем, но относящихся к разным поддоменам или путям. по моему опыту именно такие вещи делают код непредсказуемым. если рассуждать логически, разное поведение браузеров может быть следствием ошибок в заголовках (куках). чтобы поймать ошибку, сделай минималистический пример и постепенно добавляй в него плюшки из настоящего проекта. не забывая чистить куки. смотришь посл какого шага проявится косяк.
На моем компе так. А сказал мне про этот косяк мой знакомый. У него тоже так было. То есть получается на двух разных компьютерах наблюдается одно и тоже (не зависит от компьютера и системы, как бы). Добавлено спустя 9 минут 25 секунд: До этого отрезка код такой Код (Text): session_set_cookie_params(360000, '/','.moidoman.ru',false,false); session_name($session_name); session_start(); if (session_id()==$session_id) { Наш человек } else { session_destroy(); session_set_cookie_params(360000, '/','.moidoman.ru',false,false); session_name($session_name); session_id($session_id); session_start(); } В хедере при ответ сервера идеальный, остальные браузеры цепляют куку, а вот опера после перехода на другую страницу сразу показывает кустыми куки. Да и еще одна особенность, каким-то магическим образом она подцепила что-то и потом уже да удалипь. Сразу скажу в настройках оперы все стоит правильно "принимать куки".
нет. я уже сказал, как бы я действовал — тестировал бы от простого к сложному. чуйка подсказывает, что косяк проявляется только в связке с этой твоей хитрой проверкой session_id. наверное есть неучтенная зависимость. собственно Opera, возможно, не при чем, просто совпало что в ней сохранилась живучая говнокука.
Спасибо что помогли советом Последовал вашему совету, хотя и не в нем было дело. Оказывается Опера на цеплает куки с поддоменов. Если сразу на основной домен зайти то все в порядке, а если зайти на поддомен она мало того что его просто игнорирует. Получается вопрос остался открытым, на надо его переформулировать "Как в Opera подключить куки из поддомена на основной домен и другие поддомены?" Может здесь копать? Код (Text): session_set_cookie_params(360000, '/','.moidoman.ru',false,false);
каноническая форма ".domain.tld" должна работать везде одинаково! т.е. на всех поддоменах. исключение для доменов первого уровня — на ".localhost" например не так. может быть проблема таки не в ЭТОМ, а в том, что присутствовала вторая кука — на домене описанном по другому. и они конкурировали, не? Добавлено спустя 3 минуты 44 секунды:
Какой код написать, по вашему, чтоб выяснить все? Не могли бы накинуть примерчик, ото уже мозга за мозгу заходит
я провел такой эксперимент с неоднозначными куками: есть скрипт читающий куку Код (PHP): echo isset($_COOKIE['xxx']) ? $_COOKIE['xxx'] : '---'; есть два скрипта пишущие куку, но один пишет в .domain.tld, а другой в sub.domain.tld Код (PHP): setcookie('xxx', 'from a', time() + 360000, '/', '.domain.tld', false, false); и Код (PHP): 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. я тестировал в друх других браузерах.
На всех браузерах (файрфокс, хром) у меня начальный код (свой) код так же работал Проблема в Опере. Чуть позже попробую ваш код у себя на сайте и доложу о результатах. Кстати нарыл в интернете интересную информацию http://www.askdev.ru/webdev/8820/Ка...domain-tld-не-работает-в-некоторых-браузерах/
Отчет о выполненном задании Одним словом положение дел не изменилось код который я написал имеет следующий вид Код (Text): setcookie('xxx', '1111', time() + 360000, '/', '.moidoman.ru', false, false); С поддоменов не цеплает опера, а хром и файрфокс цеплают, ну и соответственно с основного домена цеплает> В принципе это можно понять ведь есть же такие доменные зоны как например net.ua, org.uk или de.com. Т. е. можно сослаться на политику безопасности браузеров, но в таком случае почему Хром цеплает и огнелис? Да и не удобно все это. Должен быть способ способ из поддомена подцепить куку для основного домена и всех поддоменов Если кто-то знает прошу поделиться инфой. Ну или перенаправить туда где могут знать
то есть ошибка локализована? opera + попытка поставить куку с поддомена на родительский домен, так? это новая информация. гугль подсказывает, что в опере есть возможность настройки кук для конкретного домена. попробуй на другом домене. http://operawiki.info/NewCookieSettings ошибка, описанная на askdev просто чушь собачья. на этом форуме тоже найдется немало ложных проблем и их "решений". Добавлено спустя 3 минуты 46 секунд: p.s. ты работаешь с выдуманными доменами из собственного hosts или они резолвятся внешним DNS? домен и поддомен на одном адресе?
как насчет всего остального? если прогнать те же тесты на ДРУГОМ домене и его поддоменах, ошибка повторится? если такая "особенность" браузера существует, наверное были бы многочисленные репорты.
На некоторых форумах встречал заявления о том что опера не принимает куки с поддоменов прописанные для всего домена. То есть не впервые эта тема поднимается. У вас нет домена на котором можно сделать тест под оперу? Если нет то могу в лс скинуть пример. Просто для простоты надо будет заранее некоторые моменты отключить.