Bir işleyici sonra geri index.php bir kullanıcıyı yönlendirmek için

4 Cevap php

I put "username" and "password" to a form of mine. The action starts up a handler.php. The user sees then only a white page (handler.page) if he does not reload his browser at handler.php. If he does, the handler puts him to back to index.php.

Ben o bir giriş-çerez alır handler.php kaldıktan sonra geri ana sayfasına otomatik olarak kullanıcıyı koymak istiyorum.

Ben benim handler.php de şu var

$email = $_POST['email'];
$username = $_POST['username'];
$passhash_md5 = $_POST['passhash_md5']; 

 // COOKIE setting

 /* $cookie may look like this
   variables
        $username = "username"$
        $passhash_md5 = "password"$
        $email ="email"$
        $_SERVER['REMOTE_ADDR']=11.44.23.94$
   before md5:$
        "usernamepasshash_md5email11.44.23.94"$
   after md5:$
        "a08d367f31feb0eb6fb51123b4cd3cb7"$
 */

$login_cookie = md5(                                                                                                                                                                           
    $username .
    $password .
    $email .
    $_SERVER['REMOTE_ADDR']
);

setcookie ("login", $login_cookie);    

if (isset($_COOKIE['login']) )
{

    $sql2 = "SELECT * from users";
    $raw_user_list = pg_query($dbconn, $sql2);
    $user_list = pg_fetch_all($raw_user_list);

    // to process each user in the user-list that has a password 
    foreach ($user_list as $user => $passhash_md5)
    {                                                                                                                                                                                               
        //match the user list with the cookie$
        if ( $login_cookie == $_COOKIE['login'] )
        {
            header("Location: index.php"); 
            die("logged in");
        }
    }
    header("Location: index.php");   
    die("wrong username/password");
}
?>

Ben POST-yöntemini kullanır ve eylem handler.php bir form var.

My form

<form method="post" action="handler.php">
    <p>Username:
        <input name="username" type="text" size="40" />
    </p>

    <p>Email:
        <input name="email" type="text" size="230" />
    </p>

    <p>Password:
        <input name="password" type="password" size="230" />
    </p> 

    <input type="submit" value="OK" />
</form>

Işleyici sayfa AJAX tarafından denir değil.

Ben HEAD ile başarısız işleyici sayfayı çalıştırın:

<head>
<meta http-equiv="refresh" content="5; URL=inedx.php">
</head>

PHP header-komutları kullandığınızda çıkış için izin vermez, çünkü Ancak, HEAD içeremez.

How can you put the user automatically to the index.php if the login is successful?

4 Cevap

Bu sizin temel kurulum olmalı

Öncelikle, kullanıcı bir oturum açma sayfasına gelir ve kendi kullanıcı adı / şifre koyar. Biz bu login.php arayacağım. Daha sonra handler.php için malzeme gönderir

HTML

<form method="POST" action="handler.php">
<input type="text" name="login[user]">
<input type="password" name="login[password]">
</form>

Ardından, işleyici komut dosyası, POST verileri recieves eğer işler ve şifre maçı sağlamalarının eğer, bir cookie ve geri indeks sayfasına yönlendir.

Giriş Script

// Check for a Login Form
if (isset($_POST['login']) )
{
    // Get the Data
    $sql2 = "SELECT * from users";
    $raw_user_list = pg_query($dbconn, $sql2);
    $user_list = pg_fetch_all($raw_user_list);

    // Go through each User 
    foreach ($user_list as $user => $passhash_md5)
    {   
        // Check if the passwords match
        if ( $passhash_md5 == md5($_POST['login']['password'] ))
        {
    		// YOU NEED TO CREATE A COOKIE HERE		

            header("Location: index.php"); 
            die("logged in");
        }
    }
    header("Location: index.php");   
    die("wrong username/password");
}

Onlar bir giriş çerez dizi yoksa Sonra giriş için kontrol etmek istediğiniz her sayfada, uzakta birini yönlendirmek. Doğru bir giriş çerez denetlemek için bu genişletmek olabilir.

Her Sayfa

// Check for a Cookie
if(!$_COOKIE['login'])
{
    header('Location: login.php');
    die("User Required");
}

Ben orada yapmak için çalışıyor ne çok emin değilim, ama bu bir temel giriş formunu oluşturmak için nasıl kurmak esastır.


Eğer forma geçti kombinasyonu bu deneyin çerez olarak aynı olup olmadığını kontrol etmek için deneyin eğer:

// Set the Variables
$email = $_POST['email'];
$username = $_POST['username'];
$passhash_md5 = $_POST['passhash_md5']; 

 // COOKIE setting

 /* $cookie may look like this
   variables
        $username = "username"$
        $passhash_md5 = "password"$
        $email ="email"$
        $_SERVER['REMOTE_ADDR']=11.44.23.94$
   before md5:$
        "usernamepasshash_md5email11.44.23.94"$
   after md5:$
        "a08d367f31feb0eb6fb51123b4cd3cb7"$
 */

// Set what the cookie should look like
$login_cookie = md5(                                                                                                                                                                           
    $username .
    $password .
    $email .
    $_SERVER['REMOTE_ADDR']
);

// Check For the Cookie
if (isset($_COOKIE['login']) )
{
    // Check if the Login Form is the same as the cookie
    if ( $login_cookie == $_COOKIE['login'] )
    {
        header("Location: index.php"); 
        die("logged in");
    }
    header("Location: index.php");   
    die("wrong username/password");
}

Eğer kod herhangi bir veritabanı kısmını kullanarak değil çünkü veritabanı parçası çıkardı, bu yüzden önemli değil. Eğer birisi oturum çalışıyorum, ama yerine onların makineye kurdunuz cookie formda geçirilen aynı dize içerdiğini kontrol değil gibi görünüyor.


Tamam, son baskı, umarım

// Set the Variables
$email = $_POST['email'];
$username = $_POST['username'];
$password = $_POST['password']; 

 // COOKIE setting

 /* $cookie may look like this
   variables
        $username = "username"$
        $passhash_md5 = "password"$
        $email ="email"$
        $_SERVER['REMOTE_ADDR']=11.44.23.94$
   before md5:$
        "usernamepasshash_md5email11.44.23.94"$
   after md5:$
        "a08d367f31feb0eb6fb51123b4cd3cb7"$
 */

// Set what the cookie should look like
$login_cookie = md5(                                                                                                                                                                           
    $username .
    $password .
    $email .
    $_SERVER['REMOTE_ADDR']
);

// Check For the Cookie
if (isset($_COOKIE['login']) )
{
    // Check if the Login Form is the same as the cookie
    if ( $login_cookie == $_COOKIE['login'] )
    {
        header("Location: index.php"); 
        die("logged in");
    }
    header("Location: index.php");   
    die("wrong username/password");
}
// If no cookie, try logging them in
else
{
    $sql2 = sprintf("SELECT * from users WHERE passhash_md5='%s',
    pg_escape_string($login_cookie));
    $raw_user_list = pg_query($dbconn, $sql2);
    if ($user = pg_fetch_row($raw_user_list)) {.
        setcookie('login', $login_cookie);
        header("Location: index.php"); 
        die("logged in");
    } else {
    header("Location: index.php");   
    die("wrong username/password");
    }
}

Sprintf ve nerede Rezzif tarafından sağlanan fıkra

Bir yan not olarak gerçekten bir kişi, geçerli bir oturum olup olmadığını görmek için tüm kullanıcıların tabloya geçiyor?

Gerçekten nerede madde kullanıyor olması gerekir!


    $sql2 = sprintf("SELECT * from users WHERE UserName = '%s' AND UserPass = '%s'",
    pg_escape_string($_COOKIE['login']),
    pg_escape_string($passhash_md5));
    $raw_user_list = pg_query($dbconn, $sql2);
    if ($user = pg_fetch_row($raw_user_list)) {
       //Login valid
    } else {
      //Login invalid
    }

Pg familair ama bu yardımcı olur umarım değil.

Eğer if deyimi yukarıdaki her şeyi terk beri söyleyemem. Eğer $ _COOKIE ['login'] ayarlanmadığı zaman için bir durumda ihtiyaç gibi Ama görünüyor

Edit

Mantık biraz berbat gibi görünüyor. Sizin bir kullanıcı kimlik doğrulaması zaman göstermek için oturum değişkeni her türlü ayar değil. böylece kullanıcı Ayrıca, foreach sonuç satır ile $ passhash_md5 değeri üzerine bir oturum olduğunu söylemek, diğer sayfalarda karşı denetlemek için bir şey var:

foreach ($user_list as $user => $passhash_md5)

Ne yapmak gerekir muhtemelen:

foreach ($user_list as $user)

Veritabanında md5 hash içerir: Ve sonra sütunu ($user['md5hash'] == $login_cookie eski) karşı çerezi kontrol edin. Şimdi bunu nasıl, sadece görmek için kontrol ediyorsanız = 1 1 $_COOKIE['login'] $login_cookie ve daha sonra bu aynı değişkenlerin birbirlerini eşit olmadığını görmek için daha sonra kontrol beri.

Sizin bütün kullanım $_COOKIE gereksiz gibi görünüyor. Gerçekten $_SESSION değişkenleri yerine size komut var her şeyi kullanıyor olmalıdır. Ilk nerede ifadeleri kullanarak yayınlanan bilgilerin karşı veritabanını sorgulamak gerekir. Kullanıcı kimlik doğrulaması Ve eğer, onlar doğrulanmış belirtmek için bir oturum değişkeni ayarı gerekmektedir. Gibi bir şey:

$_SESSION['loggedin'] = true;

Eğer if($_SESSION['loggedin'] === true) görmek ve bu yanlış ise, o zaman giriş sayfasına onları yönlendirmek üzere diğer sayfalara kontrol edebilirsiniz. Ben bu önerileri kullanarak yerine şimdi ne kullanarak giriş sistemi yeniden öneririz.

This is an answer based on Cha, Mark and rezzif's answers.

<?php

// independent variables
$dbHost = "localhost";
$dbPort = 5432;
$dbName = "masi";
$dbUser = "masi";
$dbPassword = "123456";

$conn = "host=$dbHost port=$dbPort dbname=$dbName user=$dbUser password=$dbPassword";

$dbconn = pg_connect($conn);

if(!$dbconn) {
    exit;
}

$sql = "SELECT username, passhash_md5, email
    FROM users
    WHERE username = '{$_POST['username']}'
    AND email = '{$_POST['email']}'
    AND passhash_md5 = '{$_POST['password']}';";

$result = pg_query($dbconn, $sql);
if(!$result) {
    exit;
}

$username = $_POST['username'];
$password = $_POST['password'];
$passhash_md5 = md5($_POST['password']);


 // COOKIE setting

 /* $cookie may look like this:
   variables
        $username = "username"
        $passhash_md5 = "password"
   before md5:
        "usernamepasshash_md5"
   after md5:
        "a08d367f31feb0eb6fb51123b4cd3cb7"
 */

$login_cookie = md5(
    $username .
    $password
);

$sql3 = "SELECT passhash_md5

            FROM users 
            WHERE username=$_POST['username'];";

$password_data_original = pg_query($dbconn, $sql3);

while ($row = pg_fetch_row($data)) {
    $password_original = $row[0];
}

$login_cookie_original = md5(
    $username .
    $password_original
);


// Check for the Cookie
if (isset($_COOKIE['login']) )
{

    // Check if the Login Form is the same as the cookie
    if ( $login_cookie_original == $login_cookie )
    {
        header("Location: index.php");
        die("logged in");
    }
    header("Location: index.php");
    die("wrong username/password");
}
    // If no cookie, try logging them in
else {
    // we do not want SQL injection so we use pg_escape_string
    $sql2 = sprintf("SELECT * from users
                    WHERE passhash_md5='%s',
                    pg_escape_string($login_cookie));
    $raw_user_list = pg_query($dbconn, $sql2);

    if ($user = pg_fetch_row($row_user_list)) {
        setcookie ("login", $login_cookie);
        header("Location: index.php");
        die("logged in");
    } else {
        header("Location: index.php");
        die("wrong username/password");
    }
}

pg_close($dbconn);
?>