За последние 24 часа нас посетили 53619 программистов и 1706 роботов. Сейчас ищут 925 программистов ...

Не работают сессии

Тема в разделе "Прочие вопросы по PHP", создана пользователем kornalexandr2, 19 окт 2015.

  1. kornalexandr2

    kornalexandr2 Новичок

    С нами с:
    19 окт 2015
    Сообщения:
    5
    Симпатии:
    0
    Всем привет!
    Заголовок не совсем точно передаёт суть проблемы, но более точное объяснение очень длинное. Вот оно...
    На сайте сессии работаю очень странно. В шапке сайта идет код, который подсчитывает количество обновлений страницы (взят, чтобы освоить азы работы с сессиями). Вот код:
    Код (PHP):
    1. <? 
    2. if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
    3. echo "Вы обновили эту страницу ".$_SESSION['counter']++." раз. ";
    4. echo "<br><a href=".$_SERVER['PHP_SELF'].">обновить"; 
    5. ?>
    Вот в шапке он не работает. Пробовал вынести этот код на отдельную страницу, которая загружалась после шапки, как обычная страница сайта. Точно также подсчет обновлений не работает. Вынес вообще этот кусок кода в отдельную страницу, которая загружается без всего (шапки, подвала и тд). Там код работает. И после перехода на основной сайт, на сайте тоже начинает работать. Для меня это полтергейст.

    Код (PHP):
    - стоит в шапке и отдельно в том файле, где работает.

    Вот основной сайт, где работает только после танцев с бубном
    http://cyberstavki.tk/

    Вот страница где работает (она же танец с бубном)
    http://cyberstavki.tk/ses.php

    Не назвал бы себя продвинутым пхп-программистом (а с сессиями вообще едва знаком), поэтому если еще нужна инфа - предоставлю!

    UPD:
    1. на сайте включен показ ошибок. Никаких ошибок не видно.
    2. сейчас структура страницы такова: выполняется session_start();, затем подгружаются шапка, тело и подвал.

    Заранее благодарен!

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Код (Text):
    1. session_start();
    должно идти ДО того как используется массив $_SESSION
     
  3. kornalexandr2

    kornalexandr2 Новичок

    С нами с:
    19 окт 2015
    Сообщения:
    5
    Симпатии:
    0
    Так и есть!
    Код (Text):
    1. session_start();
    идет до того, как вызываются остальные элементы страницы
    На сайте включен показ ошибок, так что этот косяк бы вылез сразу )
     
  4. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    значит не так и есть а где то идет до.

    Добавлено спустя 22 секунды:
    и еще 0.0001 % что у тебя что то не то с сервером.
     
  5. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    выкладывай весь код (;
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    покажи как ты это сделал
     
  7. kornalexandr2

    kornalexandr2 Новичок

    С нами с:
    19 окт 2015
    Сообщения:
    5
    Симпатии:
    0
    тоже рассматривал такой вариант. для проверки убирал старт сессии или переносил его дальше по коду. в таком случае получал ошибку об использовании сессий до старта сессий. так как сейчас ошибки нет, сделал вывод, что сессия стартуется там где надо
    В связи с этим вопрос...
    Чем можно отследить порядок выполнения скрипта, состояние переменных, сессий и т.д.? (а-ля Дебаггер)

    Добавлено спустя 1 минуту 44 секунды:
    По серверу... Тоже предполагал (начитавшись форумов, написал в саппорт - ответили, что нет никаких особенностей работы с сессиями, таких жалоб не имели от других, смотреть свой код)

    Добавлено спустя 1 минуту 38 секунд:
    Код (Text):
    1. ini_set('display_errors',1);
    2. error_reporting(E_ALL);
    Добавлено спустя 1 минуту 50 секунд:
    Вот это сложновато... В коде уже много файлов...
     
  8. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    тогда
     
  9. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    ну вот где то, что то не подключается или еще что то.
     
  10. kornalexandr2

    kornalexandr2 Новичок

    С нами с:
    19 окт 2015
    Сообщения:
    5
    Симпатии:
    0
    Спасибо всем за помощь!
    Вроде бы нашел решение. Оно очевидно. И я даже предполагал, что собака порылась где-то здесь, но не думал, что всё прям так. В общем решение:
    Файл index.php
    Код (Text):
    1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    2. <?session_start();?>
    3. //потом грузим шапку
    4. //потом грузим тело
    5. //потом грузим подвал
    Перенес старт сессии В САМОЕ НАЧАЛО. Получилось:
    Файл index.php
    Код (Text):
    1. <?session_start();?>
    2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    3. //потом грузим шапку
    4. //потом грузим тело
    5. //потом грузим подвал
    Таким образом решение оказалось тем самым, о котором пишут везде, где заходит разговор о сессиях: "Стартовать сессии в самом начале". Но я не думал, что прям настолько. У меня вроде и до этого сессии стартовали до того, как что-то выполнялось. Может ли кто-нибудь пояснить сей момент?

    PS: Еще раз всем большое спасибо!
     
  11. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    не до выполнения кода, сессии должны быть запущены до передачи заголовков
    вот тут подробно расписано.http://phpfaq.ru/newbie/headers
     
  12. kornalexandr2

    kornalexandr2 Новичок

    С нами с:
    19 окт 2015
    Сообщения:
    5
    Симпатии:
    0
    Вот огромное спасибо! Теперь всё встало на свои места!

    Добавлено спустя 3 минуты 5 секунд:
    зачетная статья! Всё просто, доступно, еще и с юмором!