Senaryoyu giriş PHP Autologin işlevi

3 Cevap php

Bunu nasıl komut dosyası için bir otomatik giriş özelliğini implent istiyorsunuz?

session_start();
$result = mysql_query("SELECT id FROM users 
                       WHERE username = '{$_POST['username']}' 
                       AND password = '{$_POST['password']}'");

     if (isset($_POST['savelogin'])) {
     setcookie("SaveLogin", $_POST['username'], time()+3600);
     setcookie("SaveLogin", $_POST['password'], time()+3600);
     }


if (mysql_num_rows($result) == 0) {
    exit('wrong username/password');

    } else {
    $_SESSION['id'] = mysql_result($result, 0, 'id');
	header("Location: ./");
    }



<form method="post">


Username: <input type="text" name="username" size="22" /><br>
Password: <input type="password" name="password" size="22" /><br>

<br>
Autologin? <input type="checkbox" name="savelogin" />

<input type="submit" value="Login" />

</form>

Thats how far i have gotten. Saving the username and password. But how should I do so it autologins?

3 Cevap

İlk olarak, çerez için kullanıcı adı ve şifre kaydetmek istemiyorum. Bu kötü bir fikir.

Bu düşünce basit bir yöntem olacaktır:

1) Create a new field in the users table that stores an MD5 hash. You can call it session_key. 2) When you submit the page, the script should do the following.

  • Kullanıcı adı ve şifre doğrulamak
  • Iyi bir kullanıcı adı ve şifre çifti ise, saveLogin değişken kontrol
  • SaveLogin değişken ayarlı ise, bir md5 oluşturmak ve veritabanında bu saklayın. Ayrıca bir tanımlama olduğunu md5 saklayın. Veritabanı tablosu gibi bir çerez sona alanı olduğundan emin olun.
  • İhtiyacınız oturum verilerini oluşturmak.
  • Yönlendir. /

. 3) / sayfasında, aşağıdakileri yapın:

  • Oturumu hala varolup olmadığını görmek için kontrol edin. Eğer öyleyse, o sayfayı oluşturmak.
  • Oturumu yoksa, çerez kontrol edin.
  • Çerez varsa, veritabanında bu session id bakmak ve değil doldu emin olun. sonra oturumu oluşturmak ve sayfayı oluşturmak.

Bu uygulama biraz daha güvenli hale getirmek gerekir. Bu kodlama en iyi yolu olmayabilir, ancak kavramlar size oldukça güvenli giriş sayfası yapmak için nasıl bir fikir vermelidir.

Bu bir otomatik oturum açma sahip çok güvensiz bir yöntemdir. Her yerde düz metin parola saklamak asla.

Aşağıdaki gibi iyi bir stratejidir:

  1. "Otomatik giriş" için bir onay kutusu ile, normal giriş formu sunmak.
  2. Otomatik giriş kutusu işaretli ise, o zaman normal kendi kullanıcı adı ve şifrenizi doğrulayın. Bu başarılı olursa, o zaman otomatik oturum açma için özel bir tanımlama ayarlayabilirsiniz.
  3. Özel çerez 'Otomatik giriş' gibi bir isim ve kendi kullanıcı adını içeren bir değer, ve kendi kullanıcı verilerinin bir tuzlu md5 hash verin. "User = kullanıcı adı ve hash = 123456xyz.etc" gibi bir şey.
  4. Eğer kullanıcı dahaki sefere görmek ve otomatik log-onları-in istediğiniz zaman, bu özel cookie kontrol ve içeriğini doğrulayın. Kullanıcı adı ve karma ayrılarak, daha sonra adı dayalı veritabanından hesabını alıp md5 çerez karma veri karşılaştırmak için yeniden yapılacak. Geçerli ise, sen (yani yeni bir oturum başlatmak) onları giriş yapabilirsiniz.

Sen, onların adı, IP adresi ve (zombat önerilen) karma çeşit almak (muhtemelen Base64 kullanarak) hepsi şifrelemek ve çerez gibi sonuç dizesi saklamak gerekir. Verseler bile, şifresi çözülmüş IP adresi istek geliyordu IP adresini maç olmaz, çünkü bu şekilde, birisi, parodi veya çerez çalmak olamaz. Bunun yerine bir sorgu içine kullanıcı girişi bırakarak beyaz listeler kullanmak da iyidir.

Böylece gibi bir şey olsun istiyorum:

//First see if the auto-login cookie exists and is valid:

if($_COOKIE['autologin']) {
$users_query = "SELECT username FROM users WHERE last_login < SUBDATE(CURDATE(),30)";
$users_results = mysql_query($users_query);
while($row = mysql_fetch_assoc($users_result)) {
    $users = $row['username'];
}
$auto_cookie = $_COOKIE['autologin'];

$user_creds = explode("//", base64_decode($auto_cookie));

$user_name = $user_creds[0];
$user_IP = $user_creds[1];
$user_hash = $user_creds[2];

$username_check = (in_array($user_name, $users) ? true : false;
$userIP_check = ($user_IP = $_SERVER['REMOTE_ADDR']) ? true :false;

$so_far_so_good = ($username_check && $userIP_check) ? true : false;

if($so_far_so_good) {
$hash_query = "SELECT hash FROM userhash WHERE username = '$user_name'";
$hash_results = mysql_query($hash_query);
$all_clear = ($user_hash == mysql_result($hash_results,0)) ? true : false;
}

}

//Checks Login Data:
if($_POST) {
    $users_query = "SELECT username FROM users";
$users_results = mysql_query($users_query);
while($row = mysql_fetch_assoc($users_result)) {
    $users = $row['username'];
}

$username_check = (in_array($user_name, $users) ? true : false;

$password_check = password_check();
// I do not feel comfortable enough with encryption and authentication to suggest
// a method here. Suffice to say, you should have a strong password check system.

$all_clear = ($username_check && $password_check) ? true : false;

// You should only throw a log in error when they have attempted a login. Do not
// give hints at your authentication methods in auto-login section.

$set_cookie = ($all_clear && $_POST['set-auto']) ? true : false;
if($set_cookie) {
   $new_hash = hash_maker();
   // Again, look to the others for best hashing technique.
   $raw_cookie_data = $user_name . "//" . $_SERVER['REMOTE_ADDR'] . "//" . $new_hash;
   $enc_cookie_data = base64_encode($raw_cookie_data);
   setcookie("autologin", $enc_cookie_data, time()+3600);
    }
}

if($all_clear) {
   echo "Welcome Back!";
  }
 else {
    //print login form here...
 }