2013-08-10 3 views
0

Я хотел бы получить, кроме имени пользователя и идентификатора пользователя на странице. О том, что я создал две php-страницы. Также моя база данных состоит из 3 столбцов userid, имени пользователя, пароля. Страница login.php являетсяКак я могу отображать идентификатор пользователя в сеансах?

<?php 
session_start(); 
//@$userid = $_GET['userid']; 
@$username = $_POST['username']; 
@$password = $_POST['pass']; 

if(@$_POST['Submit']){ 
if($username&&$password) 
{ 
$connect = mysql_connect("localhost","*****","") or die("Cannot Connect"); 
mysql_select_db("project") or die("Cannot find the database"); 

$query = mysql_query("SELECT * FROM users WHERE username='$username'"); 
//$query = mysql_query("SELECT * FROM users WHERE userid='$userid' and username='$username'"); 
$numrows = mysql_num_rows($query); 
if($numrows!=0) 
{ 
    while ($row = mysql_fetch_assoc($query)) 
    //while ($row = mysql_fetch_array($query)) 
    { 
     $dbuserid = $row['userid']; 
     $dbusername = $row['username']; 
     $dbpassword = $row['password']; 
    } 
    if($username==$dbusername&&$password==$dbpassword) 
    { 
     echo "You are login!!!!! Continue now with the survey <a href='mainpage.php'>here</a>"; 
     $_SESSION['username']=$username; 
     $_SESSION['userid']=$userid; 
    } 
    else 
    { 
     echo "<b>Incorrect Password!!!!</b>"; 
    } 
} 
else 
    //die("That user does not exist"); 
    echo "<b>That user does not exist</b>"; 
} 
else 
echo "<b>You must enter a username and a password</b>"; 
} 
?> 
<!--<!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> 
<!--<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />--> 
<title>Login Page</title> 
<style type="text/css"> 
h2 {letter-spacing: 10px; font-size: .2in; background-color: #33CC00; color: #000000; text-transform:uppercase; width:260px} 
span {color: #FF00CC} 
legend {font-variant: small-caps; font-weight: bold} 
fieldset {width: 260px; height: 100px; font-family: "Times New Roman", Times, serif; background-color: #CCCCCC; color: #000000} 
label {display:block;} 
.placeButtons {position: relative; left: 0px; width: 70px; margin: 5px; 0px;} 
</style> 
</head> 

<body background="images/good.jpg"> 

<h2>Login Page</h2> 
<form name="loginform" method='POST'> 

<fieldset> 
<legend>Form</legend> 
    <label>Username: <input type="text" name="username"/><span>*</span></label><br/> 
    <label>Password: <input type="password" name="pass"/><span>*</span></label> 
    <input class="placeButtons" type="reset" value='Reset'/> 
    <input class="placeButtons" type="submit" name="Submit" value='Login'/> 
    <a href='registration.php'>Register</a> 
</fieldset><br> 
<a href='firstpage.php'><-- Go Back</a> 
</form> 
</body> 
</html> 

и страница, которая является страницей приветствия пользователя

<?php 
session_start(); 

if ($_SESSION['username']) 
{ 
//echo "Welcome, ".$_SESSION['username']."! <a href='logout.php'>Logout</a>"; 
echo "Welcome, ".$_SESSION['username']."<br>".$_SESSION['userid']. "<a href='logout.php'>Logout</a>"; 

} 
else 
die("You must be logged in!!"); 
?> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<!--<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />--> 
<title></title> 

</head> 
<body background="images/good.jpg"> 
</body> 
</html> 

Проблема заключается в том, что на странице приветствия он показывает мне только имя пользователя и не идент. Что мне не хватает? Кроме того, я знаю, что моя страница входа не самая лучшая и является типичным примером атаки SQL-инъекций. Я должен его улучшить.

+0

3 таблицы ИЛИ 3 столбца? – Ankit

ответ

0

Быстрая вещь, которую я заметил. Это может быть проблемой. Значение $_SESSION['userid'] получает значение от $userid, которое не установлено. Также использование @ для подавления вашей ошибки не является хорошей практикой. используйте isset, чтобы проверить, установлена ​​ли переменная и продолжена.

$_SESSION['userid'] = $userid; //where are you getting $userid from? 

Это должно быть

$_SESSION['userid'] = $dbuserid; 

Кроме того, вместо того, чтобы использовать заявление как

if ($_SESSION['username']) 

первой проверки, если переменная установлена ​​как этот

if (isset($_SESSION['username'])){ 
//now continue your work 
} 
+0

oooops !!!! Вы правы .... – dali1985

0

и убедитесь, что вы используйте ini_set ('session_save_path' , 'new_dir') или функцию session_save_path, когда вы находитесь на общем веб-хосте. сеансы, которые находятся в одном каталоге с разных веб-сайтов, подвержены краже/snooping/изменению сеанса.

Я проверил PHP исходный код PHP не отслеживает какой сессии идентификаторы сделаны с сайта (HOST), что, почему эта атака работает, если атакующий имеет учетную запись на этом веб-хостинг

Так что никогда не ставится много доверия к массиву SESSION, потому что вы считаете, что это безопасно, потому что он создан сервером Это не так, если вы не делаете контрмеры ...

Смежные вопросы