Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/127: Рейтинг темы: голосов - 127, средняя оценка - 4.65
0 / 0 / 1
Регистрация: 21.05.2012
Сообщений: 5
1

Cannot send session cache limiter - headers already sent

01.06.2012, 16:57. Показов 26268. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Сейчас пишу скрипт на PHP. Начал писать. Если не прикреплять к скрипту дизайн, то он работает. Но если я цепляю дизайн к скрипту, то начинается

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent

И из-за этого предупреждения не работает скрипт т.к. он использует cookie и не может их записать..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2012, 16:57
Ответы с готовыми решениями:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent
И опять я, не прошло и дня как я столкнулся с новой проблемой (старую решил сам, очень я...

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent
Ребят, я полный краб в php пока что ) При входе в админку вордпреса белый экран и Notice: Use of...

Cannot send session cache limiter - headers already sent
Здравствуйте хочу спросить как реализовать сессию на авторизацию вот кусок кода for($i = 0; $i...

Cannot send session cache limiter - headers already sent
Решил сделать ограничение на просмотр контента, в зависимости от того, залогинился человек на сайте...

12
47 / 47 / 4
Регистрация: 05.06.2009
Сообщений: 122
01.06.2012, 17:04 2
Цитата Сообщение от DedaGates Посмотреть сообщение
Но если я цепляю дизайн к скрипту, то начинается
Кода дай людям))) иногда даже из-за пробела перед session_start() не работает.
0
0 / 0 / 1
Регистрация: 21.05.2012
Сообщений: 5
01.06.2012, 17:13  [ТС] 3
AllageARH, код настолько говнокод, что я боюсь его давать

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<head>
<title>Test</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
 
<body>
<div id="wrapper">
    <div id="masthead"></div>
    <div id="top_nav">
        <ul id="topmenu">
        </ul>
    </div>
    
        <div id="page_content">
        
            <h1><center>Auth</center></h1>
<?php
session_start();
include ('mysql.php');
if (isset($_GET['logout']))
{
    if (isset($_SESSION['user_id']))
        unset($_SESSION['user_id']);
        
    setcookie('login', '', 0, "/");
    setcookie('password', '', 0, "/");
    // и переносим его на главную
    header('Location: index.php');
    exit;
}
 
if (isset($_SESSION['user_id']))
{
    // юзер уже залогинен, перекидываем его отсюда на закрытую страницу
    
    header('Location: closed.php');
    exit;
 
}
 
 
 
if (!empty($_POST))
{
    $login = (isset($_POST['login'])) ? mysql_real_escape_string($_POST['login']) : '';
    
    $query = "SELECT `salt`
                FROM `account`
                WHERE `email`='{$login}'
                LIMIT 1";
    $sql = mysql_query($query) or die(mysql_error());
    
    if (mysql_num_rows($sql) == 1)
    {
        $row = mysql_fetch_assoc($sql);
        
        // итак, вот она соль, соответствующая этому логину:
        $salt = $row['salt'];
        
        // теперь хешируем введенный пароль как надо и повторям шаги, которые были описаны выше:
        $password = md5(md5($_POST['password']) . $salt);
        
        // и пошло поехало...
 
        // делаем запрос к БД
        // и ищем юзера с таким логином и паролем
 
        $query = "SELECT `id`
                    FROM `account`
                    WHERE `email`='{$login}' AND `password`='{$password}'
                    LIMIT 1";
        $sql = mysql_query($query) or die(mysql_error());
 
        // если такой пользователь нашелся
        if (mysql_num_rows($sql) == 1)
        {
            // то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)
 
            $row = mysql_fetch_assoc($sql);
            $_SESSION['user_id'] = $row['id'];
            
            
            // если пользователь решил "запомнить себя"
            // то ставим ему в куку логин с хешем пароля
            
            $time = 86400; // ставим куку на 24 часа
            
            if (isset($_POST['remember']))
            {
                setcookie('login', $login, time()+$time, "/");
                setcookie('password', $password, time()+$time, "/");
            }
            
            // и перекидываем его на закрытую страницу
            header('Location: closed.php');
            exit;
 
            // не забываем, что для работы с сессионными данными, у нас в каждом скрипте должно присутствовать session_start();
        }
        else
        {
            die('Такой логин с паролем не найдены в базе данных. И даём ссылку на повторную авторизацию. — <a href="login.php">Авторизоваться</a>');
        }
    }
    else
    {
        die('пользователь с таким логином не найден, даём ссылку на повторную авторизацию. — <a href="login.php">Авторизоваться</a>');
    }
}
 
print '
<form action="login.php" method="post">
    <table>
        <tr>
            <td>Логин:</td>
            <td><input type="text" name="login" /></td>
        </tr>
        <tr>
            <td>Пароль:</td>
            <td><input type="password" name="password" /></td>
        </tr>
        <tr>
            <td>Запомнить:</td>
            <td><input type="checkbox" name="remember" /></td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="Авторизоваться" /></td>
        </tr>
    </table>
</form>
';?>
</div>
    </div>      
    <div id="designed_by"><font color="ffffff" size="3"><p>Test Lk</p></font></div>
</div>
</body>
 
</html>
Вот.
0
47 / 47 / 4
Регистрация: 05.06.2009
Сообщений: 122
01.06.2012, 17:19 4
Да ладно, вместе поржем XD
А если серьезно, вот это перенеси в Саааааамое начало документа
Цитата Сообщение от DedaGates Посмотреть сообщение
<?php
session_start(); ?>
а там посмотри что он выкинет...)))
2
0 / 0 / 1
Регистрация: 21.05.2012
Сообщений: 5
01.06.2012, 17:21  [ТС] 5
Заработало! Спасибо!
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
01.06.2012, 18:15 6
Что означает предупреждение "headers already sent"
0
1 / 1 / 1
Регистрация: 07.11.2014
Сообщений: 93
21.11.2016, 16:10 7
Приветствую!
Хотел создать новую, но увидел эту.
У меня такая же ошибка, но всё работает.
Я после заполнения формы отправляю на специально созданный оработчик, который после обработки перекидывает на нужную страницу, где данные из сессии используются по назначению. В процессе обработки видно эту ошибку, а после открывается следующая страница, где всё исправно отображается. Не могу понять, что за дела.
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
<?php
session_start();
 
include_once("db.php");
if (isset($_POST['enter'])) 
{
  $e_login = $_POST['e_login'];
  $e_password = md5 ($_POST['e_password']);
 
  $result = $con->query("SELECT * FROM finist_1 WHERE login = '$e_login'");
  $user_data = $result->fetch_assoc();
  if ($user_data['password'] == $e_password)
  {
 
    $usn = $user_data['username'];
    $user_id = $user_data['user_id'];
    $idate = $user_data['i_date'];
    $_SESSION['user_id'] = $user_id;
    $_SESSION['username'] = $usn;
    $_SESSION['i_date'] = $idate;
 
    echo 'Добро пожаловать, '.$usn.'!'
    .'<script type="text/javascript">
    window.location = "counter.php"
    </script>';
  }
 else 
 {
     echo "Не верный логин или пароль";
 }
}
?>
0
47 / 47 / 4
Регистрация: 05.06.2009
Сообщений: 122
21.11.2016, 17:40 8
Вы этот код, случаем, не инклюдите где-нибудь внутри файла?
например:
PHP
1
2
3
4
5
6
7
8
9
10
11
<html>
  <body>
    <?php if(isset($_POST['enter'])) { 
                 include "autoriz.php"
              } else { ?>
              <form action="" method="post">
               ...
              </form>
    <?php } ?>
  </body>
</html>
0
1 / 1 / 1
Регистрация: 07.11.2014
Сообщений: 93
21.11.2016, 17:51 9
Вроде нет. Если я правильно понял вопрос.
Он у меня только в этом файле присутствует.
0
47 / 47 / 4
Регистрация: 05.06.2009
Сообщений: 122
21.11.2016, 18:02 10
Как форма авторизации выглядит (код)?
0
1 / 1 / 1
Регистрация: 07.11.2014
Сообщений: 93
21.11.2016, 18:05 11
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
require 'app/header.php';
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Skyinvest Авторизация</title>
    <link rel="stylesheet" type="text/css" href="public/css/style.css">
</head>
<body>
    <div id="wrapper">
        <div id="choose">
            <form method="POST" action="app/enter.php">
                <input type="text" name="e_login" class="form" placeholder="Введите Логин" required>
                <br> 
                <input type="password" name="e_password" class="form" placeholder="Введите Пароль" required>
                <input type="submit" value="войти" name="enter" class="button">
            </form>
            <a href="register.php" id="reg_link">регистрация</a>
        </div>
    </div>
</body>
</html>
0
47 / 47 / 4
Регистрация: 05.06.2009
Сообщений: 122
21.11.2016, 18:41 12
Тут вроде всё ок. Читал ссыку выше (Что означает предупреждение "headers already sent")?
а именно:
И сохраним его в кодировке UTF-8. Но если мы теперь просмотрим файл в кодировке cp1251, то увидим, что вначале файла добавлены символы:
PHP
1
2
3
п»ї<?php
 
?>
0
1 / 1 / 1
Регистрация: 07.11.2014
Сообщений: 93
21.11.2016, 21:35 13
Проверял. Ничего. Там пусто.

Добавлено через 1 минуту
По идее, в такой ситуации он должен не работать. Но блин... Работает же.
Это больше всего и удивляет

Добавлено через 6 минут
...ну и надпись эта напрягает

Добавлено через 1 час 43 минуты
РАЗОБРАЛСЯ!!!
В общем, проблема, действительно в кодировке была.
Я до этого говорил, что проверял на наличие "ВОМ" - это так. Но я работаю в SublimeText. И проверял и сохранял с его помощью, а там нет такого "UTF8 без ВОМ".
Открыл код в Notepad++ Сохранил в нужной кодировке (там есть "...без ВОМ") и ошибка пропала.
Но всё равно, загадкой осталось для меня, ПОЧЕМУ ЭТО РАБОТАЛО???


Добавлено через 44 минуты
Балин!
Теперь иероглафами пишет )))
По первому коду там внизу у меня echo, где есть надпись "'Добро пожаловать, '.$usn.'!'"
Браузер выдаёт иероглифами. Подозреваю, что где-то нужно прописать кодировку тут.
Вот только где?

Добавлено через 2 минуты
А, всё. Нашёл ))
0
21.11.2016, 21:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2016, 21:35
Помогаю со студенческими работами здесь

Ошибка Cannot send session cache limiter - headers already sent
Почитал в интернете, что такая ошибка возникает если перед &lt;?php session_start(); ?&gt; стоят...

Ошибка Cannot send session cache limiter - headers already sent
Warning: session_start() : Cannot send session cache limiter - headers already sent (output started...

Ошибка в сессии (Cannot send session cache limiter-headers already sent)
&lt;?php session_start(); $_SESSION = ''; $_SESSION = ''; $_SESSION = ''; $_SESSION = ''; ...

Warning: session_start(): Cannot send session cache limiter - headers already sent
выдает это чудище: Warning: session_start(): Cannot send session cache limiter - headers already...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru