webForumDet fria alternativet

mvc och session

24 svar · 1 806 visningar · startad av tanten · sida 2 av 2

aasahMedlem sedan mars 20034 471 inlägg
#21

tanten skrev:

Vad menar du med pseudokod? :)

"Pseudokod" är ett begrepp inom programmering. Det innebär att man beskriver på svenska (eller engelska, eller annat människospråk) hur en viss funktion (eller vad det nu är man beskriver) ska fungera. Fast formaterat som den programkod som ska åstadkomma det.

Exempel: Beskriver på pseudokod hur man tar ut maximala värdet ur en lista:

Sätt max till första värdet i listan
för varje värde, v i listan
   om v > max
      max = v
colioneMedlem sedan juni 20014 421 inlägg
#22

Kke, inte snyggaste. Men om du bara är intresserad av att användaren finns i dbn:

<?php 

require '../includes/init.php'; 
$user = ($_POST['user']); 
$pass = ($_POST['pass']); 
$admin = new admin();
if ($admin->checkUser($user,$pass)) {
    // do the funk
} else {

header('Location: ../../public/guestbook.php');

}
class admin 
{ 
    protected $db = NULL; 

    public function __construct() 
    { 
        $this->db = db::getInstance(); 
    } 
    public function checkUser($user,$pass) 
    { 
        $sqlSelect  = "SELECT id, user "; 
        $sqlSelect .= "FROM members "; 
        $sqlSelect .= "WHERE user = ? AND pass = ? LIMIT 1"; 
         

        $stmtSelect = $this->db->prepare($sqlSelect); 
        $stmtSelect->execute(array($user,$pass)); 

        return is_array($stmtSelect->fetchAll(PDO::FETCH_ASSOC)); 
    } 
}

Pseudkod

tantenMedlem sedan nov. 20051 596 inlägg
#23

Ok då förstår jag vad som menas med pseudokod... :)
Jag ska försöka med det någon gång när jag undrar över något. Men i det här fallet så...
jag har ännu inte kommit på hur jag ska kunna stoppa någon från att gå direkt till sidan utan att logga in. Efter flera försök så är det enda jag gjort nu är att jag har stoppat in en index.php i public-mappen.

<?php
$path = 'admin.php';
require $path;
?>

Och därifrån så fungerar loggin helt perfekt. Kanske stoppar det någon... :)
Så jag fortsätter försöka... :i ?

aasahMedlem sedan mars 20034 471 inlägg
#24

tanten skrev:

jag har ännu inte kommit på hur jag ska kunna stoppa någon från att gå direkt till sidan utan att logga in.

När login-uppgifterna stämmer så sätter du (tex) en session med något värde. Sedan låter du gästbokssidorna kolla om det värdet är satt och annars skickar du iväg dem till inloggningssidan. Ett exempel som grundar sig på coliones kod ovanför:

<?php //Där inloggning kollas:
session_start();
require '../includes/init.php'; 
$user = ($_POST['user']); 
$pass = ($_POST['pass']); 
$admin = new admin(); 
if ($admin->checkUser($user,$pass)) { 
    // Här är man inloggad så...
   $_SESSION['s_ok'] = 1;   //Tag förslagsvis inte dessa namn på sessionsvariabler!!!
   $_SESSION['s_namn'] = $user;  //Lagra däremot INTE $pass!!!
} else { 
//Vad nu ej inloggad ska få se
} 

//Högst upp på de sidor du vill skydda!!!
session_start();
if (!isSet($_SESSION['s_ok']) || $_SESSION['s_ok'] != 1 || !isSet($_SESSION['s_namn']))
   header ('Location: /<path>/dittInloggningsSkript.php');

Där <path> ersätts med sökvägen på servern till ditt skript. Då skickas alla nyfikna till inloggningen.

Dock, notera att jag inte påstår att ovanstående kontroll stoppar hackers. Det finns många aspekter om man ska ha säkra skript!!! Men det där är en första aning om hur man gör...

colioneMedlem sedan juni 20014 421 inlägg
#25

För att säkra upp det kan du när du har låtit folk logga in lagra deras ip och sessionid i databasen, knutet till deras namn. I sessionen lagrar du användarnamn. På de sidor som du då ska säkra ställer du en fråga mot databasen där du i ditt where clause har med namn, sessionid och ip.

Dock blir jag lite fundersam. Du säger att du använder ett framework. Väldigt många php-framework har någon form av Authenticiering eller ACL inbyggt.

130 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)