Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Session-start - что за ошибка?
 
 автор: Vados   (13.08.2006 в 11:28)   письмо автору
 
 

Всем привет!
Вот не могу разобраться, почему у меня 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]'$loginmktime(0,0,0,01,01,2007)); // записываем логин
  
setcookie('site[pass]'$passmktime(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

Помогите, заранее спасибо!

   
 
 автор: Sobachka   (13.08.2006 в 11:34)   письмо автору
 
   для: Vados   (13.08.2006 в 11:28)
 

include 'admin/config.php'; покажи его...

   
 
 автор: Vados   (13.08.2006 в 11:39)   письмо автору
 
   для: 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");
?> 

   
 
 автор: cheops   (13.08.2006 в 11:42)   письмо автору
 
   для: Vados   (13.08.2006 в 11:39)
 

Посмотрите нет ли пробелов или каких либо других символов после тэга ?> в файле config.php. Если есть - уберите.

   
 
 автор: Vados   (13.08.2006 в 11:49)   письмо автору
 
   для: cheops   (13.08.2006 в 11:42)
 

Здравствуйте cheops!
Пробелов нет - проверил!
Что ещё можно проверить, самое удивительное, что на работе всё работает, а вот дома нет!

   
 
 автор: cheops   (13.08.2006 в 12:19)   письмо автору
 
   для: Vados   (13.08.2006 в 11:49)
 

Удивляет строка c:\www\inventory\admin\config.php:26 в этом файле имеется 26 строка? Если имеется, то что в ней?

   
 
 автор: Sobachka   (13.08.2006 в 11:47)   письмо автору
 
   для: Vados   (13.08.2006 в 11:28)
 

попробуйте поменять местами
session_start(); и
include 'admin/config.php'; // скрипт подключения к базе данных

   
 
 автор: Vados   (13.08.2006 в 11:51)   письмо автору
 
   для: Sobachka   (13.08.2006 в 11:47)
 

Попробовал, также не помогает!

   
 
 автор: BAHO   (13.08.2006 в 12:02)   письмо автору
 
   для: Vados   (13.08.2006 в 11:51)
 

всем ясно, что ошибка в config.php, а не в index.php.
а уровень контроля ошибок какой? может нотисы вылетают.... а на работе контроль выставлен в php.ini....
попробуйте поставить уровень через error_reporting();

   
 
 автор: cheops   (13.08.2006 в 12:20)   письмо автору
 
   для: Vados   (13.08.2006 в 11:51)
 

Скрипт, который вы привели выше сам никуда не включается при помощи include или require?

   
 
 автор: Vados   (13.08.2006 в 12:37)   письмо автору
 
   для: 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 на локальной машине?

   
 
 автор: cheops   (13.08.2006 в 16:51)   письмо автору
 
   для: Vados   (13.08.2006 в 12:37)
 

>Конечно включается! Кроме этого у меня в строке 26 - установлено закрытие скрипта:?>
После вот этого ?> точно нет пробелов или переводов строки?

   
 
 автор: Vados   (13.08.2006 в 17:30)   письмо автору
 
   для: cheops   (13.08.2006 в 16:51)
 

Точно, проверил несколько раз!
Что мне делать далее?

   
 
 автор: Football   (13.08.2006 в 18:41)   письмо автору
 
   для: Vados   (13.08.2006 в 17:30)
 

Сегодня тоже работал с печеньем и возникла примерно также ошибка, чт ои у вас. Долго разбирался, оказалось, из-за того, что у меня стоял чувствительный контроль ошибок, а не было какой-то переменной, то выдавалась ошибка об этом (всеми нами известная Notice)
Попробуйте ввести в config.php в самом начале:

Error_Reporting (E_ALL & ~E_NOTICE);

Теперь есть ошибки?

   
 
 автор: Webmaster-X   (13.08.2006 в 19:19)   письмо автору
 
   для: Football   (13.08.2006 в 18:41)
 

Vados создай простой рнр файл и впиши в него
<?
session_start();
?>
проверь или ругается и если всётаки ругается тогда проверь рнр.ini прописана ли у тя папка для сесий

session.save_path = "E:\server\tmp\" для винды
session.save_path = "E:/server/tmp/" для юниксов

   
 
 автор: Vados   (13.08.2006 в 19:20)   письмо автору
 
   для: Football   (13.08.2006 в 18:41)
 

Привет!
Я не совсем Вас понимаю. Как это в начале файла config.php вывести Error_Reporting (E_ALL & ~E_NOTICE);.
Скажите, ввиде чего её нужно выводить, ввиде переменной?
Но я пробовал по-разному, но всё равно ничего к меня не получается!
Блин, на работе же всё получалось!

   
 
 автор: Webmaster-X   (13.08.2006 в 19:22)   письмо автору
 
   для: Vados   (13.08.2006 в 19:20)
 

нет просто прописать после
<?
Error_Reporting (E_ALL & ~E_NOTICE);.

   
 
 автор: Vados   (13.08.2006 в 19:57)   письмо автору
 
   для: Webmaster-X   (13.08.2006 в 19:22)
 

Сделал, но ничего не помогает!
Помогите, люди! Чё с этим делать?

   
 
 автор: Webmaster-X   (13.08.2006 в 20:40)   письмо автору
 
   для: Vados   (13.08.2006 в 19:57)
 

проверь php.ini
ps: Смотри выше

   
 
 автор: Vados   (13.08.2006 в 21:00)   письмо автору
 
   для: Webmaster-X   (13.08.2006 в 20:40)
 

Я вообще закоментировал в php.ini - эту строку, но ничего всё равно не изменилось!

   
 
 автор: Shorr Kan   (13.08.2006 в 20:59)   письмо автору
 
   для: Vados   (13.08.2006 в 19:57)
 

У вас самый-самый верхний скрипт - какой? Тот, который инклудит этот, приведенный вами... Самый родительский... Попробуйте в самом начале того скрипта - поставить строчку:

<?ob_start();?> - с её помощью вы будете класть всё выводимое - в буфер, и тогда у вас будет работать и session_start();
Вероятно.

   
 
 автор: Vados   (14.08.2006 в 22:47)   письмо автору
 
   для: Shorr Kan   (13.08.2006 в 20:59)
 

Хорошо, спасибо помогло!
А как теперь мне передать, то что было в буфере, то есть у меня в скрипте есть проверка введённого имени и пароля, а теперь при правильном введении логина и пароля, естественно пользователь переходит на авторизированную страницу, в начале которой также передаются переменные с предыдущей страницы, но на данный момент скрипт, который отвечает за проверку уже авторизированного пользователя не работает и у меня выскакивает, мол:Вы не авторизированы!
Я передаю в этом случае на этой странице буфер посредством функции ob_get_contents();.
Но у меня ничего не получается, быть может нужно передавать какой-то отдельный параметр.
Заранее спасибо за ответ!

   
 
 автор: Vados   (14.08.2006 в 23:08)   письмо автору
 
   для: Shorr Kan   (13.08.2006 в 20:59)
 

Хорошо, спасибо помогло!
А как теперь мне передать, то что было в буфере, то есть у меня в скрипте есть проверка введённого имени и пароля, а теперь при правильном введении логина и пароля, естественно пользователь переходит на авторизированную страницу, в начале которой также передаются переменные с предыдущей страницы, но на данный момент скрипт, который отвечает за проверку уже авторизированного пользователя не работает и у меня выскакивает, мол:Вы не авторизированы!
Я передаю в этом случае на этой странице буфер посредством функции ob_get_contents();.
Но у меня ничего не получается, быть может нужно передавать какой-то отдельный параметр.
Заранее спасибо за ответ!

   
 
 автор: Veli   (15.08.2006 в 09:19)   письмо автору
 
   для: Vados   (14.08.2006 в 23:08)
 

У меня такая же проблема. Авторизация проходит. Я делаю

$_SESSION['pass'] = $log['pass']; 

и при переходе на след.странице проверяю

if (!isset($_SESSION['pass'])) 
{
echo "Вы не авторизованы!<br><a href=login.php>Войти</a>";
exit;
}
else
{ ...

Он же всегда кричит, что вы не авторизованы!

   
 
 автор: Vados   (15.08.2006 в 15:29)   письмо автору
 
   для: 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;
  }

А форма авторизации с кодом(не буду дублировать) расположена в самом начале страницы топика.
Заранее спасибо за помощь!

   
 
 автор: Shorr Kan   (15.08.2006 в 18:15)   письмо автору
 
   для: 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() рулит

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования