|
|
|
| Добрый вечер... Я неоднократно спрашивал у вас насчёт этого скрипта...
Хотел попросить вас о помощи.
Как проверять на каждой странице авторизован ли юзер или нет(получается проверить сессии)
<?
session_start();
//если нажали кнопку
if ($_POST[sub])
{
require_once("config.php");
//проверяем данные на sql-inj
$login = mysql_escape_string($_POST['login']);
$passw = mysql_escape_string($_POST['passw']);
$result = mysql_query("select * from users where login='$login'");
$data = mysql_fetch_assoc($result);
if (mysql_num_rows($result)>0)
{
if ($data['passw'] == $passw)
{
//устанавливаем sessie
$_SESSION['login'] = $data['login'];
$_SESSION['passw'] = $data['passw'];
//сессии установлены, авторизация пройдена
echo "<head><meta http-equiv='refresh' content='1;url=login.php'></head>";
}
else echo "Не правильный пароль";
}
}
//если сессия заполнена
if ( (isset($_SESSION['login'])) && (isset($_SESSION['passw'])) )
{
require_once("config.php");
//находим в БД пользователя удовлетворяющего сессиям
$result = mysql_query("select * from users where login='".$_SESSION['login']."' AND passw='".$_SESSION['passw']."'");
//если такой пользователь существует
if (mysql_num_rows($result) == 1)
{
$data = mysql_fetch_assoc($result);
}
//если в БД нету такого пользователя то обнуляем кукисы и переходи к авторизации
else
{
echo "Пожалуйста, авторизуйтесь!";
unset($_SESSION['login']);
unset($_SESSION['passw']);
echo "<head><meta http-equiv='refresh' content='1;url=login.php'></head>";
}
}
else
echo "<form method='post'>
<table rules='all'>
<tr><td colspan='2' align='center'><b>Авторизация</b></td></tr>
<tr><td>Ваш логин</td><td><input type='text' name='login'></td></tr>
<tr><td>Ваш пароль</td><td><input type='password' name='passw'></td></tr>
<tr><td colspan='2' align='center'><input type='submit' name='sub' value='Отправить'></td></tr>
</table>
</form>";
?>
|
Поястню, авторизация проходит на отдельной странице login.php
И если пользователь аторизован, то автоматически переводить его на index.php.
Если он не авторизован, то пересылать на login.php
что мне нужно дописать или удалить из этого кода, и что добавлять на каждой, требуемой авторизации, странице?
помогите пожалуйста... очень надо | |
|
|
|
|
|
|
|
для: frisst
(06.01.2010 в 18:33)
| | В общем случае скрипт будет работать неправильно из-за этой вот строки
$passw = mysql_escape_string($_POST['passw']);
она - понятное дело - лишняя.
Все упоминания $_SESSION['passw'] следует убрать - они Вам не нужны.
Грубую проверку на то, что пользователь авторизован можно выполнить оператором
if(isset($_SESSION['login'])) ... | |
|
|
|
|
|
|
|
для: Trianon
(06.01.2010 в 18:40)
| | Извините, просто я новичок в PHP...
Почему она лишняя?
Вы можете мне помоч с редактированием кода?
У меня ник как не получается! :( | |
|
|
|
|
|
|
|
для: frisst
(06.01.2010 в 20:50)
| | А зачем вообще mysql_escape_string? Что это? http://php.net/manual/en/function.mysql-escape-string.php
И в $_SESSION пиши id, а не логин с паролем. Сейчас дырка тут ещё есть:
<?php
$result = mysql_query("select * from users where login='".$_SESSION['login']."' AND passw='".$_SESSION['passw']."'");
|
потому как $_SESSION['login'] и $_SESSION['passw'] — "чистые". | |
|
|
|
|
|
|
|
для: Fractured#
(06.01.2010 в 20:56)
| | Нет, они не чистые... Выше была уже проведена установка сессий.
//устанавливаем sessie
$_SESSION['login'] = $data['login'];
$_SESSION['passw'] = $data['passw'];
|
| |
|
|
|
|
|
|
|
для: frisst
(06.01.2010 в 21:13)
| | Не чистые - в смысле экранированные?
где ж они экранированные, когда взяты из результата SQL-запроса? | |
|
|
|
|
|
|
|
для: Trianon
(06.01.2010 в 21:15)
| | Я чегот уже совсем запутался...
Просто я плохо соображаю пока в php...
Вы можете мне помочь в исправлении ошибок и в решении моего вопроса? | |
|
|
|
|
|
|
|
для: Trianon
(06.01.2010 в 21:15)
| | а если перед внесением в бд? | |
|
|
|
|
|
|
|
для: ride
(06.01.2010 в 23:43)
| | никакой разницы.
Никакой зависимости от. | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2010 в 00:20)
| | >>потому как $_SESSION['login'] и $_SESSION['passw'] — "чистые".
если перед внесением в бд данные экранировать, как же они будут чистыми?
и вообще, в чем смысл второго запроса? | |
|
|
|
|
|
|
|
для: ride
(07.01.2010 в 00:41)
| | данные не экранируют.
Данные окружают кавычками. Экранирование - вынужденная мера.
Как Вы представляете себе занесение текста в БД, если его не брать в кавычки?
Каким образом кавычки не попадают вместе с текстом в БД?
Почему текст извлекается очищенным от кавычек?
Если текст извлекается чистым, зачем в нем оставлять экранирующие слэши?
Кому они будут полезны? | |
|
|
|
|
|
|
|
для: frisst
(06.01.2010 в 21:13)
| | "Чистые" в том смысле, что не экранированы управляющие символы | |
|
|
|
|
|
|
|
для: Fractured#
(06.01.2010 в 21:18)
| | если я не ошибаюсь, то перед кавычками нужно поставить / ?
и все кавычки нужно экранировать? или только $_SESSION['login'] и $_SESSION['passw']? | |
|
|
|
|
|
|
|
|
для: Fractured#
(06.01.2010 в 21:27)
| | Спасибо канечно за информацию, сейчас буду исправлять, но мой вопрос остался так и нерешённым!... | |
|
|
|
|
|
|
|
для: frisst
(06.01.2010 в 21:32)
| | [поправлено модератором] | |
|
|
|
|
|
|
|
для: Fractured#
(06.01.2010 в 21:43)
| | а переписывать я и не просил...
просто просил немного объястнить... :(((
.... | |
|
|
|
|
|
|
|
для: frisst
(06.01.2010 в 21:44)
| | [поправлено модератором] | |
|
|
|
|
|
|
|
для: Fractured#
(06.01.2010 в 21:45)
| | Поверь не буду.
может ты и профи в php, но у меня другое увлечение в котором я тебя опережаю на все 100%! или ты хочешь поспорить насчёт этого? | |
|
|
|
|
|
|
|
для: frisst
(06.01.2010 в 21:48)
| | [поправлено модератором] | |
|
|
|
|
|
|
|
для: Fractured#
(06.01.2010 в 21:52)
| | А тут ни кто и не ныл...
Я УЧУСЬ, а не сливаю деньги!...
А если ВЫ не хотите помогать, то могли бы и вовсе не писать ни одного сообщения...
____
Разжовывать "предмет"(хоть этому в школе не учат, это не наука и не предмет) я вас умолять не собираюсь...
Не посчитайте за оскорбление, но вы его не потяните, кому это не дано, и за 10 лет учений не дастся!... | |
|
|
|
|
|
|
|
для: frisst
(06.01.2010 в 20:50)
| | >Почему она лишняя?
Она лишняя потому, что сразу за вызовом этой функции не следует взятие возвращенного ей значения в кавычки.
Заметьте, что login после обработки mysqlescapestring() тут же берется в кавычки, а passwd - нет.
Это как обои клеем намазать, а к стене не приложить. Клей окажется лишним. Обои будут испорчены. | |
|
|
|
|
|
|
|
для: Trianon
(06.01.2010 в 22:07)
| | Trianon>>> Ааа... Всё... Спасибо вам огромное, теперь я понял! )
_________________________________________________________
Fractured# >>> не перевелись всё-таки на форуме хорошие люди!..
А вы можете кататься дальше и говорить что угодно!... может вы и пошли сюда ради халявы, а я за помощью! :) | |
|
|
|