webForumDet fria alternativet

PHP inloggning

17 svar · 900 visningar · startad av nummersju

nummersjuMedlem sedan aug. 2005190 inlägg
#1

Jag har ett inloggnings script här som jag fått tag på, men logga ut, som är ganska viktig, kommer inte fram :S

<?php
/*
Kollar om sessionen inloggad finns om den gör
det visas informationen mellan måsvingarna
*/
if(isset($_SESSION['inloggad'])) {
    echo "Du är nu inloggad!";
    echo "kanske är någon länk här?";
    echo "En till ?";
}
 
else {
    echo "<br />Du måste logga in via inloggningssidan.<br /><br />
         <a href='login.php'>Logga in</a>";
}
 
//Om man trycker på länken logga ut händer detta
if(isset($_GET['logout'])) {
    session_destroy();
    echo "<script language='JavaScript'>
         location.href=('index.php');
         </script>";
    exit();
    }
?>
pettssonMedlem sedan jan. 2002777 inlägg
#2

Vad händer då? Ligger 'logout' med i länkadressen som "logga ut"-länken pekar på?

nummersjuMedlem sedan aug. 2005190 inlägg
#3

Alltså det finns ingenting under det som skrivs ut av detta:
echo "Du är nu inloggad!";
echo "kanske är någon länk här?";
echo "En till ?";

Vad jag förstår så ska det bli en "ligga ut"-länk där?

MatteMedlem sedan aug. 20002 970 inlägg
#4

Om du ändrar "En till" till

echo "<a href='{$_SERVER['PHP_SELF']}?logout='>Logga ut</a>";

Vad händer då när du klickar på länken ?

För övrigt anser jag att du ska flytta upp din logout-kod till innan du har någon output på sidan, och använda en header() för din redirect.

nummersjuMedlem sedan aug. 2005190 inlägg
#5

jag förstår inte, det funkar inte även om jag byter till den där koden... då kommer man till admin_inloggad.php?logout= och samma sida visas igen :(

MatteMedlem sedan aug. 20002 970 inlägg
#6

Har du session_start() överst i skriptet ?

nummersjuMedlem sedan aug. 2005190 inlägg
#7

Mjo det har jag....

pettssonMedlem sedan jan. 2002777 inlägg
#8

Gör så här:

<?php
session_start();
if(isset($_GET['logout'])) {
print "Du är nu utloggad.<br>";
session_destroy();
die();
}

if(isset($_SESSION['inloggad'])) {
print "Du är inloggad.<br>";
print "<a href=\"$PHP_SELF?logout\">Logga ut</a><br>";
}
else {
print "<br />Du måste logga in via inloggningssidan.<br /><br />" .
       "<a href='login.php'>Logga in</a>";
       die();
}
?>
nummersjuMedlem sedan aug. 2005190 inlägg
#9

Nu ser min kod ut såhär:

<?
session_start();
 
$anv = 'test'; // Välj användarnamn
$pass = 'test'; // Välj lösenord
?>
<html>
<link href="style.css" rel="stylesheet" type="text/css">
<body>
<head>
<TITLE>Vanligt Session inloggs script</TITLE>
</head>
 
<div id="content">
<div id="form">
<form method="post">

<input type="text" name="anv" value="Användarnamn" />

<input type="password" name="pass" value="Lösenord" />

<input type="submit" name="login" value="Enter the Matrix" />
</form>
 </div>
<?php 
session_start(); 
if(isset($_GET['logout'])) { 
print "Du är nu utloggad.<br>"; 
session_destroy(); 
die(); 
} 

if(isset($_SESSION['inloggad'])) { 
print "Du är inloggad.<br>"; 
print "<a href=\"$PHP_SELF?logout\">Logga ut</a><br>"; 
} 
else { 
print "<br />Du måste logga in via inloggningssidan.<br /><br />" . 
       "<a href='login.php'>Logga in</a>"; 
       die(); 
} 
?>  </div> 
 
 
</body>
</html>

Ni kan kolla själva hur det ser ut, jag fattar ingenting ;)
http://nummersju.net/php/news/login.php

MatteMedlem sedan aug. 20002 970 inlägg
#10

Börja din sida med att lägga följande allra överst på sidan:

<?php // <-- Allra översta raden längst till vänster

error_reporting(E_ALL);
ini_set("display_errors", "1");

session_start();

if(isset($_GET['logout'])) {
   session_unset();
   $_SESSION = array(); 
   session_destroy(); 
   header("Location: login.php");
   exit;
}

Får du några felmeddelande ?
Fungerar det ?

nummersjuMedlem sedan aug. 2005190 inlägg
#11

Har lagt till det och tagit bort det gamla, men nu som jag ser det verkar det ju inte finnas någon sida som man ska komma till efter att man loggat in... Sen verkar det ju vara konstigt att redan innnan man har provat att logga in så finns det en sida som säger att man inte är inloggad och att man ska klicka för att logga in :S

<?php // <-- Allra översta raden längst till vänster 

error_reporting(E_ALL); 
ini_set("display_errors", "1"); 

session_start(); 

if(isset($_GET['logout'])) { 
   session_unset(); 
   $_SESSION = array(); 
   session_destroy(); 
   header("Location: login.php"); 
   exit; 
} 
 
$anv = 'test'; // Välj användarnamn
$pass = 'test'; // Välj lösenord
?>
<html>
<link href="style.css" rel="stylesheet" type="text/css">
<body>
<head>
<TITLE>Vanligt Session inloggs script</TITLE>
</head>
<body> 
<div id="content">
<div id="form">
<form method="post">

<input type="text" name="anv" value="Användarnamn" />

<input type="password" name="pass" value="Lösenord" />

<input type="submit" name="login" value="Enter the Matrix" />
</form>
 </div>
<?php 

if(isset($_SESSION['inloggad'])) { 
print "Du är inloggad.<br>"; 
print "<a href=\"$PHP_SELF?logout\">Logga ut</a><br>"; 
} 
else { 
print "<br />Du måste logga in via inloggningssidan.<br /><br />" . 
       "<a href='login.php'>Logga in</a>"; 
       die(); 
} 
?>  </div> 
 
 
</body>
</html>
MatteMedlem sedan aug. 20002 970 inlägg
#12

Du har ingen kod som tar emot ditt postade inloggningsformulär.

Om du inte har någon sida att redirekta till efter inloggning får du väl skapa en sådan.

Tala om hur du vill ha strukturen på din webbplats. Vi har inte en aning om hur du tänkt använda dig av din inloggning.

nummersjuMedlem sedan aug. 2005190 inlägg
#13

Jo, så här är det. Jag vill ha en loginsida, därifrån ska man komma till admin.php. Där ska man kunna, just nu, lägga till en nyhet, redigera andra nyheter och tabort andra nyheter. När man är klar ska man kunna logga ut.
Tack för hjälpen föresten ;)

pettssonMedlem sedan jan. 2002777 inlägg
#14

För att komma till admin.php kan du lägga till action="admin.php" i din form-tagg, alt. action="inloggning.php" för att där hantera vad man gör vid fel lösenord etc. och sedan skicka vidare till lämlig sida.

MatteMedlem sedan aug. 20002 970 inlägg
#15

Ett exempel på hur du kan göra.

Du har din inloggning liggande i login.php:

<?php  /* login.php */

session_start(); // Alltid överst på sidan 

// Inloggning
if (isset($_POST['login'])){

   $username = 'hej';
   $password = 'hopp';

   /* 
      Testa om användarnamn/lösenord är rätt
      Annars skicka tillbaka till formulär
      med felmeddelande 
   */
   if ($_POST['user'] != $username || $_POST['passwd'] != $password) {
      header("Location: login.php?badlogin");
      exit;
   }

   // Sätt sessionsvariabel som visar att man är inloggad
   $_SESSION['admin_login'] = true;
   header("Location: admin.php");
   exit; 

}

// Utloggning
if (isset($_GET['logout'])){

  $_SESSION = array();
  session_destroy();
  header("Location: index.php");
  exit;

}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" 
  content="text/html; charset=iso-8859-1">
<title>Login adminsidor</title>
</head>
<body>
<?php

// Om inte inloggad visa formulär, annars logga ut-länk 
if (!isset($_SESSION['admin_login'])){

  echo "<h2>Logga in</h2>\n";
  
// Visa felmeddelande vid felaktig inloggning
  if (isset($_GET['badlogin'])){
    echo "Fel användarnamn eller lösenord!<br>\n";
    echo "Försök igen!\n";
  }
  
?>
<form action="login.php" method="post">
<table>

  <tr>
  <td>Användarnamn:</td>
  <td><input type="text" name="user" /></td>
  </tr>

  <tr>
  <td>Lösenord:</td>
  <td><input type="passwordd" name="passwd" /></td>
  </tr>

  <tr>
  <td colspan="2" style="padding:10px 30px">
  <input type="submit" name="login" value="Logga in" style="width:100px" />
  </td>
  </tr>

  </table>
</form>
<?php

} else {

  echo '
    <p>Du är redan inloggad</p>
    <p>
      <a href="login.php?logout=">Logga ut</a><br />
      <a href="admin.php">Till adminsidan</a>
    </p>
  ';

}

?>

<p><a href="index.php">Startsidan</a></p>

</body>
</html>

Sedan på de sidor du vill skydda med din inloggning lägger du följande överst:

<?php

session_start();

if (!isset($_SESSION['admin_login'])) {
   header("Location: login.php");
   exit;
}

Nu är det inte så extremt säkert att ha dina användarnamn/lösenord i klartext i skriptet. Ett enkelt sätt att göra det lite bättre är att du kör följande skript:

echo md5('hopp'); // Ersätt med "hopp" ditt eget lösenord

Sedan lägger du in det som värde i ditt $password och ändrar till:

   $username = 'hej';
   $password = 'aa471e80ed10cac36bc2dd549c94b9b9';

   /* 
      Testa om användarnamn/lösenord är rätt
      Annars skicka tillbaka till formulär
      med felmeddelande 
   */
   if ($_POST['user'] != $username || md5($_POST['passwd']) != $password) {
      header("Location: login.php?badlogin");
      exit;
   }

Åtminstone kan inte då någon få ditt lösenord i klartext om de skulle råka se skriptet, av t.ex. fel på servern.
*

nummersjuMedlem sedan aug. 2005190 inlägg
#16

Okej! Tack så hemskt mkt! Detta ska jag prova!

nummersjuMedlem sedan aug. 2005190 inlägg
#17

Förstår inte det där sista med md5 och det :S Men innan det kommer in i bilden funkar det jättebra! :D

jeliassonMedlem sedan sep. 200526 inlägg
#18

md5 är en envängskryptering, tekniken bygger på att man jämnför två strängar.
Den md5 strängen som är i databasen och den strängen som skickas i ett forumulär.

Genererad på 375 ms · cache AV · v20260730165559-full.f96bc7eb