Session IDs

sonicks

Erfahrenes Mitglied
Also wie ihr wohl jetzt schon bemerkt habt, bin ich grad dabei sessions zu lernen. Bis jetzt hat auch alles gut geklappt , aber eines hab ich noch nicht so wirklich verstanden und zwar das ganze mit der Session ID.

Also beispiel jetzt mal was ich meine:
Ich habe einen Nickname, der eingeloggt ist. Dort kann man auf ne Memberliste klicken. Die memberliste liest aus der DB die Namen aus und zeigt sie an. Jetzt kann man in seinem Profil noch seine e-mail adresse zum Beispiel angeben doch wie bekomm ich es hin das die E-mail zum zugehörigen Namen angezeigt wird. Versteht ihr was ich meine? Die email muss ja irgendwie zum nickname gehören... also muss man des ja irgendwie definieren.

PHP:
<?php
    session_start();
    include('var.inc.php');
    
    if ((!isset($username)) OR (!isset($passwort)))
    {
        die ("Du hast keinen Namen oder PW angegeben!");
    }

    $conn = @mysql_connect($dbserver,$dbuser,$dbpass);

    if (!$conn)
    {
        die ("Sorry, Verbindungsversuch zur Datenbank ist fehlgeschlagen !");
    }

    mysql_select_db($dbname,$conn);
    $query = "SELECT pass, level FROM zugriff WHERE name = '".$username."'";
    $result = mysql_query($query,$conn);
    $result = mysql_query("SELECT pass, level FROM zugriff WHERE name = '$username'",$conn);
    $zeileholen = mysql_fetch_array($result,MYSQL_ASSOC);
    mysql_close($conn);

    if (!$zeileholen)
    {
        die ("Sorry, aber dieser Name ist nicht registriert");
    }

    if ($zeileholen["pass"] <> $passwort)
    {
        die ("Sorry, aber dieses Passwort passt nicht zum Namen!");
    }

    $level = $zeileholen["level"];
	

    session_register('username');
    session_register('level');
    header ("Location:./logged/check.php");
?>
<html>
<body bgcolor="9b9b9b">
</body>
</html>

Was is falsch? Wie muss ich das machen ?
 
Mh .. verstehe ich das jetzt richtig ?

Dein Nutzer loggt sich ein.
Der Nutzer klickt auf Profil editieren (oder Ähnliches) und gibt in einem Feld
seine Email Adresse an ?
Du möchtest das in dem Profil die Daten des eingeloggten Nutzers stehen ?

Ganz einfach eigentlich :

Du prüfst ob der Nutzer die richtige Kombination aus Name/Passwort hat.

Danach erstellst du die Session.

In diese Session speicherst du deinen
Nutzernamen.

Du gibst die Session ID weiter an den nächsten Script. Entweder über GET(URL),
POST(Hidden-Field) oder COOKIE.

In dem nächsten Script liest du einfach aus der Session aus (Starten nicht vergessen) und machst damit die DB Abfrage für dein Profil.

Code:
Also im Sinne von : SELECT * FROM tbl WHERE user = $_SESSION[user].

So müsste das eigentlich gehen.

Gesetz der Fall ich habe dich richtig verstanden.

Gruß,
Jonathan
 
jo jo jo ... richtig verstanden haste mich... nur eines is mir noch nicht klar, was bringt die session id. Naja und den genauen Befehl, für den wär ich dir dankbar... hab jetzt tausendma rumprobiert und hat nix geklappt
 
Eine Session-ID läuft normalerweise nach einer bestimmten Zeit ob, so dass sie nicht mehr aktiv ist. Das ist vor allem bei der Linkweitergabe wichtig.
Wenn man die Session-ID zu einer Seite weitergibt, auf der man eingeloggt war, könnte der andere, wenn die Session nicht ablaufen würde, in den selben Login-Bereich.

Aber bei den meisten Providern brauchst du dich darum nicht zu kümmern, da die Session-ID automatisch mitgegeben wird.

(^^ mein wissensstand, muss nicht 100%ig stimmen)
 
das beantwortet aber noch lange nicht meine frage ganz oben ;) Trotzdem thx, aber das hab ich au so halb gewußt. Nur wie man sie einsetzt
 
Ich spiel mal wieder den Erklärbär *G*:

Was sind Session ID's?:

Session Id's sind vom System generierte, eindeutige Zeichenketten, mit der User identifiziert werden können.

Wozu sind sie nutze?

Wenn sich ein User irgendwo eingeloggt hat, und authorisiert wurde, dass er die Seite betreten darf, kann man diesem User eine Session ID zuweisen. So weiß das System, dass dieser User authorisiert ist, denn wechselt der User von einer Unterseite zur anderen, müsste er sich sonst jedes mal authorisieren. Die Session ID's werden dem User entweder per Cookie oder per URL mitgegeben. Um sicher zu gehen, dass der User auch bei ausgeschalteten Cookies die Session ID bekommt, sollte an jede URL ein &SID angehangen werden. Dies ist eine Konstante, die vom System automatisch erstellt wird.

Was kann man dann noch anstellen?

Man kann Daten auf den Server speichern, die zu sensibel sind, als das sie auf den Rechner des Users gelangen dürften. So kann man beispielsweise die ID des Users speichern. Aber auch alle anderen Daten sind dort sicher aufgehoben, und können nicht ohne weiteres manipuliert werden.

Wie geht das?

Nachdem eine Session gestartet wurde, kann man Variablen mit der Funktion session_register() speichern. Dazu erstellt man eine Variable beliebigen Inhalts und übergibt den Namen dann als STRING an die Funktion:
$data = "irgendwas";
session_register("data");
Fortan steht auf jeder Folgeseite die Variable $data zur Verfügung.

Bei mir geht das nicht, warum?

Bei neueren PHP Versionen ist das automatische Bereitstellen von Variablen ausgeschaltet (register_globals). Das dient der Sicherheit und zwingt den Programmierer sichere Anwendungen zu programmieren. Man kann auch Session Variablen dann so zugreifen:
$data = $_SESSION[data];
Ähnlich erfolgt das ganze bei POST oder GET Variablen, also per Formular oder URL übergebenen Daten.
$stuff = $_[GET|POST][stuff]; für die Variable stuff. (Entweder GET oder POST).

Sind Sessions sicherer als Cookies?

Unbedingt, ja....weil Cookies auf dem Rechner des Users gespeichert werden und dieser die Daten somit manipulieren könnte, sollten sensible Daten nur in Sessions gespeichert werden. Auch könnte man den Datenverkehr zwischen User und Server belauschen, und so an sensible Daten gelangen. Deshalb den Datenverkehr immer auf's Notwendigste beschränken.
Session ID verlieren, wie oben beschrieben, nach gewisser Zeit die vom Server vorgegeben wird, ihre Gültigkeit. Dann muss sich der User neu einloggen. Dies dient zur Sicherheit, da sonst ein Angreifer durch Probieren eine Session übernehmen könnte.
Trojaner auf Seiten des User könnten also Session ID's ausspähen, aber völlige Sicherheit gibt es nie.

Nachtrag:
wie mans macht: man braucht, wenn man Seiten schützen will, zumindest eine Login Seite. Auf dieser wird das Formular zum einloggen bereit gestellt und wenn der User die Daten übermittelt hat, werden diese dort geprüft.
Ist der User authorisiert, kann man mit
@session_start();
die Session starten. Dann sollte man die ID des User übergeben, die in der Datenbank oder sonstwo gespeichert wird, damit der Session ID auch ein User zugeordnet werden kann:
session_register("userid");
wenn eine Variable $userid existiert.
Danach sollte man auf eine neue Seite weiterleiten. Wenn man dort @session_start();
an den Anfang des Scriptes setzt, überprüft der Server ob der User berechtigt ist, ansonsten verweigert er die Arbeit.. So einfach ist das. Sessions kann man bei Bedarf mit
session_destroy(); wieder löschen. Das @ vor session_start bewirkt, dass Fehler die durch diese Funktion entstehen nicht ausgegeben werden.
Nachtrag Ende.

So das wäre es erst mal was es so alles zu Sessions zu sagen gibt. Wenn es noch was zu klären gibt, immer her damit. Ich bin willig euch mein gesamtes bescheidenes Wissen zur Verfügung zu stellen.

Ciao, F.o.G.
 
Zuletzt bearbeitet:
vielen dank für die Beschreibung :)

Versteh ich auch alles... nur das beantwortet au nicht wirklich die Frage ganz oben (*moderator spiel* off topic ;) )

Dann noch die Frage zu dem &SID ... wie muss ich das machen? Weil genau das Prob hab ich das die User die Cookies deaktiviert haben sich nicht wirklich einloggen können.
 
ich hab noch einen kleinen Nachtrag hinzu gefügt.

Die SID kannst du einfach an eine URL anhängen:

echo "main.php?data=test&".SID;

oder wie auch immer. Im Prinzip ist es wie eine Variable zu behandeln, nur ohne $ davor.

Ciao, F.o.G.
 
also das mit der ID müsste dann theoretisch so aussehen:

PHP:
<?php
    session_start();
    include('var.inc.php');
    
    if ((!isset($username)) OR (!isset($passwort)))
    {
        die ("Du hast keinen Namen oder PW angegeben!");
    }

    $conn = @mysql_connect($dbserver,$dbuser,$dbpass);

    if (!$conn)
    {
        die ("Sorry, Verbindungsversuch zur Datenbank ist fehlgeschlagen !");
    }

    mysql_select_db($dbname,$conn);
    $query = "SELECT pass, level FROM zugriff WHERE name = '".$username."'";
    $result = mysql_query($query,$conn);
    $result = mysql_query("SELECT pass, level FROM zugriff WHERE name = '$username'",$conn);
    $zeileholen = mysql_fetch_array($result,MYSQL_ASSOC);
	$query = "SELECT id FROM zugriff WHERE id = '".$userid."'";
    mysql_close($conn);

    if (!$zeileholen)
    {
        die ("Sorry, aber dieser Name ist nicht registriert");
    }

    if ($zeileholen["pass"] <> $passwort)
    {
        die ("Sorry, aber dieses Passwort passt nicht zum Namen!");
    }

    $level = $zeileholen["level"];
	

    session_register('username');
    session_register('level');
	session_register('zaehler');
	session_register('userid');
    header ("Location:./logged/check.php");
?>

oder stimmt das nicht ?
 
Zurück