Nasıl PHP / MySQL bir kullanıcının kimliğini doğrulamak mı?

6 Cevap php

So recently I learned how to properly add a username and password to a database. My database is usersys, and the table storing user information is called userdb. The table has two columns - username (primary), password.

Kayıt formu, büyük işler doğru veritabanına kullanıcıların girişini girer ve ayrıca kullanıcının adı veritabanında ya da değil zaten olup olmadığını görmek için denetler.

Bunu dedi kimse bana bir oturum açma komut dosyası oluşturmanıza yardımcı olabilir, ben soruyorum. Şimdiye kadar, bu ben ne var:

$username = $_POST['username'];
$password = $_POST['password'];
$displayname = $_POST['username'];
$displayname = strtolower($displayname);
$displayname = ucfirst($displayname);           
echo "Your username: " . $displayname . "<br />";

mysql_connect("localhost", "root", "******") or die(mysql_error());
echo "Connected to MySQL<br />";

mysql_select_db("usersys") or die(mysql_error());
echo "Connected to Database <br />";

$lcusername = strtolower($username);
$esclcusername = mysql_real_escape_string($lcusername);
$escpassword = mysql_real_escape_string($password);

$result = mysql_query("SELECT * FROM userdb WHERE username='$esclcusername' AND     password='$escpassword'") or die(mysql_error());
$row = mysql_fetch_array( $result );
$validateUser = $row['username'];
$validatePass = $row['password'];

POST veri sayfasında önceki günlükte değil. Ben bu script tabloyu (userdb) kontrol edin ve kullanıcı önceki formdan girilen kullanıcı adı için satır bulmak ve girilen şifre userdb tabloda, o satırda set kullanıcı adı şifresini eşleştiğini doğrulamak istiyorum.

Ben de arada bir tür girilen kullanıcı adı varsa, bu tablo bulunamazsa eğer girilen kullanıcı adı mevcut değil kullanıcı anlatmak için olup olmadığını kontrol etmek istiyorum.

6 Cevap

Sen oturumları kullanabilirsiniz. Oturumlar ayarlandığında o site üzerinden tarama ise, kullanıcı ile kalmak global değişkenler vardır.

PHP öğrenme beri, try out this tutorial resmi web sitesinde.

Kullanıcı adı ve şifre maç, bir oturum değişkeni ayarladığınızda Ama ne teoride yapardın olduğunu

$_SESSION["auth"] = true;
$_SESSION["user_id"] = $row["user_id"];

Ve sonra kullanıcı doğrulanmış olup olmadığını görmek için bir kontrol yapın.

(: Mutlaka iyi uygulama YASAL UYARI) bunu yapmanın tek bir yolu:

$result = mysql_query("SELECT id FROM userdb WHERE username='$esclcusername' AND  password='$escpassword'") or die(mysql_error());
$row = mysql_fetch_array( $result );
$id = (int)$row['id'];
if($id > 0) {
    //log in the user
    session_start();
    $_SESSION['userId'] = $id;
    $_SESSION['username'] = $displayname;
}

... Ve kimlik doğrulaması gerektiren sayfalarda:

session_start();
if(!isset($_SESSION['userId'])) {
    die('You need to be logged in!!!');
} else {
    echo 'Welcome ' . $_SESSION['username'];
}

PHP hakkında daha fazla okuyun sessions.

Ben her iki $_SESSION ve herhangi bir giriş POST ile MYSQL Çekler kullanmak ister. Bu bir kaç şey başlamanıza yardımcı olmalıdır.

$username = mysql_real_escape_string($_POST[username]);
$password = strip_tags($_POST[password]);
$password = sha1($password);

if(isset($username) && isset($password) && !empty($username) && !empty($password))
{
$sql = mysql_query("SELECT * FROM users_column WHERE username = '$username' AND password = '$password'");

//Check the number of users against database
//with the given criteria.  We're looking for 1 so 
//adding > 0 (greater than zero does the trick). 
$num_rows = mysql_num_rows($sql);
if($num_rows > 0){

//Lets grab and create a variable from the DB to register
//the user's session with.
$gid = mysql_query("SELECT * FROM users_column WHERE username = '$username' AND password = '$password'");
$row = mysql_fetch_assoc($gid);
$uid = $row[userid];

// This is where we register the session.
$_SESSION[valid_user] = $uid;

//Send the user to the member page.  The userid is what the 
//session include runs against.
header('Location: memberpage.php?userid='.$userid);
}

//If it doesn't check out -- throw an error.
else
{
echo 'Invalid Login Information';
}
}

NOT: session_start() ile sayfa dosyasını başlatmak ve session_start() ile belirten bir ayrı oturum kontrol içerir oluşturmak ve sonra ilerlemeler gerekir örneğin if($_SESSION[valid_user] != $userid) bir şeyler yapmak.

MySQL Belirtilen kullanıcı adı için parola retreive bir select deyimi kullanabilirsiniz. Eğer boş bir sonuç kümesi varsa, o zaman tabloda adı yok.

Birden fazla php sayfa kimlik doğrulaması için kullanıcı gerekiyorsa, o zaman bir seçim oturumları kullanarak (http://www.php.net/manual/en/function.session-start.php). Edilecek whould

Ayrıca, SQL enjeksiyon önlenmesi, yani güvenliği hakkında düşünmek gerektiğini düşünüyorum:

$variable = mysql_real_escape_string($_POST['variable'])

ve (hatalarını tedavi ve komut dosyası, kullanıcı dostu mesajları dönmek) "ölmek" için kaçınarak.

Ben de veritabanında şifreleri depolamak olmadığını düşünmek istiyorum. MD5 veya SHA1 db düzeyinde bir güvenlik katmanı ekleyerek bir yoludur ile tek yönlü sağlamalarının.

Daha fazla bilgi için http://php.net/md5 ya da http://php.net/sha1 bakınız.

Kullanıcının kimliği doğrulanırken OTURUM değişkenleri kullanarak eğer fikrine katılıyorum.

Aşağıdaki gibi kullanıcının kimliğini doğrulamak için kolay bir yoldur

//connect the mysql_db
$mysql_connect()
$mysql_select_db() 

//reading from mysql table
$res="SELECT * FROM table WHERE name=$username AND password=$password";
$val=mysql_query($res);

//authentication
$count=mysql_num_rows($val);
if($count==1)
//authenticate the user
else
through an error