Veritabanı olmadan kolay oturum açma komut

11 Cevap php

Nasıl bir veritabanı gerektirmeyen kolay bir oturum açma komut oluştururum. Ben güvenli olmak istiyorum.

Peki, ne bu script hakkında, ben sadece php benim bilgilerin tarafından yapılmış.

<?php 
// startar sessionen
session_start(); 

// username and password
$anvandarID = "ditt_namn";
$losenord = "ditt_password";

if (isset($_POST["anvandarID"]) && isset($_POST["losenord"])) { 

    if ($_POST["anvandarID"] === $anvandarID && $_POST["losenord"] === $losenord) { 
    /
    $_SESSION["inloggning"] = true; 

    header("Location: safe_site.php"); 
    exit; 
    } 
        // wrong login - message
        else {$felmeddelande = "Du har angivit fel användarnamn eller lösenord!";} 
}
?>

: Safe_site.php Bu ve bazı içerikler barındırıyor

session_start();

if (!isset($_SESSION["inloggning"]) || $_SESSION["inloggning"] !== true) {
header("Location: login.php");
exit;
}

11 Cevap

Bu ideal bir çözüm değil ama burada PHP kodu giriş bilgi depolamak nasıl gösteren bir hızlı ve kirli bir örnek:

<?php
session_start();

$userinfo = array(
                'user1'=>'password1',
                'user2'=>'password2'
                );

if(isset($_GET['logout'])) {
    $_SESSION['username'] = '';
    header('Location:  ' . $_SERVER['PHP_SELF']);
}

if(isset($_POST['username'])) {
    if($userinfo[$_POST['username']] == $_POST['password']) {
        $_SESSION['username'] = $_POST['username'];
    }else {
        //Invalid Login
    }
}
?>
<!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>
        <title>Login</title>
    </head>
    <body>
        <?php if($_SESSION['username']): ?>
            <p>You are logged in as <?=$_SESSION['username']?></p>
            <p><a href="?logout=1">Logout</a></p>
        <?php endif; ?>
        <form name="login" action="" method="post">
            Username:  <input type="text" name="username" value="" /><br />
            Password:  <input type="password" name="password" value="" /><br />
            <input type="submit" name="submit" value="Submit" />
        </form>
    </body>
</html>

FacebookConnect veya OpenID iki büyük seçenek vardır.

(Bir oturumu başlatmak ve ihtiyaç duydukları hiçbir veritabanında oturum konum - Temelde, kullanıcıların zaten (Facebook, ya da Google) üyesi olan diğer sitelere giriş, ve sonra kullanıcı güvenilir olduğunu söylüyorum bu siteden onay almak ) kendi hesabına daha fazla veri ilişkilendirmek istediğiniz sürece.

Böyle bir iki dosya kurulum kullanabilirsiniz:

index.php

<?php 
session_start(); 

define('DS',  TRUE); // used to protect includes
define('USERNAME', $_SESSION['username']);
define('SELF',  $_SERVER['PHP_SELF'] );

if (!USERNAME or isset($_GET['logout']))
 include('login.php');

// everything below will show after correct login 
?>

login.php

<?php defined('DS') OR die('No direct access allowed.');

$users = array(
 "user" => "userpass"
);

if(isset($_GET['logout'])) {
    $_SESSION['username'] = '';
    header('Location:  ' . $_SERVER['PHP_SELF']);
}

if(isset($_POST['username'])) {
    if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == $_POST['password']) {
  $_SESSION['username'] = $_POST['username'];
  header('Location:  ' . $_SERVER['PHP_SELF']);
    }else {
        //invalid login
  echo "<p>error logging in</p>";
    }
}

echo '<form method="post" action="'.SELF.'">
  <h2>Login</h2>
  <p><label for="username">Username</label> <input type="text" id="username" name="username" value="" /></p>
  <p><label for="password">Password</label> <input type="password" id="password" name="password" value="" /></p>
  <p><input type="submit" name="submit" value="Login" class="button"/></p>
  </form>';
exit; 
?>

Eğer bir veritabanı yoksa, nerede kullanıcıların oturum açma verileri KALICI rekor saklanacak? Kullanıcı oturum ise, emin, çalışması için siteniz için gerekli minimum kullanıcı bilgileri bir oturumda ya da çerez olarak saklanabilir. Ama sonra onlar ne zaman, oturumu? Oturum uzağa gider, çerez kesmek olabilir.

Yani kullanıcı sitenize geri geliyor. O güvenilir şey sitenizi onun giriş bilgileri karşılaştırmak ne yapar oturum için çalışır?

Yerine db bir php dosyasında dizideki adı ve şifre sağlamalarının kaydedin.

Eğer kullanıcının kimliğini doğrulamak için gerektiğinde, onun kimlik sağlamalarının hesaplamak ve sonra da dizide sağlamalarının bunları karşılaştırmak.

Eğer (PHP belgelerine hash function and hash algos bakınız) güvenli hash fonksiyonunu kullanırsanız, oldukça güvenli olması (eğer tuzlu hash kullanarak düşünebilirsiniz) ve ayrıca formun kendisi için bazı korumalar eklemek gerekir.

Eğer bir veritabanı var vermezsek, kodunuzda giriş bilgilerini kodlamalısınız, veya disk üzerinde düz bir dosyadan okuyacak.

Sen HTTP Temel kimlik doğrulaması ve htpasswd kullanarak Web sunucu düzeyinde erişim kontrolü yapabilirsiniz. Bununla bir takım sorunlar vardır:

  1. Bu (kullanıcı adı ve şifre trivially tel üzerinde kodlanmış) çok güvenli değil
  2. (Eğer kullanıcı eklemek veya kaldırmak için sunucuya oturum var) korumak zor
  3. Sen tarayıcı tarafından sunulan oturum açma iletişim kutusu üzerinde hiçbir kontrole sahip
  4. Tarayıcıyı yeniden başlatmadan kısa, çıkıyor hiçbir yolu yoktur.

Eğer birkaç kullanıcı ile iç kullanım için bir site inşa ediyoruz sürece, ben gerçekten bunu tavsiye etmem.

Ben yeni bir yazı bunun için çok basit bir uygulama yarattık: Simple PHP Login Without a Database. Sen basit bir log-in, logoutu oluşturmak ve 1 küçük php dosyasında durumu açmış olabilir. Bu yardımcı olur umarım :)

*** Bir veritabanı veya harici bir dosyaya bağlantı vermiyor GİRİŞ script. Küresel bir şifre için iyi -

Giriş formu sayfada yerleştirin - Burası bu giriş sayfasının üstünde - her şeyin üstünde ***

<?php

if(isset($_POST['Login'])){

if(strtolower($_POST["username"])=="ChangeThis" && $_POST["password"]=="ChangeThis"){
session_start();
$_SESSION['logged_in'] = TRUE;
header("Location: ./YourPageAfterLogin.php");

}else {
$error= "Login failed !";
}
}
//print"version3<br>";
//print"username=".$_POST["username"]."<br>";
//print"password=".$_POST["username"];
?>

* Login on following pages - Place this at the top of every page that needs to be protected by login. this checks the session and if a user name and password has *

<?php
session_start();
if(!isset($_SESSION['logged_in']) OR $_SESSION['logged_in'] != TRUE){

header("Location: ./YourLoginPage.php");
}
?>

Bu deneyin:

<?php
        session_start();
        $userinfo = array(
            'user'=>'5d41402abc4b2a76b9719d911017c592', //Hello...
        );

        if(isset($_GET['logout'])) {
            $_SESSION['username'] = '';
            header('Location:  ' . $_SERVER['PHP_SELF']);
        }

        if(isset($_POST['username'])) {
            if($userinfo[$_POST['username']] == md5($_POST['password'])) {
                $_SESSION['username'] = $_POST['username'];
            }else {
                header("location:403.html"); //replace with 403
            }
        }
?>
<?php if($_SESSION['username']): ?>
    <!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=utf-8" />
            <title>Logged In</title>
        </head>

        <body>
            <p>You're logged in.</p>
            <a href="logout.php">LOG OUT</a>
        </body>
    </html>

<?php else: ?>
    <html>
        <head>
            <title>Log In</title>
        </head>
        <body>
            <h1>Login needed</h1>
            <form name="login" action="" method="post">
                <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
                    <tr>
                        <td colspan="3"><strong>System Login</strong></td>
                    </tr>
                    <tr>
                        <td width="78">Username:</td>
                        <td width="294"><input name="username" type="text" id="username"></td>
                    </tr>
                    <tr>
                        <td>Password:</td>
                        <td><input name="password" type="password" id="password"></td>
                    </tr>
                    <tr>
                        <td>&nbsp;</td>
                        <td><input type="submit" name="Submit" value="Login"></td>
                    </tr>
                </table>
            </form>
        </body>
    </html>
<?php endif; ?>

: Bir logoutu, böyle bir şey (logout.php) ihtiyacınız olacak

<?php
    session_start();
    session_destroy();
    header("location:index.html"); //Replace with Logged Out page. Remove if you want to use HTML in same file.
?>

// Below is not needed, unless header above is missing. In that case, put logged out text here.
<!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=utf-8" />
        <title>Untitled Document</title>
    </head>
    <body>
        <!-- Put logged out message here -->
    </body>
</html>

Oturum uygulanması için veritabanı kullanmamak için hiçbir neden yok, yapabileceğiniz çok az hosting şirketi yeterli DB size değilse SQLite'ı indirmek ve yüklemek.