<?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>
Проблема с SESSION
Изучаю 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>";
?>
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>
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>
Перед проверкой скрипта я, ествественно, удалю куку, содержащую идентификатор сесссии, чтобы начиналась заново. Или закрываю браузер и открываю заново.
Подскажите, пожалуйста, в чем может быть проблема.
Нет, проблем с заголовками нету - скрипт работает, но работает не так как надо. Он просто прибавляет во втором случае (с HTML-разметкой) не единицу, как я хотел бы, а почему-то двойку. Поэтому при обновлении страницы выводится You reloaded this page 2 times Потом 4,6,8,10 и т.д.
проблема в строчке
<link rel="stylesheet" href="" type="text/css" media="screen" />
Опытным путем удалось выяснить, что если href="", то это рассматривается как ссылка на эту же страницу, браузер каждый раз заходит по url в атрибуте href, поэтому к счетчику прибавляется по два раза за каждый релоад
так код работает:
Код:
Попробую поискать на офф сайте, может там было.
Потому и влияет, что браузер расценивает этот же самый файл как файл со стилями и открывает его ещё раз.
Т.е. он делает две перезагрузки этого документа? Один раз, когда нажимаю на ссылку, другой - когда доходит до строчки <link rel...? Правильно я понимаю? Так как же избавиться от этого?
Ничего он не перезагружает. Вы когда css загрузите - ваша страница перезагружается? Нет. И тут также. Только вместо css тут идет обращение к текущей странице. И загрузка её идет в фоне
Код:
<link rel="stylesheet" href="" type="text/css" media="screen" />
параметр href="" пуст. Если там указать путь к css файлу, то скрипт обрабатывается нормально.
Всем спасибо.