#php #login #membership
#php #аутентификация #членство
Вопрос:
Мы пытаемся создать страницу входа в систему для членства.
Это мой код.
main_login
<!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>Untitled Page</title>
</head>
<body>
<form name="form1" method="post" action="checklogin.php">
<table style="width:300px;border:0;text-align:center;background-color:#CCCCCC">
<tr>
<td>
<table style="width:100%;background-color:#FFFFFF;border:0;">
<tr>
<td colspan="3"><strong>Member Login </strong></td>
</tr>
<tr>
<td style="width:78px">Username</td>
<td style="width:6px">:</td>
<td style="width:294px"><input name="myusername" type="text" id="myusername"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="mypassword" type="text" id="mypassword"></td>
</tr>
<tr>
<td>amp;nbsp;</td>
<td>amp;nbsp;</td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
checkLogin.php
<?php
$dbhost = 'localhost';
$dbuser = 'myuse';
$dbpass = 'myPassword';
$dbname = 'myDbName';
// This is an example opendb.php
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname);
// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM myTable WHERE username='$myusername' and password='$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 "login_success.php"
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $mypassword;
$_SESSION['LoggedIn'] = 1;
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
?>
login_success.php
<?php
session_start();
if(!empty($_SESSION['Username']))
{ }
else
{header("location:main_login.php");}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
// Check if session is not registered , redirect back to main page. // Put this
code in first line of web page.
<html>
<body>
Login Successful
</body>
</html>
Я пытаюсь сделать login_success.php доступна для просмотра только для участников, но я перенаправляюсь только на main_login.php .
Я не думаю, что отправляю сеанс на login_success.php
Кто-нибудь может помочь? пожалуйста?
Спасибо.
Ответ №1:
Ну, самая большая (и единственная) проблема может заключаться в том, что при входе в систему вы устанавливаете эти ключи в свой массив $ _SESSION:
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $mypassword;
$_SESSION['LoggedIn'] = 1;
но затем вы проверяете другой:
$_SESSION['Username']
Комментарии:
1. Спасибо, не могу поверить, что я это пропустил. Достаточно ли это безопасно? Спасибо.
2. безопасность — это всегда интересный вопрос. сеанс php — это практически все, что у вас есть для поддержания чьего-либо статуса входа в систему. следует отметить одну вещь: если доступ к вашему сайту осуществляется через небезопасное соединение (не по протоколу ssl), имя пользователя / пароль отправляются на сервер обычным текстом. если злоумышленник сможет просмотреть этот контент (например, wireshark в starbucks), он может довольно легко получить несанкционированный доступ к вашему сайту. идея может заключаться в использовании SSL, если вы действительно беспокоитесь о безопасности (имеет больше возможностей, чем просто скрытие имени пользователя и пароля)
Ответ №2:
На своей checkLogin.php
странице вы сохраняете имя пользователя в $_SESSION['myusername']
и на своей login_success.php
странице вы проверяете, существует ли $_SESSION['Username']
оно. Измените один или другой, чтобы они оба были одинаковыми, и это должно решить вашу проблему.