- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Нужен совет профессионала.
На сколько правильным будет использование setcookie после вызова session_start? Я понимаю, что по логике вещей правильнее было бы не совмещать механизм сессий PHP с setcookie, а выбрать что-то одно. Но всё-таки? По факту, во всех браузерах это работает. Тоесть код:
действительно работает, куки ставятся, кука ид сессии тоже. Проверял везде.
Гугление по данной теме мне ничего не дало. Ну кроме нескольких англоязычных форумов, где человек сталкивался с проблемой в данном случае, но эти топики датируются 2005 годом. Может сегодня этой проблемы уже не стоит? Или всё-таки вызов session_start() и последующий setcookie() - это не есть правильно?
... по логике вещей правильнее было бы не совмещать механизм сессий PHP с setcookie ...
по логике PHP идентификатор сессии может передаваться в том числе и через куки ;) и, чаще всего, именно так и настраивают работу сессий. на мысли не наталкивает?
поставленная кука может понадобиться в следующей сессии, не вижу ничего крамольного
Не сомневайся, куки не только для сессий созданы, там еще много чего интересного можно хранить!
Механизм сессий использует куки для идентификации юзера. То есть он ставим ему куку с именем PHPSESSID (дефолтное значение, может изменяться). Далее браузер при каждом* обращении к сайту браузер посылает эту куку и механизм все это дело у себя разруливает(в temporary папке на сервере создаются файлы где хранятся данные, которые Вы ставите через $_SESSION['key']='value';)
setcookie - также ставит куку и также браузер посылает ее каждый раз*, просто эти данные помещаются ПХП в суперглобальный массив $_COOKIE.
* - посылает куку, пока expire действует, если кука просрочена - удаляет ее из своего хранилища(temporary папка у юзера).
По идеи это все равно что подряд вызвать 2 раза подряд setcookie();
Не пойму, в чем может быть конфликт?
Банальный пример - сайт с партнеркой.
На сайт заходит юзер по адресу www.site.ru/index.php?ref=vasya
в файле index.php пишем
setcookie('refer', $_GET['ref'], time()+60*60*24*365);
session_start();
То есть сессия нам тут нужна к примеру, чтобы посмтреть куда юзер ходит по сайту и для прочих корыстных целей, то есть это разовая процедура:)
А кука нам нужна постоянно. Вдруг юзер щас у нас ничего не купит, а придет уже по закладке на главную страницу через месяц и совершит покупку. В итоге наш vasya получит свое партнерское вознаграждение. Если конечно юзер не зайдет с другого браузера, или не почистит у себя куки.
Механизм сессий использует куки для идентификации юзера.
Я в курсе. Просто, например, session_start() нужно вызывать до отправки любых хидеров, как собственно и в случае с setcookie(), и тут у меня сомнения.
session_start() нужно вызывать до отправки любых хидеров, как собственно и в случае с setcookie(),
Почему "хидеров"? Откуда информация?
http://php.net/manual/ru/function.session-start.php
До отправки "текста/кода" (данных в браузер).
Связано как раз с тем, что при использовании сессий, которые сохраняют идентификатор в куках, функция посылает заголовок-header с этой самой кукой
Почему "хидеров"? Откуда информация?
Ну читал в нескольких местах подобные утверждения, например вот: http://phpforum.ru/index.php?showtopic=46680
http://php.net/manual/ru/function.session-start.php
До отправки "текста/кода" (данных в браузер).
Связано как раз с тем, что при использовании сессий, которые сохраняют идентификатор в куках, функция посылает заголовок-header с этой самой кукой
Тоесть так:
header("Content-Type: text/html; charset=utf-8");session_start();
тоже можно?
Получается, что каждая из этих функций (header(), session_start(), setcookie()) не формирует отдельно-взятый блок хидеров, а лишь дописывает в него строку "Cookie: name=value"?
Вот в общем-то в чём был вопрос: не генерирует ли session_start() завершенный блок заголовков? И не получается ли, что подряд вызванные вышеописанные функции формируют двойной хидер-блок (разделенный пустой строкой), который обрабатывается браузерами постольку-поскольку, но по сути нарушает стандарты?
С фига ли гости понаехали? С чего ради это он будет закрывать блок с заголовками? Откуда вообще такая мысль возникла?
По этой ссылке(http://phpforum.ru/index.php?showtopic=46680) - автор тупит. У него банально был вывод контента до session_start'a, так как ему выдало 2 ошибки(на хедер с кодировкой и на старт сессии). Если бы и была трабла в закрытии session_start'om блока заголовков, то 1 хедер с контент-тайп отработал бы нормально и соответственно session_start тоже. Ошибка бы была только если их поменять местами! Но это бред чистой воды:)
test.php(charset: utf-8 without BOM-signature)
<?php
error_reporting(E_ALL);
header('123: 123');
session_start();
?>
Пробуйте и убеждайтесь.
test.php(charset: utf-8 without BOM-signature)
<?php
error_reporting(E_ALL);
header('123: 123');
session_start();
?>
Пробуйте и убеждайтесь.
Естественно я пробовал. Просто хотел уточнить у коллективного разума :) Ибо нигде в документации php не встречал примеров, где бы session_start использовался вместе с setcookie, как впрочем и запрета так делать.
Я в курсе. Просто, например, session_start() нужно вызывать до отправки любых хидеров, как собственно и в случае с setcookie(), и тут у меня сомнения.
до отправки контента, а не хидеров.