Не работает вход с PHP — пользователь по-прежнему видит форму входа на защищенных страницах после входа в систему

#php #forms #login

#php #формы #аутентификация

Вопрос:

—— РЕШАЕМАЯ —— Привет всем, теперь я решил эту проблему, и причиной этой проблемы была моя неопытность и попытка быть умным, как вы также можете видеть из комментариев ниже, проблема была в моем файле .htaccess. Я поставил RewriteRule ^admin adminlogin.php , так что это меняло любую страницу, содержащую администратора, обратно на adminlogin.php

——ОРИГИНАЛЬНЫЙ ВОПРОС —— Я пытаюсь заставить простой скрипт входа работать на веб-сайте. Она закодирована на php и выглядит следующим образом:

adminlogin:

 <div class="login">
<form name="form1" method="post" action="checklogin.php">
<table width="379px" border="0px" cellpadding="3px" cellspacing="1px">
<tr>
<td colspan="3"><strong>Admin Login</strong></td>
</tr>
<tr>
<td width="78px">Username</td>
<td width="6px">:</td>
<td width="294px"><input name="myusername" type="text"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="mypassword" type="password"></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</td>
</form>
</tr>
</table>
</div>
  

checklogin.php:

 <?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name="Logins"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die(mysql_error());

// username and password sent from form 
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM `$tbl_name` WHERE UN='$myusername' and PWD=md5('$mypassword')";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file “adminloginsuccess.php"
session_start();
$_SESSION['user'] = $myusername;
header('location:adminhome.php');
}
else {
header('location:adminloginretry.php');
}
?>
  

adminhome.php:

 <?php $thisPage="Admin Home";
session_start();
if(!(isset($_SESSION['user']) amp;amp; $_SESSION['user'] != '')) {
header("location:adminlogin.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php include($_SERVER['DOCUMENT_ROOT'].'/includes/meta.php'); ?>
</head>
<body>
<div id="wrapper">
<div id="container">
<div id="header">
<?php include($_SERVER['DOCUMENT_ROOT'].'/includes/header.php'); ?>
<div id="links">
<?php include($_SERVER['DOCUMENT_ROOT'].'/includes/links.php'); ?>
</div><!--close links-->
</div><!--close header-->
<div id="sidebar">
<?php include($_SERVER['DOCUMENT_ROOT'].'/includes/sidebarimage.php'); ?>
</div><!--close sidebar-->
<div id="content">
<?php include($_SERVER['DOCUMENT_ROOT'].'/includes/adminhomecontent.php'); ?>
</div><!--close content-->
<div id="extra" align="center">
<?php include($_SERVER['DOCUMENT_ROOT'].'/includes/fblb.php'); ?>
</div><!--close extra-->
<div id="footer">
<?php include($_SERVER['DOCUMENT_ROOT'].'/includes/footer.php'); ?>
</div><!--close footer-->
</div><!--close container-->
</div><!--close wrapper-->
</body>
</html>
  

adminhomecontent.php:

 You Have Successfully Logged In.<br>
<a href="logout.php">Log Out </a>
  

Теперь по какой-то причине, когда я захожу и вхожу в систему, я перенаправляюсь, и в адресной строке написано www.gemma-hyde-fashion-sketches.co.cc/adminhome.php но все еще показывает форму входа, и если я просматриваю источник, я вижу источник для adminlogin.php.

Я новичок в PHP, кто-нибудь может помочь, я нашел этот код в Интернете, поэтому постарался понять его как можно полнее

——РЕДАКТИРОВАТЬ—— Я создал вход для пользователей stackoverflow. Если вы перейдете к www.gemma-hyde-fashion-sketches.co.cc/adminlogin.php и используйте имя пользователя stackoverflow и пароль stackoverflow, вы должны увидеть те же результаты, которые получаю я (в любом случае, в области администрирования на данный момент ничего нет)

——РЕДАКТИРОВАТЬ ДЛЯ JUDDA—— Да, я имею в виду, что если я вхожу в систему, в адресной строке отображается:http://www.gemma-hyde-fashion-sketches.co.cc/adminhome.php это то, на что я ожидал быть перенаправленным. Однако, если я щелкаю правой кнопкой мыши и просматриваю исходный код, я вижу

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>Gemma Hyde Fashion Sketches | Admin Login</title> 
<meta name="title" content="Gemma Hyde Fashion Sketches | Admin Login" /> 
<meta name="keywords" content="Admin Login,  gemma hyde fashion sketches, fashion, fashion design, fashion sketches, fashion design sketches, clothes design sketches" /> 
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  

что совпадает с тем, что adminlogin.php страница будет отображаться, это заставляет меня думать, что этот раздел вверху adminhome.php:

 session_start();
if(!(isset($_SESSION['user']) amp;amp; $_SESSION['user'] != '')) {
header("location:adminlogin.php");
}
  

Просто перенаправляет, потому что не может определить, что он вошел в систему.

Это проясняет ситуацию?

Комментарии:

1. Почему вы заключаете свои переменные в кавычки? "$host" etc должен быть $host

2. @ThiefMaster Я не знаю, как упоминалось, я новичок в PHP, и этот код был взят из онлайн-руководства.

3. Я только что проверил загруженный сайт, используя учетную запись stackoverflow. Можете ли вы попытаться упростить adminhome (урезанный). Возможно, поэтому он содержит только <p> logged in</p> . Таким образом, мы просто устраняем ваши включения как часть проблемы

4. @boug Я сделал это для вас, но, похоже, он все еще перенаправляет на adminlogin.php несмотря на то, что адресная строка все еще отображается adminhome.php

5. попробуйте перейти к gemma-hyde-fashion-sketches.co.cc/adminhome.php напрямую, без входа в систему. вы увидите, что она показывает страницу входа. Это может быть случай ошибочных файлов. Убедитесь, что adminlogin.php содержит правильный код, а не просто копию страницы входа.

Ответ №1:

Мне кажется, что PHP не запущен в файле, если вы можете увидеть фактический PHP для него (что я понимаю из заявления «и если я просматриваю источник, я вижу источник для adminlogin.php «). Работают ли другие страницы PHP (т.Е. <?php phpinfo();?> )?

Комментарии:

1. извините, php запущен, я имею в виду, что я вижу сгенерированный вывод, поэтому я могу видеть заголовок страницы и т.д., Который Автоматически генерируется из meta.php файл

2. Не могли бы вы немного подробнее объяснить цитату, которую я от вас сделал, потому что я думаю, что я что-то упускаю.

Ответ №2:

Если вы подозреваете, что сеанс не установлен, проверьте, что в adminhome.php

Измените этот код

 Session_start();
if(!(isset($_SESSION['user']) amp;amp; $_SESSION['user'] != '')) {
header("location:adminlogin.php");
  

к этому

 Session_start();
 exit(var_dump($_SESSION));
  

Ответ №3:

Теперь я решил эту проблему, и причиной этой проблемы была моя неопытность и попытка быть умным, как вы также можете видеть из комментариев ниже, проблема была в моем файле .htaccess. Я поставил RewriteRule ^admin adminlogin.php , так что это меняло любую страницу, содержащую администратора, обратно на adminlogin.php