Åtgärder

Skillnad mellan versioner av "CS checklogin"

Från Skolbok

m (Logout)
m
Rad 64: Rad 64:
  
 
  <?php
 
  <?php
  //I framtiden måste följande fyra rader alltid finnas överst i varje fil
+
  //I framtiden måste följande fyra rader alltid finnas överst i varje fil där du vill begränsa åtkomst
 
  session_start();
 
  session_start();
 
  if(!session_is_registered(myusername)){
 
  if(!session_is_registered(myusername)){
Rad 71: Rad 71:
 
  ?>
 
  ?>
 
   
 
   
  <html>
+
  <!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" dir="ltr" lang="sv-SE">
 +
<head>
 +
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 +
<title>Lyckad inloggning </title>
 +
</head>
 
  <body>
 
  <body>
 +
 
  Din inloggning gick perfekt!
 
  Din inloggning gick perfekt!
 
  <a href="index.php">Till huvudsidan</a>
 
  <a href="index.php">Till huvudsidan</a>
  </body>
+
   
 +
  </body>
 +
  </html>
  
  

Versionen från 9 juni 2012 kl. 18.46

Det finns många ondskefulla personer ute på Internet som gör vad de kan för att hacka databaser, därför måste vi (KISS till trots) ta med en del säkerhetsåtgärder. Bland annat tar vi bort speciella tecken som egentligen används av MySQL bara för att vara säkra på att databasen inte kan manipuleras utifrån.

I PHP kan man skriva ut information på skärmen på två sätt, det ena är med kommandot print, det andra med kommandot echo. De är likvärdiga och det är en smaksak vilket du väljer. bara du har "-tecken före och efter texten samt avslutar med ett semikolon. Problemet uppstår om du vill använda ett semikolon inuti texten. Då tror PHP att du avslutar texten vid det andra semikolonet, vilket du inte gör. För att få det att fungera måste du sätta en backslash framför \" .


I koden här nedanför finns:

session_register("myusername");
session_register("mypassword");

Det innebär på svenska att servern sparar en liten textfil där ditt användarnamn och lösenord finns med. Så länge du inte stänger webläsaren kommer du att vara registrerad som inloggad, vilket är precis vad vi är ute efter. Vi vill ju inte att snokande elever skall kunna hitta allt du sparat i din lilla databas, eller hur? Genom att hålla reda på om du är inloggad eller inte kan vi skriva viss kod som visas för inloggade, och annan kod som visas för oinloggade.

Fyll i header och footer precis som i förra exemplet, och däremellan fyller du i:

<?php

//Olika viktiga variabler
$host="localhost"; // Host , på en privat dator duger oftast localhost
$username="root"; // Mysql användarnamn, antagligen root
$password="password1"; // Lösenord till root, kan t.ex. vara password1
$db_name="skolan"; // Databasens namn
$tbl_name="teacher"; // Tabellens namn

// Anslut till MySQL servern och välj rätt tabell
mysql_connect("$host", "$username", "$password")or die("Kan inte ansluta till databasen");
mysql_select_db("$db_name")or die("Kan inte välja datatabellen");

// Användarnamn och lösenord skickade från loginformuläret
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// För att förhindra databashackning
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

//Välj rätt person utifrån inloggningsnamn och lösenord
$sql="SELECT * FROM $tbl_name WHERE LOGIN='$myusername' and PASS='$mypassword'";
$result=mysql_query($sql);

// Räkna antalet rader som hämtas, 1= ok, 0 = finns inte
$count=mysql_num_rows($result);

//Om man hittade en användare?
if($count==1){

// Registrera $myusername, $mypassword i sessionen och skicka användaren till filen "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
echo "Fel användarnamn eller lösenord";
echo "<br>";
echo "Tillbaka";
}
//Om användarnamn och/eller lösenord var fel måste användaren få reda på det. En länk sänder honom tillbaka för ett nytt försök.
?>

Spara filen som checklogin.php i var/www mappen så att Apache kan hitta den.

login_success.php

Nu behöver vi kunna göra en enkel test om inloggningen faktiskt fungerat. Koden (förutom header och footer) är:

<?php
//I framtiden måste följande fyra rader alltid finnas överst i varje fil där du vill begränsa åtkomst
session_start();
if(!session_is_registered(myusername)){
header("location:main_login.php");
}
?>

 <!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" dir="ltr" lang="sv-SE">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Lyckad inloggning </title>
</head>
<body>
Din inloggning gick perfekt!
Till huvudsidan

 </body>
 </html>


Logout

Slutligen måste vi ju också ha ett sätt att logga ut användaren. Skapa en fil som heter logout.php och fyll i följande kod:

<?php
session_start();
session_destroy();
?>

 <!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" dir="ltr" lang="sv-SE">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Utloggningssidan </title>
</head>
<body>

Du är utloggad.<br>
Till huvudsidan

 </body>
 </html>

Genom att lägga in session_destroy så nollställs sessionen och man är inte längre behandlad som en inloggad användare.

index.php

Vi behöver en sida där man alltid hamnar, där också dina elever hamnar. Från den sidan måste man kunna nå både inloggning och utloggning. Huvudsidan i varje webplats heter index och eftersom vi har en php sida får den heta index.php.

Överst måste vi ha:

<?php
//I framtiden måste följande rad alltid finnas överst
session_start();
?>

Därefter:

<!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" dir="ltr" lang="sv-SE">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Startsidan </title>
</head>
<body>


Här skriver vi in länkar och information:

 <?php
//Visa inloggning om ej inloggad, annars utloggning
if(!session_is_registered(myusername)){
echo "Till inloggningssidan";
}

if(session_is_registered(myusername)){
echo "Till utloggningssidan";
}
?>


Slutligen behövs footern:

 </body>
 </html>


Spara alltihop som index.php i var/www mappen

Källa: http://www.phpeasystep.com/phptu/6.html