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

Форум MySQL

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

 

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

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

тема: проверка сессий
 
 автор: frisst   (06.01.2010 в 18:33)   письмо автору
 
 

Добрый вечер... Я неоднократно спрашивал у вас насчёт этого скрипта...
Хотел попросить вас о помощи.
Как проверять на каждой странице авторизован ли юзер или нет(получается проверить сессии)

<?
  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

что мне нужно дописать или удалить из этого кода, и что добавлять на каждой, требуемой авторизации, странице?
помогите пожалуйста... очень надо

  Ответить  
 
 автор: Trianon   (06.01.2010 в 18:40)   письмо автору
 
   для: frisst   (06.01.2010 в 18:33)
 

В общем случае скрипт будет работать неправильно из-за этой вот строки
$passw = mysql_escape_string($_POST['passw']);
она - понятное дело - лишняя.

Все упоминания $_SESSION['passw'] следует убрать - они Вам не нужны.

Грубую проверку на то, что пользователь авторизован можно выполнить оператором
if(isset($_SESSION['login'])) ...

  Ответить  
 
 автор: frisst   (06.01.2010 в 20:50)   письмо автору
 
   для: Trianon   (06.01.2010 в 18:40)
 

Извините, просто я новичок в PHP...
Почему она лишняя?
Вы можете мне помоч с редактированием кода?
У меня ник как не получается! :(

  Ответить  
 
 автор: Fractured#   (06.01.2010 в 20:56)   письмо автору
 
   для: 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'] — "чистые".

  Ответить  
 
 автор: frisst   (06.01.2010 в 21:13)   письмо автору
 
   для: Fractured#   (06.01.2010 в 20:56)
 

Нет, они не чистые... Выше была уже проведена установка сессий.

//устанавливаем sessie
        $_SESSION['login'] = $data['login'];
        $_SESSION['passw'] = $data['passw'];

  Ответить  
 
 автор: Trianon   (06.01.2010 в 21:15)   письмо автору
 
   для: frisst   (06.01.2010 в 21:13)
 

Не чистые - в смысле экранированные?
где ж они экранированные, когда взяты из результата SQL-запроса?

  Ответить  
 
 автор: frisst   (06.01.2010 в 21:19)   письмо автору
 
   для: Trianon   (06.01.2010 в 21:15)
 

Я чегот уже совсем запутался...
Просто я плохо соображаю пока в php...
Вы можете мне помочь в исправлении ошибок и в решении моего вопроса?

  Ответить  
 
 автор: ride   (06.01.2010 в 23:43)   письмо автору
 
   для: Trianon   (06.01.2010 в 21:15)
 

а если перед внесением в бд?

  Ответить  
 
 автор: Trianon   (07.01.2010 в 00:20)   письмо автору
 
   для: ride   (06.01.2010 в 23:43)
 

никакой разницы.
Никакой зависимости от.

  Ответить  
 
 автор: ride   (07.01.2010 в 00:41)   письмо автору
 
   для: Trianon   (07.01.2010 в 00:20)
 

>>потому как $_SESSION['login'] и $_SESSION['passw'] — "чистые".
если перед внесением в бд данные экранировать, как же они будут чистыми?
и вообще, в чем смысл второго запроса?

  Ответить  
 
 автор: Trianon   (07.01.2010 в 02:51)   письмо автору
 
   для: ride   (07.01.2010 в 00:41)
 

данные не экранируют.
Данные окружают кавычками. Экранирование - вынужденная мера.
Как Вы представляете себе занесение текста в БД, если его не брать в кавычки?
Каким образом кавычки не попадают вместе с текстом в БД?
Почему текст извлекается очищенным от кавычек?
Если текст извлекается чистым, зачем в нем оставлять экранирующие слэши?
Кому они будут полезны?

  Ответить  
 
 автор: Fractured#   (06.01.2010 в 21:18)   письмо автору
 
   для: frisst   (06.01.2010 в 21:13)
 

"Чистые" в том смысле, что не экранированы управляющие символы

  Ответить  
 
 автор: frisst   (06.01.2010 в 21:22)   письмо автору
 
   для: Fractured#   (06.01.2010 в 21:18)
 

если я не ошибаюсь, то перед кавычками нужно поставить / ?
и все кавычки нужно экранировать? или только $_SESSION['login'] и $_SESSION['passw']?

  Ответить  
 
 автор: Fractured#   (06.01.2010 в 21:27)   письмо автору
 
   для: frisst   (06.01.2010 в 21:22)
 

http://phpfaq.ru/slashes

  Ответить  
 
 автор: frisst   (06.01.2010 в 21:32)   письмо автору
 
   для: Fractured#   (06.01.2010 в 21:27)
 

Спасибо канечно за информацию, сейчас буду исправлять, но мой вопрос остался так и нерешённым!...

  Ответить  
 
 автор: Fractured#   (06.01.2010 в 21:43)   письмо автору
 
   для: frisst   (06.01.2010 в 21:32)
 

[поправлено модератором]

  Ответить  
 
 автор: frisst   (06.01.2010 в 21:44)   письмо автору
 
   для: Fractured#   (06.01.2010 в 21:43)
 

а переписывать я и не просил...
просто просил немного объястнить... :(((

....

  Ответить  
 
 автор: Fractured#   (06.01.2010 в 21:45)   письмо автору
 
   для: frisst   (06.01.2010 в 21:44)
 

[поправлено модератором]

  Ответить  
 
 автор: frisst   (06.01.2010 в 21:48)   письмо автору
 
   для: Fractured#   (06.01.2010 в 21:45)
 

Поверь не буду.
может ты и профи в php, но у меня другое увлечение в котором я тебя опережаю на все 100%! или ты хочешь поспорить насчёт этого?

  Ответить  
 
 автор: Fractured#   (06.01.2010 в 21:52)   письмо автору
 
   для: frisst   (06.01.2010 в 21:48)
 

[поправлено модератором]

  Ответить  
 
 автор: frisst   (06.01.2010 в 21:58)   письмо автору
 
   для: Fractured#   (06.01.2010 в 21:52)
 

А тут ни кто и не ныл...
Я УЧУСЬ, а не сливаю деньги!...

А если ВЫ не хотите помогать, то могли бы и вовсе не писать ни одного сообщения...
____
Разжовывать "предмет"(хоть этому в школе не учат, это не наука и не предмет) я вас умолять не собираюсь...
Не посчитайте за оскорбление, но вы его не потяните, кому это не дано, и за 10 лет учений не дастся!...

  Ответить  
 
 автор: Trianon   (06.01.2010 в 22:07)   письмо автору
 
   для: frisst   (06.01.2010 в 20:50)
 

>Почему она лишняя?
Она лишняя потому, что сразу за вызовом этой функции не следует взятие возвращенного ей значения в кавычки.

Заметьте, что login после обработки mysqlescapestring() тут же берется в кавычки, а passwd - нет.
Это как обои клеем намазать, а к стене не приложить. Клей окажется лишним. Обои будут испорчены.

  Ответить  
 
 автор: frisst   (06.01.2010 в 22:17)   письмо автору
 
   для: Trianon   (06.01.2010 в 22:07)
 

Trianon>>> Ааа... Всё... Спасибо вам огромное, теперь я понял! )

_________________________________________________________
Fractured# >>> не перевелись всё-таки на форуме хорошие люди!..
А вы можете кататься дальше и говорить что угодно!... может вы и пошли сюда ради халявы, а я за помощью! :)

  Ответить  
Rambler's Top100
вверх

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