Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Авторизация на сайте. Как сделать?

#1 Вячеслав

Вячеслав
  • Пользователь
  • 357 сообщений
  • Репутация: 0
0

Отправлено 11 Май 2009 - 21:42

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

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

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Как сделать авторизацию на сайте?
  2. Скрипт авторизации на сайте php+mysql
  3. Странные автоматические попытки авторизации на сайте
  4. Как сделать одностраничный сайт?
  5. Проблема с регистрацией и авторизацией на сайте под управлением Joomla 3.4

#2 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 12 Май 2009 - 00:26

Я переделал структуру файлов - теперь у меня в 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оздал пользователя - это правильно?
  • 0

#3 shtil

shtil
  • Пользователь
  • 50 сообщений
  • Репутация: 0

Отправлено 12 Май 2009 - 07:27

поставь сабаку перед сессией т.е. в коде у тебя должно быть так:
@session_start();

  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Май 2009 - 18:09

Вячеслав,
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

#5 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 13 Май 2009 - 00:38

Ага понял, буду пробовать.
А по поводу предыдущего совета - это ведь делу не поможет да?
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 13 Май 2009 - 14:27

Вячеслав, Ошибку то это уберёт, но работать всё равно не будет.
  • 0

#7 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 28 Май 2009 - 11:25

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

вот переписал скрипт и все стало на свои места :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']
после того как пользователь ввел в форму авторизации данные и нажал на кнопку войти скрипт возвращает его именно на ту страницу на которой он начал авторизовыватся(очюудобно!),т.е эта функция хранит в себе весь массив данных полученных через адресную строку...
  • 0


Оформление форума – IPBSkins.ru