С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/23: Рейтинг темы: голосов - 23, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 04.08.2011
Сообщений: 3

session_start();

02.09.2011, 15:35. Показов 4705. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть авторизация на сессиях, всё работает хорошо, но на проверки файла(показывать или не показывать файл, если человек авторизован)вылезает:

PHP
1
2
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\partname.net\www\admin\del_cat.php:1) in Z:\home\partname.net\www\admin\del_cat.php on line 5
Доступ закрыт, даём ссылку на авторизацию. — Авторизоваться
Всё понятно ,что заголовок уже передан, но решить это не получается.

Собственно сам файл:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?
 
 
include ("../engine/config/mysql.php");
if (isset($_POST['id'])) {$id = $_POST['id'];}session_start();
if (isset($_SESSION['user_id']))
{
    // показываем защищенные от гостей данные.
    print '<h1>Здрасте!</h1>
    <p>Это закрытая страница.</p>
    <p><a href="index.php">Перейти на главную</a></p>';
}
else
{
    die('Доступ закрыт, даём ссылку на авторизацию. — <a href="login.php">Авторизоваться</a>');
}
?>
<!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="en-gb" lang="en-gb">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
  <title>Админпанель</title> 
  <script type="text/javascript" src="../templates/admin/js/mootips.js"></script>
  <script type="text/javascript" src="../templates/admin/js/joomla.javascript.js"></script>
  <script type="text/javascript" src="../templates/admin/js/mootools.js"></script>
  <script type="text/javascript" src="../templates/admin/js/admin.js"></script>
  <link href="../templates/admin/css/blue.css" rel="stylesheet" type="text/css">
  <link href="../templates/admin/css/template_css.css" rel="stylesheet" type="text/css">
  <link href="../templates/admin/css/system.css" rel="stylesheet" type="text/css">
  <script type="text/javascript">
        window.addEvent('domready', function(){ new Accordion($$('.panel h3.jpane-toggler'), $$('.panel div.jpane-slider'), {onActive: function(toggler, i) { toggler.addClass('jpane-toggler-down'); toggler.removeClass('jpane-toggler'); },onBackground: function(toggler, i) { toggler.addClass('jpane-toggler'); toggler.removeClass('jpane-toggler-down'); },duration: 300,opacity: false,alwaysHide: true}); });
        window.addEvent('domready', function(){ var JTooltips = new Tips($$('.hasTip'), { maxTitleChars: 50, fixed: false}); });
  </script>
<!--[if IE 7]>
<link href="templates/jbsimpla/css/ie7.css" rel="stylesheet" type="text/css" />
<![endif]-->
<!--[if lte IE 6]>
<link href="templates/jbsimpla/css/ie6.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="templates/jbsimpla/js/supersleight-min.js"></script>
<![endif]-->
</head>
<body class="blue">
<?php include('../templates/admin/menu.tpl');?>
<div id="content-wrap">
<?php include('../templates/admin/status.tpl');?>
<?php include('../templates/admin/topmenu.tpl');?>
    <div class="clear"></div>
<?php include('../templates/admin/btop.tpl');?>
<?php include('../templates/admin/content_simp.tpl');?>
    <p><strong>Выберите категорию для удаления</strong></p>
<form action="" method="post">
<? 
$result = mysql_query("SELECT `title`, `id` 
                       FROM `categories`");      
$myrow = mysql_fetch_array($result);
do 
{ printf ("<p><input name='id' type='radio' value='%s'><label>%s</label></p>",$myrow["id"],$myrow["title"]);
}
while ($myrow = mysql_fetch_array($result));
?>
<p> <input name="submit" type="submit" value="Удалить категорию"></p>
</form>
<?php 
if (isset($id))
{
$result0 = mysql_query ("SELECT `id` 
                         FROM `data` 
                         WHERE `cat`='$id'",$mysql);
if (mysql_num_rows($result0) > 0) {
echo "<p>В категории, которую Вы хотите удалить, есть новости. Сначала распределите новости по другим категориям.</p>";
}
else
{
$result = mysql_query ("DELETE FROM `categories` 
                        WHERE `id` = ". (int)$id );
if (mysql_affected_rows() > 0)
     {echo "<p>Ваша категория успешно удалена!</p>";}
else {echo "<p>Ваша категория не удалена!</p>";}
}
}        
         ?>
<?php include('../templates/admin/content_simp_two.tpl');?>
</div>
</body>
</html>
Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2011, 15:35
Ответы с готовыми решениями:

session_start()
вписываю эту функцию в начале страницы и выдает эти ошибки: Warning: session_start(): Cannot send session cookie - headers already sent...

Ошибка session_start()
Доброго времени суток! Подскажите пожалуйста с чем может быть связана данная ошибка: Warning: session_start() :...

Session_start и sleep
Всем доброго времени суток! // Открытие сессии. session_start(); // Ajax запрос с помощью JsHttpRequest // Отличие AJAX...

3
0 / 0 / 0
Регистрация: 19.08.2011
Сообщений: 10
02.09.2011, 16:18
Ошибку эту исправить несложно.
Часто такое же сообщение появляется при старте сессий, в немного другой формулировке:
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent

Для начала узнаем, как вообще общается броузер с сервером. Происходит это по специальному протоколу HTTP. К примеру, когда ты набраешь адрес, или нажимаешь на ссылку, броузер посылает HTTP запрос серверу. Сервер отвечает. Первыми в ответе ВСЕГДА идут HTTP заголовки. Хоть один. И только потом уже сервер посылает, а броузер принимает, текст, или картинку, или файл - в общем, что было запрошено. Cобственно, из-за этого правила - сначала заголовок, а потом информация, и происходит данная ошибка. РНР, для твоего удобства, посылает заголовки автоматически, как только скрипт начинает выдавать бровзеру информацию. Соответственно, если хоть один пробел был уже передан пользователю, заголовки уже ушли, и снова их послать уже никак не можно. А, как ты уже, наверное, догадался, команды header(), setcookie, session_start(), посылают HTTP заголовки.

Разберем теперь это предупреждение.
Warning: Cannot add header information - headers already sent by (output started at /www/script.php:5) on line 20

Cannot add header information - headers already sent. Все ясно написано. "Не могу послать заголовок, поезд уже ушел" - пишет нам РНР. Дальше РНР сообщает, в каком скрипте и в какой его строке (output started at /www/script.php:5) произошел вывод информации, вызвавший автоматическую посылку заголовков. Очень легко найти и исправить. Может быть, там html теги, может быть, echo, а может и просто незамеченая пустая строка или пробел перед первым тегом <?.
Очень часто такую ошибку вызывает файл, подключаемый через include, в котором либо есть какой-то вывод, либо пустая строка после закрывающего PHP тега - обнаружить ее очень трудно.

Для решения этой проблемы нужно функцию header() (или session_start(), setcookie) и всю логику, которая ее вызывает, поместить ДО любого вывода в броузер. Просто перенести повыше в скрипте.
Ведь вы всё равно перенаправляете браузер. То есть, никакой текст всё равно не будет выведен! Значит, и выводить что-то одновременно с заголовком Location нет смысла. Правильно планируйте структуру своего скрипта: блок, который обрабатывает POST, не должен ничего выводить в браузер.

Иногда вы проверили ВСЁ - нигде ничего нет. Смените редактор. Посмотрите свой файл в другой программе. К примеру, Windows Блокнот при использовании кодировки Unicode добавляет в начало вашего файла служебный символ Byte Order Mark, никак при этом не ставя вас в известность. Откройте скрипт в другом редакторе и удалите посторонние символы. И смените Блокнот на другой редактор.
Или сохраняйте в кодировке UTF-8 without BOM
0
0 / 0 / 0
Регистрация: 04.08.2011
Сообщений: 3
02.09.2011, 17:00  [ТС]
Спасибо конечно, но это и так понятно...
0
0 / 0 / 0
Регистрация: 19.08.2011
Сообщений: 10
02.09.2011, 18:33
Ну а что тут не понятного код твой должен выглядеть так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
session_start();
include ("../engine/config/mysql.php");
if (isset($_POST['id'])) {$id = $_POST['id'];}
if (isset($_SESSION['user_id']))
{
        // показываем защищенные от гостей данные.
        print '<h1>Здрасте!</h1>
        <p>Это закрытая страница.</p>
        <p><a href="index.php">Перейти на главную</a></p>';
}
else
{
        die('Доступ закрыт, даём ссылку на авторизацию. — <a href="login.php">Авторизоваться</a>');
}
?>
<!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="en-gb" lang="en-gb">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
  <title>Админпанель</title> 
  <script type="text/javascript" src="../templates/admin/js/mootips.js"></script>
  <script type="text/javascript" src="../templates/admin/js/joomla.javascript.js"></script>
  <script type="text/javascript" src="../templates/admin/js/mootools.js"></script>
  <script type="text/javascript" src="../templates/admin/js/admin.js"></script>
  <link href="../templates/admin/css/blue.css" rel="stylesheet" type="text/css">
  <link href="../templates/admin/css/template_css.css" rel="stylesheet" type="text/css">
  <link href="../templates/admin/css/system.css" rel="stylesheet" type="text/css">
  <script type="text/javascript">
                window.addEvent('domready', function(){ new Accordion($$('.panel h3.jpane-toggler'), $$('.panel div.jpane-slider'), {onActive: function(toggler, i) { toggler.addClass('jpane-toggler-down'); toggler.removeClass('jpane-toggler'); },onBackground: function(toggler, i) { toggler.addClass('jpane-toggler'); toggler.removeClass('jpane-toggler-down'); },duration: 300,opacity: false,alwaysHide: true}); });
                window.addEvent('domready', function(){ var JTooltips = new Tips($$('.hasTip'), { maxTitleChars: 50, fixed: false}); });
  </script>
<!--[if IE 7]>
<link href="templates/jbsimpla/css/ie7.css" rel="stylesheet" type="text/css" />
<![endif]-->
<!--[if lte IE 6]>
<link href="templates/jbsimpla/css/ie6.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="templates/jbsimpla/js/supersleight-min.js"></script>
<![endif]-->
</head>
<body class="blue">
<?php include('../templates/admin/menu.tpl');?>
<div id="content-wrap">
<?php include('../templates/admin/status.tpl');?>
<?php include('../templates/admin/topmenu.tpl');?>
        <div class="clear"></div>
<?php include('../templates/admin/btop.tpl');?>
<?php include('../templates/admin/content_simp.tpl');?>
    <p><strong>Выберите категорию для удаления</strong></p>
<form action="" method="post">
<?php
$result = mysql_query("SELECT `title`, `id` 
                       FROM `categories`");      
$myrow = mysql_fetch_array($result);
do 
{ printf ("<p><input name='id' type='radio' value='%s'><label>%s</label></p>",$myrow["id"],$myrow["title"]);
}
while ($myrow = mysql_fetch_array($result));
?>
<p> <input name="submit" type="submit" value="Удалить категорию"></p>
</form>
<?php 
if (isset($id))
{
$result0 = mysql_query ("SELECT `id` 
                         FROM `data` 
                                                 WHERE `cat`='$id'",$mysql);
if (mysql_num_rows($result0) > 0) {
echo "<p>В категории, которую Вы хотите удалить, есть новости. Сначала распределите новости по другим категориям.</p>";
}
else
{
$result = mysql_query ("DELETE FROM `categories` 
                        WHERE `id` = ". (int)$id );
if (mysql_affected_rows() > 0)
     {echo "<p>Ваша категория успешно удалена!</p>";}
else {echo "<p>Ваша категория не удалена!</p>";}
}
}                
?>
<?php include('../templates/admin/content_simp_two.tpl');?>
</div>
</body>
</html>
После чего взять файлы, которые в include прописаны:
mysql.php,
menu.tpl,
status.tpl,
topmenu.tpl,
btop.tpl,
content_simp.tpl,
content_simp_two.tpl.
И сделать с ними то же самое. Я имею ввиду поубирай пробелы перед и после <?php.
Так же можно попробовать перекодировать его в utf8 без BOM. У тебя сейчас в какой кодировке сохранены эти файлы? Что - то из этого сделать и все будет работать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2011, 18:33
Помогаю со студенческими работами здесь

Ошибка при session_start()
&lt;?php session_start(); $number = addslashes(strip_tags(trim($_POST))); echo $number; ?&gt; Выдает ошибку, что делать?

Слетает сессия session_start
Привет, есть скрипт index.php вот код &lt;?php // скрипт автоизации на странице! session_start(); if(isset($_POST)) {

Обязательно ли в файле, где проверяется имя сессии, писать session_start?
приветствую! такой вопрос, если мы хотим на странице проверить сессию, вот допустим главный файл &lt;?php session_start(); ...

Ошибка сессии при команде "session_start();"
Здравствуйте, я задался целью написать свою CMS, дак вот, начал я её делать соответственно с регистрации и маленьких набросков на...

session_start
Вот такая ситуация: Warning: session_start(): Cannot send session cookie - headers already sent by (output started at...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru