Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с SESSION

44K
15 февраля 2009 года
kalimatas
7 / / 02.01.2009
Доброго времени суток!
Изучаю PHP, сейчас, в частности, механизм сессий. Нарисовалась такая вот проблема. Я пытаюсь сделать простенький счетчик посещений. Когда код такой как ниже, то все работает.

 
Код:
<?php
    session_start();
   
    if (!isset($_SESSION['counter'])) {
        $_SESSION['counter']=0;
    }
       
    echo "You reloaded this page ".$_SESSION['counter']++." times. ";
    echo "<br><a href='".$_SERVER['PHP_SELF']."'>Reload</a>";
?>


Т.е. на странице есть только блок с кодом PHP. А если я пытаюсь добавить этот код к странице с HTML-разметкой, то получается что-то непонятное: вместо того, чтобы увеличивать счетчик на единицу, скрипт увеличивает счетчик на 2, т.е. после того как я обновляю страницу в первый раз он выводит не 1 (как должно было быть), а - 2. В следующий раз 4 и т.д. Вот код:
Код:
<?php
    session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
    <head>
        <title>Untitled</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="keywords" content="" />
        <meta name="description" content="" />
           
        <link rel="stylesheet" href="" type="text/css" media="screen" />
        <script type="text/javascript"></script>
    </head>

<body>

<?php
    if (!isset($_SESSION['counter'])) {
        $_SESSION['counter']=0;
    }
       
    echo "You reloaded this page ".$_SESSION['counter']++." times. ";
    echo "<br><a href='".$_SERVER['PHP_SELF']."'>Reload</a>";
?>

</body>
</html>


Перед проверкой скрипта я, ествественно, удалю куку, содержащую идентификатор сесссии, чтобы начиналась заново. Или закрываю браузер и открываю заново.
Подскажите, пожалуйста, в чем может быть проблема.
44K
15 февраля 2009 года
kalimatas
7 / / 02.01.2009
Нет, проблем с заголовками нету - скрипт работает, но работает не так как надо. Он просто прибавляет во втором случае (с HTML-разметкой) не единицу, как я хотел бы, а почему-то двойку. Поэтому при обновлении страницы выводится You reloaded this page 2 times Потом 4,6,8,10 и т.д.
17K
15 февраля 2009 года
ALEX_
40 / / 19.04.2007
Прошу прощения - невнимательно прочитал,
проблема в строчке
<link rel="stylesheet" href="" type="text/css" media="screen" />
Опытным путем удалось выяснить, что если href="", то это рассматривается как ссылка на эту же страницу, браузер каждый раз заходит по url в атрибуте href, поэтому к счетчику прибавляется по два раза за каждый релоад
так код работает:
Код:
<?php
    session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
    <head>
        <title>Untitled</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="keywords" content="" />
        <meta name="description" content="" />

        <link rel="stylesheet" href="http://google.com" type="text/css" media="screen" />
        <script type="text/javascript"></script>
    </head>

<body>

<?php
    if (!isset($_SESSION['counter'])) {
        $_SESSION['counter']=0;
    }

    echo "You reloaded this page ".$_SESSION['counter']++." times. ";
    echo "<br><a href='".$_SERVER['PHP_SELF']."'>Reload</a>";
?>

</body>
</html>
44K
15 февраля 2009 года
kalimatas
7 / / 02.01.2009
Хм... действительно работает. Спасибо. Никогда бы не подумал, что проблема в этом. Теперь осталось только разобраться, почему же строчка, отвечающая за подключение таблицы стилей, влияет на работу скрипта.
Попробую поискать на офф сайте, может там было.
366
16 февраля 2009 года
int
668 / / 30.03.2005
Потому и влияет, что браузер расценивает этот же самый файл как файл со стилями и открывает его ещё раз.
44K
16 февраля 2009 года
kalimatas
7 / / 02.01.2009
Т.е. он делает две перезагрузки этого документа? Один раз, когда нажимаю на ссылку, другой - когда доходит до строчки <link rel...? Правильно я понимаю? Так как же избавиться от этого?
244
16 февраля 2009 года
UAS
2.0K / / 19.07.2006
Ничего он не перезагружает. Вы когда css загрузите - ваша страница перезагружается? Нет. И тут также. Только вместо css тут идет обращение к текущей странице. И загрузка её идет в фоне
44K
16 февраля 2009 года
kalimatas
7 / / 02.01.2009
Все, наконец-то разобрался... Проблема была в том, что в строке
 
Код:
<link rel="stylesheet" href="" type="text/css" media="screen" />

параметр href="" пуст. Если там указать путь к css файлу, то скрипт обрабатывается нормально.
Всем спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог