|
|
|
| Всем привет!
Вот не могу разобраться, почему у меня PHP рукается на session-start.
На другой машине проверял, всё работает!
Вот исходный код скрипта:
<?php
// авторизация
include 'admin/config.php'; // скрипт подключения к базе данных
session_start();
$login = addslashes(trim($_POST['login']));
$pass = addslashes(trim($_POST['pass']));
if (!$login || !$pass) // если не введен логин и/или пароль, то ошибка
{
echo "<b class=text>";
echo 'Не введен пароль';
echo "</b>";
exit;
}
$res = mssql_query('SELECT * FROM USERS WHERE login="'.$login.'" and pass="'.$pass.'"');
if(!mssql_num_rows($res))
{
// если введенный логин и/или пароль не существует, то ошибка
echo "<b class=text>";
echo 'Вы ввели неверный пароль!';
echo "</b>";
exit;
}
// устанавливаем куки с именем site. Срок действия 1.01.2007
setcookie('site[login]', $login, mktime(0,0,0,01,01,2007)); // записываем логин
setcookie('site[pass]', $pass, mktime(0,0,0,01,01,2007)); // пароль
$log = mssql_fetch_array($res);
$_SESSION['login'] = $log['login']; // устанавливаем логин в переменную сессии
$_SESSION['pass'] = $log['pass'];
header('location: admin/admin.php');
//include 'bottom.php';
?>
|
У меня как только я захожк на страницу - пишет:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at c:\www\inventory\admin\config.php:26) in c:\www\inventory\index.php on line 23
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at c:\www\inventory\admin\config.php:26) in c:\www\inventory\index.php on line 23
Warning: Cannot modify header information - headers already sent by (output started at c:\www\inventory\admin\config.php:26) in c:\www\inventory\index.php on line 45
Warning: Cannot modify header information - headers already sent by (output started at c:\www\inventory\admin\config.php:26) in c:\www\inventory\index.php on line 46
Warning: Cannot modify header information - headers already sent by (output started at c:\www\inventory\admin\config.php:26) in c:\www\inventory\index.php on line 51
Помогите, заранее спасибо! | |
|
|
|
|
|
|
|
для: Vados
(13.08.2006 в 11:28)
| | include 'admin/config.php'; покажи его... | |
|
|
|
|
|
|
|
для: Sobachka
(13.08.2006 в 11:34)
| | Привет!, вот config.php
<?php
$myServer = "localhost";
$myUser = "sa";
$myPass = "password";
$myDB = "inventory";
$s = @mssql_connect($myServer, $myUser, $myPass)
or die("Невозможно соединиться с $myServer");
$d = @mssql_select_db($myDB, $s)
or die("Невозможно открыть БД $myDB");
?>
|
| |
|
|
|
|
|
|
|
для: Vados
(13.08.2006 в 11:39)
| | Посмотрите нет ли пробелов или каких либо других символов после тэга ?> в файле config.php. Если есть - уберите. | |
|
|
|
|
|
|
|
для: cheops
(13.08.2006 в 11:42)
| | Здравствуйте cheops!
Пробелов нет - проверил!
Что ещё можно проверить, самое удивительное, что на работе всё работает, а вот дома нет! | |
|
|
|
|
|
|
|
для: Vados
(13.08.2006 в 11:49)
| | Удивляет строка c:\www\inventory\admin\config.php:26 в этом файле имеется 26 строка? Если имеется, то что в ней? | |
|
|
|
|
|
|
|
для: Vados
(13.08.2006 в 11:28)
| | попробуйте поменять местами
session_start(); и
include 'admin/config.php'; // скрипт подключения к базе данных | |
|
|
|
|
|
|
|
для: Sobachka
(13.08.2006 в 11:47)
| | Попробовал, также не помогает! | |
|
|
|
|
|
|
|
для: Vados
(13.08.2006 в 11:51)
| | всем ясно, что ошибка в config.php, а не в index.php.
а уровень контроля ошибок какой? может нотисы вылетают.... а на работе контроль выставлен в php.ini....
попробуйте поставить уровень через error_reporting(); | |
|
|
|
|
|
|
|
для: Vados
(13.08.2006 в 11:51)
| | Скрипт, который вы привели выше сам никуда не включается при помощи include или require? | |
|
|
|
|
|
|
|
для: cheops
(13.08.2006 в 12:20)
| | Я не совсем Вас понимаю?
Как это не включается?
Конечно включается! Кроме этого у меня в строке 26 - установлено закрытие скрипта:?>
Кроме этого, скрипт постоянно ругается на строки:
// устанавливаем куки с именем site. Срок действия 1.01.2007
setcookie('site[login]', $login, mktime(0,0,0,01,01,2007)); // записываем логин
setcookie('site[pass]', $pass, mktime(0,0,0,01,01,2007)); // пароль
|
а также на строку, которая следует за setcookie:
header('location: admin/admin.php');
|
Это может быть связано с сохранением cookie на локальной машине? | |
|
|
|
|
|
|
|
для: Vados
(13.08.2006 в 12:37)
| | >Конечно включается! Кроме этого у меня в строке 26 - установлено закрытие скрипта:?>
После вот этого ?> точно нет пробелов или переводов строки? | |
|
|
|
|
|
|
|
для: cheops
(13.08.2006 в 16:51)
| | Точно, проверил несколько раз!
Что мне делать далее? | |
|
|
|
|
|
|
|
для: Vados
(13.08.2006 в 17:30)
| | Сегодня тоже работал с печеньем и возникла примерно также ошибка, чт ои у вас. Долго разбирался, оказалось, из-за того, что у меня стоял чувствительный контроль ошибок, а не было какой-то переменной, то выдавалась ошибка об этом (всеми нами известная Notice)
Попробуйте ввести в config.php в самом начале:
Error_Reporting (E_ALL & ~E_NOTICE);
|
Теперь есть ошибки? | |
|
|
|
|
|
|
|
для: Football
(13.08.2006 в 18:41)
| | Vados создай простой рнр файл и впиши в него
<?
session_start();
?>
проверь или ругается и если всётаки ругается тогда проверь рнр.ini прописана ли у тя папка для сесий
session.save_path = "E:\server\tmp\" для винды
session.save_path = "E:/server/tmp/" для юниксов | |
|
|
|
|
|
|
|
для: Football
(13.08.2006 в 18:41)
| | Привет!
Я не совсем Вас понимаю. Как это в начале файла config.php вывести Error_Reporting (E_ALL & ~E_NOTICE);.
Скажите, ввиде чего её нужно выводить, ввиде переменной?
Но я пробовал по-разному, но всё равно ничего к меня не получается!
Блин, на работе же всё получалось! | |
|
|
|
|
|
|
|
для: Vados
(13.08.2006 в 19:20)
| | нет просто прописать после
<?
Error_Reporting (E_ALL & ~E_NOTICE);. | |
|
|
|
|
|
|
|
для: Webmaster-X
(13.08.2006 в 19:22)
| | Сделал, но ничего не помогает!
Помогите, люди! Чё с этим делать? | |
|
|
|
|
|
|
|
для: Vados
(13.08.2006 в 19:57)
| | проверь php.ini
ps: Смотри выше | |
|
|
|
|
|
|
|
для: Webmaster-X
(13.08.2006 в 20:40)
| | Я вообще закоментировал в php.ini - эту строку, но ничего всё равно не изменилось! | |
|
|
|
|
|
|
|
для: Vados
(13.08.2006 в 19:57)
| | У вас самый-самый верхний скрипт - какой? Тот, который инклудит этот, приведенный вами... Самый родительский... Попробуйте в самом начале того скрипта - поставить строчку:
<?ob_start();?> - с её помощью вы будете класть всё выводимое - в буфер, и тогда у вас будет работать и session_start();
Вероятно. | |
|
|
|
|
|
|
|
для: Shorr Kan
(13.08.2006 в 20:59)
| | Хорошо, спасибо помогло!
А как теперь мне передать, то что было в буфере, то есть у меня в скрипте есть проверка введённого имени и пароля, а теперь при правильном введении логина и пароля, естественно пользователь переходит на авторизированную страницу, в начале которой также передаются переменные с предыдущей страницы, но на данный момент скрипт, который отвечает за проверку уже авторизированного пользователя не работает и у меня выскакивает, мол:Вы не авторизированы!
Я передаю в этом случае на этой странице буфер посредством функции ob_get_contents();.
Но у меня ничего не получается, быть может нужно передавать какой-то отдельный параметр.
Заранее спасибо за ответ! | |
|
|
|
|
|
|
|
для: Shorr Kan
(13.08.2006 в 20:59)
| | Хорошо, спасибо помогло!
А как теперь мне передать, то что было в буфере, то есть у меня в скрипте есть проверка введённого имени и пароля, а теперь при правильном введении логина и пароля, естественно пользователь переходит на авторизированную страницу, в начале которой также передаются переменные с предыдущей страницы, но на данный момент скрипт, который отвечает за проверку уже авторизированного пользователя не работает и у меня выскакивает, мол:Вы не авторизированы!
Я передаю в этом случае на этой странице буфер посредством функции ob_get_contents();.
Но у меня ничего не получается, быть может нужно передавать какой-то отдельный параметр.
Заранее спасибо за ответ! | |
|
|
|
|
|
|
|
для: Vados
(14.08.2006 в 23:08)
| | У меня такая же проблема. Авторизация проходит. Я делаю
$_SESSION['pass'] = $log['pass'];
|
и при переходе на след.странице проверяю
if (!isset($_SESSION['pass']))
{
echo "Вы не авторизованы!<br><a href=login.php>Войти</a>";
exit;
}
else
{ ...
|
Он же всегда кричит, что вы не авторизованы! | |
|
|
|
|
|
|
|
для: Veli
(15.08.2006 в 09:19)
| | Дело в том, что сначала у меня была проблема след. характера:
Warning: Cannot modify header information - headers already sent by (output started at c:\www\inventory\admin\config.php:26) in c:\www\inventory\index.php on line 45
Warning: Cannot modify header information - headers already sent by (output started at c:\www\inventory\admin\config.php:26) in c:\www\inventory\index.php on line 46
Warning: Cannot modify header information - headers already sent by (output started at c:\www\inventory\admin\config.php:26) in c:\www\inventory\index.php on line 51
После этого, как я от этого избавился методом использования функции: session_start();, то у меня не получается при переходе на след. страницу принять этот буфер, точнее передать всего 2- переменные login и pass, которые позволят понимать, что user уже зарегистрировался.
Как я писал ранее, на версии PHP 5.2.2(dev) у меня всё работало и не было необходимости в использовании функции session_start().
Данный пример, который вы привели выше мне не подходит, так как проверка на авторизацию у меня и так проходит, просто я не могу передать переменные, похоже из-за буфферизации, как мне используя мою авторизацию, добиться успеха в этом вопросе?
Вот код, который расположен на каждой защинённой странице и проверяет авторизацию:
<?php
include 'config.php';
session_start();
$login = $_SESSION['login'];
$pass = $_SESSION['pass'];
// проверяем логин и пароль из переменных сессии на наличие в базе данных
$res = mssql_query('SELECT * FROM USERS WHERE login="'.$login.'" and pass="'.$pass.'"');
$num = mssql_num_rows($res);
if ($num == 0)
{
echo "<b class=text>";
echo 'Ошибка авторизации!';
echo "</b>";
exit;
}
|
А форма авторизации с кодом(не буду дублировать) расположена в самом начале страницы топика.
Заранее спасибо за помощь! | |
|
|
|
|
|
|
|
для: Vados
(15.08.2006 в 15:29)
| | То есть, это и есть admin/admin.php ?
p.s. Из-за буферизации сессии не могут перестать работать, если я не ошибаюсь. Тут дело в другом.
p.p.s. Попробуйте и на страничке с установкой сессии... перед header('location... - вписать в лог-файл содержимое $_SESSION['login']; - а так же, на admin/admin.php , в самом начале, сразу после session_start();
А потом скажите, разные записи в лог-файле, или одинаковые. | |
|
|
|
|
автор: STEVER (21.08.2006 в 17:46) |
|
|
для: Shorr Kan
(13.08.2006 в 20:59)
| | ob_start() рулит | |
|
|
|