прочитал статью
http://pyha.ru/articles/php/auth/и вроде все сделал как там написано и работало все нормально, но
вот когда начал изменять… :(
проблема в следующем, есть каркас страницы, где включаются с помощью require_once определенные блоки, и вот когда я вызываю блок с авторизацие и сохранинием в куки(или же делаю выход уже зарегистрированным пользователем) то появляется ошибка (приведу пример для выхода уже зарегистрованного пользователя)
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\aa.ru\www\index.php:84) in Z:\home\aa.ru\www\users\logdo.php on line 12
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\aa.ru\www\index.php:84) in Z:\home\aa.ru\www\users\logdo.php on line 13
файл index.php который является каркасом
<?php
session_start();
require_once('admin/config.php');
// если пользователь не авторизован
if (!isset($_SESSION['id']))
{
// то проверяем его куки
// вдруг там есть логин и пароль к нашему скрипту
if (isset($_COOKIE['login']) && isset($_COOKIE['password']))
{
// если же такие имеются
// то пробуем авторизовать пользователя по этим логину и паролю
$login = mysql_escape_string($_COOKIE['login']);
$password = mysql_escape_string($_COOKIE['password']);
// и по аналогии с авторизацией через форму:
// делаем запрос к БД
// и ищем юзера с таким логином и паролем
$query = "SELECT `id`
FROM `users`
WHERE `login`='{$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'];
// не забываем, что для работы с сессионными данными, у нас в каждом скрипте должно присутствовать session_start();
}
}
}
if (isset($_SESSION['user_id']))
{
$query = "SELECT `login`
FROM `users`
WHERE `id`='{$_SESSION['user_id']}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
// если нету такой записи с пользователем
// ну вдруг удалили его пока он лазил по сайту.. =)
// то надо ему убить ID, установленный в сессии, чтобы он был гостем
if (mysql_num_rows($sql) != 1)
{
header('Location: login.php?logout');
exit;
}
$row = mysql_fetch_assoc($sql);
$welcome = $row['login'];
}
else
{
$welcome = 'гость';
}
?>
<html>
<head>
<title>PHP</title>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
<META NAME="description" CONTENT="Описание информации на страничке, что содержит">
<META NAME="keywords" CONTENT="Ключевые слова для поисковых систем">
<!–эффект прозрачного закрытия окна и плавного перехода на новую страницу–>
<!–<META http-equiv=Page-Exit content=progid:DXImageTransform.Microsoft.Fade(Duration=1)>–>
</HEAD>
</head>
<LINK rel="stylesheet" type="text/css" href="styles/style.css">
<body bgcolor=white>
<table width=95% align=center bgcolor=#87CEFA CELLPADDING=0 CELLSPACING=0 BORDERCOLOR=blue>
<tr>
<td height=100 >
logotip
</td>
</tr>
</table>
<table width=95% align=center bgcolor=#87CEFA CELLPADDING=0 CELLSPACING=0 BORDERCOLOR=blue>
<tr>
<td align=center bgcolor=#3399ff>
<?php
require_once ("topmenu.php");
?>
</td>
</tr>
<tr>
<td>
<table align=center width=100% CELLPADDING=2 CELLSPACING=0 BORDERCOLOR=blue>
<td width=150 valign=top>
<?php
require_once ("leftblock.php");
?>
</td>
<td width=* valign=top>
<?php
$page=$_GET['page'];
if (!$page) $page="main";
if (file_exists($page . ".php")==FALSE) $page="404";
include ($page . '.php');
// require_once ("main.php");
?>
</td>
<td width=150 valign=top>
<?php
require_once ("rightblock.php");
?>
</td>
</table>
</td>
</tr>
<tr>
<td height=80 bgcolor=#3399ff>
"footer.php";
</td>
</tr>
</table>
<p align="center"><font size="2"><br>
<strong>Created by
<A href="mailto:фываыфва">ыфваыфва</A></strong> </font><br>
</p>
</body>
</html>
файл logdo.php
<?php
session_start();
require_once('admin/config.php');
if (isset($_GET['logout']))
{
if (isset($_SESSION['user_id']))
unset($_SESSION['user_id']);
setcookie('login', '', 0, "/");
setcookie('password', '', 0, "/");
// и переносим его на главную
$return="index.php";
echo "<html><head><meta http-equiv='refresh' content='0; url=$return'>
</head></html>";
// header('Location: ../index.php');
exit;
}
if (isset($_SESSION['user_id']))
{
// юзер уже залогинен, перекидываем его отсюда на закрытую страницу
$return="index.php";
echo "<html><head><meta http-equiv='refresh' content='0; url=$return'>
</head></html>";
// header('Location: ../index.php');
exit;
}
if (!empty($_POST))
{
$login = (isset($_POST['login'])) ? mysql_real_escape_string($_POST['login']) : '';
$query = "SELECT `salt`
FROM `users`
WHERE `login`='{$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 `users`
WHERE `login`='{$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, "/");
}
// и перекидываем его на закрытую страницу
$return="index.php";
echo "<html><head><meta http-equiv='refresh' content='0; url=$return'>
</head></html>";
// header('Location: ../index.php');
exit;
// не забываем, что для работы с сессионными данными, у нас в каждом скрипте должно присутствовать session_start();
}
else
{
echo ('Такой логин с паролем не найдены в базе данных. авотризуйтесь — <a href="index.php?page=users/login">Авторизоваться</a>');
}
}
else
{
echo('пользователь с таким логином не найден, авотризуйтесь — <a href="index.php?page=users/login">Авторизоваться</a>');
}
}
?>
прошу не отсылать на
http://phpfaq.ru/headersя там почитал, но к сожалению не понял, как исправить данную ошибку в моем примере, выше я не могу уже переносить, я ведь включаю данный год в коркас
в пхп новичек, не судите строго=)