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

Форум PHP

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

 

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

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

тема: Проблема с авторизацией
 
 автор: Ruthless   (21.12.2006 в 13:33)   письмо автору
 
 

Господа подскажите пожалуйста, как избавиться от такого бага
имеем файл авторизации юзера:
Он вставлен в каждую страницу сайта по средствам require_once('auth.php');

<?
session_start
();
require_once(
'config.inc.php');

function 
auth_denied () {
          
header("WWW-Authenticate: Basic realm=\"$addr\""); 
          
header("HTTP/1.0 401 Unauthorized"); 
          print(
"Чтобы войти в пользовательскую часть сайта, надо ввести имя и пароль!"); 
          exit(); 
}
if (!
$_SESSION['auth_done']) {
     
$login substr(stripslashes(strip_tags(($PHP_AUTH_USER))),0,30);
     
$password substr(stripslashes(strip_tags(($PHP_AUTH_PW))),0,30);
       if (!
$login || !$passwordauth_denied();
       else {
            
$res mysql_query("SELECT * FROM users WHERE user_login='".mysql_escape_string($login)."' AND user_passwd='".mysql_escape_string($password)."' LIMIT 1");
          if (
mysql_num_rows($res)!=1auth_denied();
          
$_SESSION = array();
          
$_SESSION array_merge($_SESSION,mysql_fetch_assoc($res));
          
$_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR']; 
          
$_SESSION['auth_done'] = true
       }
} else {
     if (
$_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR']) auth_denied();
}
?>


так вот, он пускает в закрытую часть, но работает до тех пор пока не отработает следующая строка:


$rimelogin = mysql_query("SELECT * from users WHERE user_login = '$phone_login'") or die(mysql_error());
    while($rowlogin = mysql_fetch_array($rimelogin)) {
    extract($rowlogin);
}


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

   
 
 автор: AlexelA   (21.12.2006 в 14:09)   письмо автору
 
   для: Ruthless   (21.12.2006 в 13:33)
 

Было бы не плохо увидеть структуру таблицы MySQL,
из которой вы считываете данные о пользователе.

   
 
 автор: XPraptor   (21.12.2006 в 14:10)   письмо автору
 
   для: Ruthless   (21.12.2006 в 13:33)
 

Что за поля в таблице users, они могут совпасть с именами переменных или сессий при extract($rowlogin)?

   
 
 автор: Ruthless   (21.12.2006 в 17:32)   письмо автору
 
   для: XPraptor   (21.12.2006 в 14:10)
 

Структура следующая:

`user_id` int(11) NOT NULL auto_increment,
  `user_name`,
  `user_ip`,
  `user_login`,
  `user_passwd`,
  `user_rights`,
  `user_place`,
  `user_date_reg`,
  `user_last_visit`,
  `user_flag`,
  PRIMARY KEY  (`user_id`)


P.S. Но как эти переменные могут попасть в сессию? Ведь я их туда не загоняю :(

   
 
 автор: Ruthless   (22.12.2006 в 14:39)   письмо автору
 
   для: XPraptor   (21.12.2006 в 14:10)
 

Проблема решилась тем, что на сервере на директорию sessians стояли полные права 777, понизил права, все заработало. Спасибо всем.

   
Rambler's Top100
вверх

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