#php #session #redirect #login
#php #сессия #перенаправление #аутентификация
Вопрос:
Я использовал следующий скрипт из about.com:http://php.about.com/od/finishedphp1/ss/php_login_code_2.htm
Проблема в том, что несколько раз это выдает мне эту ошибку: страница перенаправляется неправильно. Firefox обнаружил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится. Код:
<?php
session_start();
// Process the POST variables
$username = $_SESSION["user_name"];
//$password = $_POST["password"];
// Set up the session variables
$_SESSION["user_name"] = $username;
$ugh = $_REQUEST['url_name'];
if($_POST){
$_SESSION['user_name']=$_POST["user_name"];
$_SESSION['password']=$_POST["password"];
}
$secret = $info['password'];
//Checks if there is a login cookie
if(isset($_COOKIE['ID_my_site']))
//if there is, it logs you in and directes you to the members page
{
$username = $_COOKIE['ID_my_site'];
$pass = $_COOKIE['Key_my_site'];
$check = mysql_query("SELECT user_name, password
FROM users WHERE user_name = '$username'
and url_name='$ugh'")or die(mysql_error());
while($info = mysql_fetch_array( $check ))
{
if (@ $info['password'] != $pass)
{
}
else
{
header("Location: home.php");
}
}
}
//if the login form is submitted
if (isset($_POST['submit'])) { // if form has been submitted
// makes sure they filled it in
if(!$_POST['user_name'] | !$_POST['password']) {
die('You did not fill in a required field.');
}
// checks it against the database
if (!get_magic_quotes_gpc()) {
$_POST['user_name'] = addslashes($_POST['user_name']);
}
$check = mysql_query("SELECT user_name,password
FROM users WHERE user_name = '".$_POST['user_name']."'
and url_name='".$ugh."'")or die(mysql_error());
//Gives error if user dosen't exist
$check2 = mysql_num_rows($check);
if ($check2 == 0) {
die('That user does not exist in our database.
<a href=add.php>Click Here to Register</a>');
}
while($info = mysql_fetch_array( $check ))
{
$_POST['password'] = md5($_POST['password']);
$_POST['password'] = $_POST['password'];
//gives error if the password is wrong
if (@ $_POST['password'] != $info['password']) {
die('Incorrect password, please try again');
}
else
{
// if login is ok then we add a cookie
$_POST['user_name'] = stripslashes($_POST['user_name']);
$hour = time() 3600;
setcookie(ID_my_site, $_POST['user_name'], $hour);
setcookie(Key_my_site, $_POST['password'], $hour);
//then redirect them to the members area
header("Location: home.php");
}
}
}
else
{
// if they are not logged in
?>
2-й код:
Затем на каждой странице участника я использую следующее, чтобы убедиться, что их логин правильный:
// Process the POST variables
$email = $_SESSION["user_name"];
// Set up the session variables
$_SESSION["user_name"] = $username;
if(!isset($_SESSION['user_name'])) { header("Location: log.php");}
Ответ №1:
Перефразируя Blowski:http://kb.mozillazine.org/The_page_is_not_redirecting_properly
Похоже, что firefox достиг максимальной глубины рекурсии: он обнаружил кажущийся бесконечным цикл перенаправлений
Ответ №2:
Как называются файлы в приведенных выше сценариях? Если имя первого скрипта равно home.php затем, когда пользователь посещает home.php если пароль неверен, он будет продолжать перезагружаться, поэтому Firefox вернет это сообщение.
В качестве альтернативы, есть ли у вас что-нибудь в вашем .htaccess, что является причиной этого?
Комментарии:
1. первое ограничение — это log.php . htaccess имеет файл, который принимает входящее имя пользователя для отображения страницы, так что представьте blowski.domain.com ..
2. @KPO Хм, ты можешь также опубликовать содержимое своего файла .htaccess? Это часто является причиной ошибочных перенаправлений.
3. @KPO У меня возникают реальные проблемы при попытке отладить код, потому что есть довольно много битов, которые, похоже, используют глобальные переменные (или на самом деле являются ошибками). например, строка 25:
$secret = $info['password'];
Моим предложением было бы заставить его работать с одним URL, удалив .htaccess. Затем, когда вы знаете, что это работает с PHP, установите статическую версию, работающую с .htaccess. Затем объедините две. Еще лучше — попробуйте разбить это на несколько функций, чтобы вы могли тестировать каждый бит кода отдельно, а не как один большой блок.4. @blowski спасибо. Есть ли другой скрипт, который я могу использовать. Я слишком новичок, чтобы вносить изменения. Спасибо.
5. @KPO Ознакомьтесь также с некоторыми фреймворками — CodeIgniter, Symfony, CakePHP, Yii — все это PHP-фреймворки с надежными системами аутентификации, которые в основном являются «подключи и играй». Лично я, даже если вы заплатите кому-то, попросил бы их внедрить фреймворк вместо того, чтобы начинать с нуля.