X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Авторизация на сайте. Как сделать?, Нифига не вьеду
toorr2p
toorr2p
Topic Starter сообщение 11.5.2009, 22:42; Ответить: toorr2p
Сообщение #1


Помогите сделать авторизацию на сайте...

ZiToSS

Посоветовал мне вот такой вот скрипт:

<?php

session_start();
$host_db = "localhost"; // имя хоста
$user_db = "root"; // юзер(привилегии)
$pass_db = ""; // пароль юзера
$db_db = "ajax"; // база данных
$link = mysql_connect($host_db, $user_db, $pass_db) or die("Не возможно подключиться к базе данных");
mysql_select_db($db_db, $link) or die("Не могу выбрать базу данных");
if(isset($_POST['do'])){
$login = mysql_escape_string($_POST['login']);
$pass = md5($_POST['password']);
$result = mysql_query("SELECT * FROM users WHERE login='{$login}' AND password='{$pass}'");
if(mysql_num_rows($result) == 1) {
$user = mysql_fetch_array($result);
if($user['login'] == $login && $user['password'] == $pass) {
$_SESSION['login'] = $user['login'];
$_SESSION['password'] = $user['password'];
} else {
header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
} else {
header("Location: ../index.php?page=author&error");
exit;
}
mysql_close($link);
header("Location: ".$_SERVER['PHP_SELF']);
}

if(isset($_SESSION['login']) && isset($_SESSION['password'])) {
echo "Вы авторизованы";
} else {
?>
<html>
<body>
<div align="center" style="font-weight: bold;">
Форма авторизации
</div>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']?>">
Логин: <input type="text" name="login"><br>
Пароль: <input type="password" name="password"><br>
<input type="submit" name="do" value="Авторизоваться">
</form>
</html>
<?}?>
Но я не могу въехать как его прикрутить на сайт? ведь у меня там не одна страница, а 10. Тоесть если человек заходит на главную страницу,и через форму (которую я напр. прописал в файл heder.php и подгружаю его через include во все страницы.) авторизуется, что будет дальше если он с главной страницы перейдет на страницу с заметками например?Там что опять авторизоваться надо?
Объясните пожалуйста что такое эти сессии и как их использовать?

В общем мне надо - авторизовались на макушке сайта будет выведено типа (привет $logged_user добро пожаловать ) а если вводишь левое инфо она тебя просто выкидывает на главную страницу.
Объясните логику что из какого файла и куда передавать?
СПС...
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
toorr2p
toorr2p
Topic Starter сообщение 12.5.2009, 1:26; Ответить: toorr2p
Сообщение #2


Я переделал структуру файлов - теперь у меня в index.php через include/header.php вставляется шапка в которой вот такой скрипт:

<div id="logo">
<?
session_start();
$host_db = "localhost"; // имя хоста
$user_db = "Admin"; // юзер(привилегии)
$pass_db = "1234"; // пароль юзера
$db_db = "userlist"; // база данных
$link = mysql_connect($host_db, $user_db, $pass_db) or die("Не возможно подключиться к базе данных");
mysql_select_db($db_db, $link) or die("Не могу выбрать базу данных");
if(isset($_POST['do'])){
$login = mysql_escape_string($_POST['login']);
$password = md5($_POST['password']);
$result = mysql_query("SELECT * FROM userlist WHERE login='{$login}' AND password='{$password}'");
if(mysql_num_rows($result) == 1) {
$user = mysql_fetch_array($result);
if($user['login'] == $login && $user['password'] == $password) {
$_SESSION['login'] = $user['login'];
$_SESSION['password'] = $user['password'];
} else {
header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
} else {
header("Location: index.php");
exit;
}
mysql_close($link);
header("Location: ".$_SERVER['PHP_SELF']);
}

if(isset($_SESSION['login']) && isset($_SESSION['password']))
{
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result = mysql_query ("SELECT name FROM userlist WHERE login='{$login}' AND password='{$password}'",$db);
if($result == 1)
$myrow = mysql_fetch_array($result);
printf ("<div id='auth'>
<p><a style='color:#FFFFFF; font-size:10px;' href='register.php?id=$id&password=root'>%s</a></p>
<p style='background: #009966; border:0; font-size:10px; color:#FFFFFF; font-weight:bolder; margin-left: 25px;'><a href='view_user.php'>Пользователи</a></p></div>",$myrow["name"]);
}else{
print <<<HERE
<div id="auth"><form method="POST" action="header.php">
<p><a style="color:#FFFFFF; font-size:10px;" href="register.php">Зарегистрироватся</a></p>
<p><input style="font-size:9px; color:#FFFFFF;" type="text" name="login"> Логин</p>
<p><input style="font-size:9px; color:#FFFFFF;" type="password" name="password"> Пароль</p>
<p><input style="background: #009966; border:0; font-size:10px; color:#FFFFFF; font-weight:bolder; margin-left: 25px;" type="submit" name="do" value="Войти"><a href="view_user.php">Пользователи</a></p>
</form></div>
HERE;
}


?>
</div>

<div id="buttons">

<div id="nav_link">
<table width="100%" border="0" cellpadding="5">
<tr>
<th scope="col" width="17.5%"><div <? if(isset($n)) {if($n == 1){echo"class='nav_a'";} else {echo"class='nav_t'";}} ?>><a cat='cat' href="index.php"><p>Главная</p></a></div></th>
<th scope="col" width="17.5%"><div <? if(isset($n)) {if($n == 2){echo"class='nav_a'";} else {echo"class='nav_t'";}} ?>><a cat='cat' href="article.php"><p>Статьи</p></a></div></th>
<th scope="col" width="17.5%"><div <? if(isset($n)) {if($n == 3){echo"class='nav_a'";} else {echo"class='nav_t'";}} ?>><a cat='cat' href="news.php"><p>Новости</p></a></div></th>
<th scope="col" width="17.5%"><div <? if(isset($n)) {if($n == 4){echo"class='nav_a'";} else {echo"class='nav_t'";}} ?>><a cat='cat' href="download.php"><p>Скачать</p></a></div></th>
<th scope="col" width="35%"><div class="search"><form action="view_search.php" method="post" name="form_s">
<div class="search_area"><input name="search" type="text" class="search_text" size="25" maxlength="40"></div>
<div class="search_sub"><input name="sub" type="submit" class="search_b" value=""></div>
</p>
</form></div></th>
</tr>
</table>
</div>
</div>


Что может значит такое сообщение?:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at W:\home\localhost\www\toorr2p\index.php:28) in W:\home\localhost\www\toorr2p\bloks\header.php on line 4
в переводе на рус:
Не может послать ограничитель кэша сеанса - заголовки, уже посланные


Я подумал что это из-за того что в index.php уже есть соединение с БД, и создал новую БД с таблицей userlist и темиже пользователями...И для новой БД cоздал пользователя - это правильно?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
shtil
shtil
сообщение 12.5.2009, 8:27; Ответить: shtil
Сообщение #3


поставь сабаку перед сессией т.е. в коде у тебя должно быть так:
@session_start();
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 12.5.2009, 19:09; Ответить: ZiTosS
Сообщение #4


Вячеслав,
1) Я тебе посоветовал самый простейший скрипт, который ты и просил.
2) Про сессии уже писал на форуме. Могу только сказать что простыми словами сессия - это простое и удобное хранение данных на сервере пока сеанс пользователя, который зарезервировал данную сессию не закончен, т.е. пользователь не закрыл все страницы браузера с данным сайтом. Связь между пользователем и данными, хранящимися на сервере в папке temp осуществляется через cookies(хранение ID-сессии) или же адресную строку(передача ID-сессии). Поэтому например пользователь авторизуется, если данные не верны, то пользователь не сумеет зарезервировать переменных сессии. Если же он всё ввёл правильно, в сессию заносятся ник и пароль, которые если мы захотим мы затем можем проверить. Вообще в сессиях можно хранить всё что хочешь.
3) По поводу
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at W:\home\localhost\www\toorr2p\index.php:28) in W:\home\localhost\www\toorr2p\bloks\header.php on line 4


Функции session_start(), header() и многие другие которые передают что-то в заголовки страницы должны быть вызваны до любого вывода символов на страницу. Ведь сначала формируются заголовки, данные POST,GET переменных, другая информация сервера. А затем уже идёт вывод в браузер.
Поэтому если у тебя перед данными функция будет любой символ вне <?php ?>, а также любые функции печати echo(), printf() и др., это будет распознано как вывод в браузер информации, сразу же отсылаются все заголовки, и при вызове функции session_start() тебе выдаётся ошибка, что браузеру уже были отправлены заголовки и повторно их отправить уже не получится.
Вот к примеру у тебя:
<!-- Отосланы заголовки -->
<div id="logo">
....
<?php
session_start(); //пытаемся передать заголовкам инициализатор сессии
....
?>

Надеюсь понятным языком объяснил...

Поэтому все подобные функции надо писать в начале либо использовать буфферизованный вывод. Использую функции ob_start() и ob_end_flush(). Но учти что не правильное использование подобных функций приведёт к дольшей работе скрипта.


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
toorr2p
toorr2p
Topic Starter сообщение 13.5.2009, 1:38; Ответить: toorr2p
Сообщение #5


Ага понял, буду пробовать.
А по поводу предыдущего совета - это ведь делу не поможет да?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 13.5.2009, 15:27; Ответить: ZiTosS
Сообщение #6


Вячеслав, Ошибку то это уберёт, но работать всё равно не будет.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
toorr2p
toorr2p
Topic Starter сообщение 28.5.2009, 12:25; Ответить: toorr2p
Сообщение #7


Все заработало! Спасибо!

вот переписал скрипт и все стало на свои места :lol:

<?php
session_start();
$host_db = "localhost"; // имя хоста
$user_db = "toorr2p"; // юзер(привилегии)
$pass_db = "hottabuch"; // пароль юзера
$db_db = "toorr2p"; // база данных
$link = mysql_connect($host_db, $user_db, $pass_db) or die("Не возможно подключиться к базе данных");
mysql_select_db($db_db, $link) or die("Не могу выбрать базу данных");
if(isset($_POST['do'])){
$login = $_POST['login'];
$password = md5($_POST['password']);
$result_s = mysql_query("SELECT * FROM userlist WHERE login='{$login}' AND password='{$password}'");
if(mysql_num_rows($result_s) == 1) {
$user = mysql_fetch_array($result_s);
if($user['login'] == $login && $user['password'] == $password) {
$_SESSION['login'] = $user['login'];
$_SESSION['password'] = $user['password'];

} else {
header("Location: ".$_SERVER['REQUEST_URI']);
exit;
}
} else {
header("Location: index.php?page=author&error");
exit;
}
mysql_close($link);
/*Функция хранит в себе все данные которые пришли в файл из адресной строки*/
header("Location: ".$_SERVER['REQUEST_URI']);
}
if (isset($_GET['exit']))
{
session_unset();
}

?>


У меня почему-то не работала вот эта строчка ;) :

$login = mysql_escape_string($_POST['login']);


исправил на :
$login = $_POST['login'];
и все заработало!

Да и еще вот с помощью этой фу-ии
$_SERVER['REQUEST_URI']
после того как пользователь ввел в форму авторизации данные и нажал на кнопку войти скрипт возвращает его именно на ту страницу на которой он начал авторизовыватся(очюудобно!),т.е эта функция хранит в себе весь массив данных полученных через адресную строку...


Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыБыстрый и качественный обмен на сайте Baksman.org
Обмен Bitcoin, BTC-e, PM, Qiwi, Yandex money, Карты банк
52 Baksman 33586 Вчера, 5:02
автор: Baksman
Открытая тема (нет новых ответов) Арбитражники, как ведете учет расходов и доходов?
11 Boymaster 1803 17.4.2024, 23:35
автор: Boymaster
Открытая тема (нет новых ответов) Боты могут делать пушподписки на моём сайте?
0 Megaspryt 447 17.4.2024, 23:29
автор: Megaspryt
Горячая тема (нет новых ответов) Как вывести деньги в Украине с заблокированного Юмани ?
29 freeax 4811 17.4.2024, 1:19
автор: sergio11
Горячая тема (нет новых ответов) CryptoCloud — прием USDT, BTC, ETH, LTC на любом сайте
36 CryptoCLoud 10638 16.4.2024, 16:02
автор: CryptoCLoud


 



RSS Текстовая версия Сейчас: 19.4.2024, 19:07
Дизайн