<?php
$user = substr($_POST['nickname'], 0, 20);
$pass = substr($_POST['keyword'], 0, 20);
$newpass = substr(md5($pass), 0, 20);
if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/", $user)) $user = "";
if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/", $pass)) $pass = "";
if ($user!=""&&$pass!="") {
mysql_connect("localhost", "root", "") or die("could not connect");
mysql_select_db("all_users_db");
$result = mysql_query("SELECT nickname FROM user_table WHERE nickname = '".$user."'");
if (mysql_num_rows($result) > 0) {
$query = "select * from user_table";
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
$username = $row["nickname"];
$password = $row["keyword"];
$number = $row["userID"];
}
if ($username==$user&&$password==$newpass) {
ini_set("session.use_trans_sid", true);
session_start();
$_SESSION[] = "$user";
$_SESSION[] = "$newpass";
$_SESSION[] = "$number";
header("Location: /content/index.php");
}
else {
header("Location: /entry.php?result=1");
exit;
}
}
else {
header("Location: /entry.php?result=2");
exit;
}
}
else {
header("Location: /entry.php?result=1");
exit;
}
?>
Проблема авторизации
Проблема в следующем: когда пользователь регистрируется, пароль шифруется в md5, когда авторизуется, пароль тоже шифруется в md5, сравнивается, НО пароли отличаются!
К примеру, при регистрации пароль ASDF выглядит так: 912ec803b2ce49e4a541, а тот же пароль при авторизации выглядит уже вот так: 912ec803b2ce49e4a541[COLOR="Red"]068d495ab570[/COLOR]!!! В чём проблема, обьясните, пожалуйста и по возможности напишите правильный скрипт для авторизации (буду очень признателен) :(
Мне видится, что это то, что записывается в базу данных. Поэтому очевидно, что проблема в размере поля для хранения пароля. Скорее всего там стоит varchar(20)
Согласне с mfender: очевидно в первый раз хеш md5 не весь записывается в БД, так как размер поля замал. Следовательно надо дать размер побольше(к примеру varchar(40)) обеим полям.
СПАСИБО БОЛЬШОЕ
1) существует файл index.php, который ссылается на форму входа - entry.php;
2) entry.php в свою очередь задействует скрипт authorize.php;
3) скрипт проверяет введёные данные, сверяется с базой данных, начинает сессию и отправляет пользователя на content/index.php
вот листинг authorize.php:
Код:
при открытии content/index.php проверяем существование $_SESSION, если её нет - пинаем на entry, если она есть - другие действия ... проблема в том, что $_SESSION нет ... ЧТО ИСПРАВИТЬ??? ПОДСКАЖИТЕ, ПОЖАЛУЙСТА!!! :o уже шестой час бъюсь на проблемой!!!
Конфиг php.ini:
session.save_handler = files
session.save_path = /tmp
session.use_cookies = 1
;session.cookie_secure =
; session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
чую при инициализации сессии ошибка, но в чём именно и где - не могу понять ...
забейте, всё это useless
Цитата: ex-em
session.save_path = /tmp
А у тебя есть права на запись в /tmp? И вообще, такая папка есть?
Да, вопрос странный, но если сервер под win, то проблема может быть именно в этом.
Session ID is not passed with Location header even if session.use_trans_sid is enabled. It must by passed manually using SID constant.
хотя у тебя в конфиге написано, что сессия использует куку, но всё равно попробуй добавить SID к location..
ну и проверь не выводится ли чего до сессии... включи все ошибки... и ob_start() вначале попробуй))
Цитата: Валериус
А у тебя есть права на запись в /tmp? И вообще, такая папка есть?
Да, вопрос странный, но если сервер под win, то проблема может быть именно в этом.
Да, вопрос странный, но если сервер под win, то проблема может быть именно в этом.
Я Денвер последний использую, копался на их форуме, нашёл проблему идентичную моей! причина была - отсутствие папки tmp. Папку такую создал, но сессии туда не пишутся - почему я не знаю! он пишутся в H:\Web\tmp ...
Цитата: Mr.Hacker
там в мане на функцию header есть добавочка
Session ID is not passed with Location header even if session.use_trans_sid is enabled. It must by passed manually using SID constant.
хотя у тебя в конфиге написано, что сессия использует куку, но всё равно попробуй добавить SID к location..
ну и проверь не выводится ли чего до сессии... включи все ошибки... и ob_start() вначале попробуй))
Session ID is not passed with Location header even if session.use_trans_sid is enabled. It must by passed manually using SID constant.
хотя у тебя в конфиге написано, что сессия использует куку, но всё равно попробуй добавить SID к location..
ну и проверь не выводится ли чего до сессии... включи все ошибки... и ob_start() вначале попробуй))
спасибо, попробую обязательно!