Login script i PHP

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008

En av brukerne her på Hjemmeside ville lage login i PHP til websiden sin, så her er en kort introduksjon til noen nyttige konsepter i PHP

Foruten denne læringsposten finner du to nedlastbare, fungerende og litt mer kompliserte loginscript her.

Login script med sessions i PHP

Hvis du skal lage login, så kan du gjøre det på denne måten:

  1. Lagre brukernavn og passord i databasen
  2. Hente ut brukernavn og passord fra databasen når bruker logger inn
  3. Lagre innlogging ved hjelp av en "session", dvs via cookie hos klienten

Her er et lite script som illustrerer hvordan det fungerer. Dette scriptet vil dog ikke hente passord for databasen, men fungerer fint som et utgangspunkt for å forstå sammenhengene.

HTML-koden i dette scriptet validerer ikke ifølge standard. Videre bør man skille HTML og CSS fra PHP.

PHP script

<?php
// Starter session for script
session_start();

// Riktig brukernavn og passord
$auth = array(
 
'username' => 'Fritzl',
 
'password' => 'GodJul',
);

// Sjekker om bruker er logger inn med riktig passord
if(isset($_POST['username'], $_POST['password'])) {
  if(
$_POST['username'] == $auth['username'] && $_POST['password'] == $auth['password']) {
   
$_SESSION['logged_in'] = true;
  } else {
      print
'<p>Du har skrevet inn feil brukernavn eller passord.</p>';
  }
}

// Logger ut
if(isset($_GET['logout'])) {
  unset(
$_SESSION['logged_in']);
}

// Printer login form om ikke logget inn
if (!isset($_SESSION['logged_in'])) {
 
$login_form = <<<EOF
    <form method="post">
      <fieldset>
        <legend>Logg inn</legend>
        <label for="username">Brukernavn:
          <input type="text" name="username" id="username" />
        </label>
        <label for="password">Passord:
          <input type="password" name="password" />
        </label>
        <input type="submit" value="Logg inn" />
      </fieldset>
    </form>
EOF;

 
// Print skjema
 
print $login_form;
}
elseif (isset(
$_SESSION['logged_in']) && $_SESSION['logged_in'] == true) {
 
$output = <<<EOF
  <p>Du er nå logget inn, klikk her for å logge ut:</p>
  <p><a href="/?logout=1" title="logg ut">Få meg ut herfra</a></p>
EOF;
  print
$output;
}
?>

Forklaring av login script

Hvis brukeren ikke er logget inn vil ikke sesjonesvariabelen $_SESSION være satt. Merk at det er viktig å begynne scriptet med session_start();.

Hvis brukeren ikke er logget inn, vil innloggingsskjema komme opp. Dersom brukeren har forsøkt å skrive inn feil brukernavn og passord, vil vedkommende få beskjed ovenfor login skjemaet.

Dersom brukeren har logget inn med korrekt brukernavn og passord, så vil vedkommende komme til den delen som krever autentisering. Her får man også opp en link som lar brukeren logge ut igjen.

Hvis brukeren går bort fra nettstedet, men kommer tilbake før sesjonen har «gått ut på dato», vil han likevel være innlogget.

Merk at <form> bruker method="post", og at vi leser ut verdiene fra skjemaet i PHP ved hjelp av arrayen $_POST['navn_pa_felt_i_form'].

Videre bruker vi en query string i linken for utlogging. I det tilfellet bruker vi en annen protokoll enn POST, nemlig GET. Spørsmålstegnet i URLen angir at det kommer en variabel etterfulgt av verdien. Slik

http://hjemmeside.org/?logout=1

Her er navnet på variabelen «logout», mens verdien av den er «1». For å hente ut denne variabelen fra et PHP script kan vi gjøre det slik:

<?php
print $_GET['logout'];
?>

Denne vil i dette tilfellet printe ut «1».

Ønsker man flere variabler i query stringen (spørrestrengen), så nytter man &, slik;

http://hjemmeside.org/?variabel_1=hei&variabel_2=hallo

Skal man printe ut disse variablene fra scriptet, bruker man naturligvis:

<?php
print $_GET['variabel_1']; // hei
print $_GET['variabel_2']; // hallo
?>

Spør hvis det er noe mer noen lurer på. Prøv gjerne scriptet på et webhotell eller en server som støtter PHP

Tim
Tims bilde
Avlogget
Ble med: 15.01.2010
Hei Hjemmeside Likte dette

Hei Hjemmeside

Likte dette med array bruken når du skriver inn brukernavn og passord. Mye mer oversiktlig en hva jeg har sett i andre guider tidigere. Vet ikke om det har noe som helst å si men er det "trygt" å poste passord rett inn i php filene? Eller burde dem kryperes i filen f.eks ved bruk av md5?

  EDIT:

Fikk problemer når jeg benyttet meg av deler av dette scriptet med

<<<EOF

EOF;

Tror denne koden er veldig utdattert i følge min venn som hjalp meg med probleme mitt. Hvorfor heller ikke bare benytte fnutter? altså '  .

 Tim @ Gambinomafia

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Kryptering

Hei,

Jo, jeg er helt enig med deg, og personlig bruker jeg fnutter, men jeg valgte å bruke dette her for at det skulle være tydeligere hva som var HTML og hva som var PHP. :)

Selv bruker jeg ofte å lagre brukerdata i MySQL, og da bruker jeg MySQLs egen krypteringsfunksjon PASSWORD('ditt_passord') i MySQL-spørringen. md5 er også et godt alternativ.

Svar på forumemnet

(If you're a human, don't change the following field)
Your first name.
Innholdet i dette feltet blir holdt privat og vil ikke bli vist offentlig.