giriş formu üzerinde kullanıcının kimliğini doğrulamak için php oturumları

6 Cevap php

Ben bir oturumu ve mağaza adı / parola bilgilerinizi başlamak için tasarlanmış aşağıdaki kodu var, ve hiçbir şey teslim, ya da hiç oturum verilerin depolandığı takdirde, bir başarısız sayfaya yönlendirir.

session_start();
if(isset($_POST['username']) || isset($_POST['password'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $_SESSION['username'] = $username;
    $_SESSION['password'] = $password;
}

if(isset($_SESSION['username']) || isset($_SESSION['password'])){
    $navbar = "1";
    $logindisplay = "0";
    $username = $_SESSION['username'];
    $password = $_SESSION['password'];
} else {
    header('Location:http://website.com/fail.php');
}

$authed = auth($username, $password);
if( $authed == "0" ){
    header('Location:http://website.com/fail.php');
}

Onun olması gerektiği şekilde çalışan ve benim bilgi sunulmuş ve oturumda saklanan bile başarısız beni yönlendirme değil. Ben yanlış bir şey yapıyorum?

I oturum kodu eklemeden önce NOTE authed fonksiyon iyi çalıştı.

6 Cevap

ne kurulum oturumuna bu kullanma hakkında

session_start();
if( isset($_POST['username']) && isset($_POST['password']) )
{
    if( auth($_POST['username'], $_POST['password']) )
    {
        // auth okay, setup session
        $_SESSION['user'] = $_POST['username'];
        // redirect to required page
        header( "Location: index.php" );
     } else {
        // didn't auth go back to loginform
        header( "Location: loginform.html" );
     }
 } else {
     // username and password not given so go back to login
     header( "Location: loginform.html" );
 }

ve her bir "güvenli" Sayfanın üstündeki bu kodu kullanabilirsiniz:

session_start();
session_regenerate_id();
if(!isset($_SESSION['user']))      // if there is no valid session
{
    header("Location: loginform.html");
}

Bu yerine her sayfanın üstünde tam kimlik denetimi çalışan her sayfasının üstünde kod çok küçük bir miktar tutar. Oturumu kapatmak için:

session_start();
unset($_SESSION['user']);
session_destroy();
header("Location: loginform.html");

Yukarıda benim spesifik sorunun çözümü

session_start();
if(isset($_POST['username']) || isset($_POST['password'])){
$username = $_POST['username'];
$password = $_POST['password'];
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
}

if(isset($_SESSION['username']) || isset($_SESSION['password'])){
$navbar = "1";
$logindisplay = "0";
$username = $_SESSION['username'];
$password = $_SESSION['password'];
$authed = auth($username, $password);
if( $authed == "0" ){
header('Location:http://website.com/fail.php');
}
} else {
header('Location:http://website.com/fail.php');
}

Aslında sorunla ilgili olmasa bile sadece bazı rastgele noktalar:

  • Oturumda düz metin şifre tutmayın. Şifre tamam ise sadece değerlendirmek, ardından mağaza loggedIn = true veya oturumda böyle bir şey.

  • Şifre and adı olup olmadığını kontrol edin $_POSTed, değil || (ya da).

  • Ileri ve geri $password ve $_SESSION['password'] arasında şifre ve kullanıcı adı geçemiyor. Verileri tutmak ve orada bırakmak için bir yere karar verin.

  • Eğer oturumda hiç bir şey saklayabilirsiniz eğer kontrol ettin mi? Çerezler tamam vs ..?

Büyük ölçüde kodunu basitleştirmek için, bu yapmanız gereken bütün değil mi?

if (isset($_POST['username'] && isset($_POST['password'])) {
    if (auth($_POST['username'], $_POST['password'])) {
        $_SESSION['user'] = /* userid or name or token or something */;
        header(/* to next page */);
    } else {
        // display "User credentials incorrect", stay on login form
    }
} else {
    // optionally: display "please fill out all fields"
}

Başlıkları işlev çağrıları değildir. Onlar HTTP başlıklarını içine bir yönerge koymak ve çalıştırmak için son bir işlenecektir biridir. Yani böyle bir şey varsa diyelim

if ($bAuthed)
{
     header("location: login.php");
}

// error case
header("location: error-login.php");

Her zaman ne olursa olsun-login.php hata yönlendirileceksiniz. Başlıkları işlev çağrıları değil!

İlk olarak, oturumda şifre saklamak yok. Bir bad thing bulunuyor. after Eğer doğrulanmış kadar İkincisi, oturumda adı tutmayın.

Aşağıdaki deneyin:

<?php

session_start();

if (isset($_POST['username']) && isset($_POST['password'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $authed = auth($username, $password);

    if (! $authed) {
        header('Location: http://website.com/fail.php');
    } else {
        $_SESSION['username'] = $username;
    }
}

if (isset($_SESSION['username'])) {
    $navbar = 1;
    $logindisplay = 0;
} else {
    header ('Location: http://website.com/fail.php');
}