• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[Erledigt] sessions?

Status
Für weitere Antworten geschlossen.

Fätzminator

Neues Mitglied
hallo zusammen

ich habe http://php.benscom.com/manual/de/ref.session.php durchgelesen, allerdings komme ich nicht wirklich draus...
ich würde gerne ein adminmenu (mit mehreren users) machen, bei dem die session in einem cookie gespeichert wird...
wo muss ich die speichern? gibt es da nicht eine id?
muss ich hierzu ne tab in mysql machen und sid's verteilen (und ggf wieder löschen)?

mfg, fätzminator

PS: ich habe auch auf html.de nichts vollständiges gefunden
 
Werbung:
wenn des sicher machen willst gibst die ids mit get oder den Session variablen weiter und liest auf jeder Seite die Session wieder aus der Datenbank!
 
Du musst die Session nur mit session_start() starten. Eine SessionId generiert PHP automatisch. Auch die Speicherung der Session-Daten übernimmt PHP für Dich, ohne dass Du was machen müsstest.
Auf allen "folgenden" Seiten musst Du auch nur session_start() aufrufen, alle Einträge in dem Array $_SESSION werden damit dann automatisch wieder hergestellt.

@leo: Warum sollte ich Daten manuell aus der Datenbank lesen? Das macht doch nur Sinn, wenn ich eigene Funktionen als Session-Handler registriere. Ob das dann sicherer ist möchte ich mal bezweifeln, allerdings erzeugt man damit eine nicht unwesentliche Last auf der Datenbank.
 
Werbung:
in einer sesion kannst du variablen von einer zur anderen seite weitergeben.

-> am anfang immer session_start();
-> für kurzfristigen aufenthalt wird automatisch ein cookie angelagt brauchst du dich also nicht drum kümmern.
-> willst du einen user auf diese weise länger einloggen dann musst du selber einen cookie erstellen denn du beliebung nennen kannst jedoch darf er nicht denn wert von session_id(); beinhalten...
 
wenn ihr meint es ist ja in vielen Login Systemen nicht umsonst der Fall:
test.de/login.php?id=3r45edncncm6567sxnaxcn
 
eben genau wo was will ich erreichen...
könnt ihr mir ein expliziptes codebeispiel geben, wie eine session gestartet werden soll... :oops:
ich weiss nicht, wie ich dann eine id kriege...
 
Werbung:
die id per url weitergeben ist dsehr unsicher cookie ist sinnvoller...

die id der aktuellen session erhällst du mit : session_id();
 
Werbung:
das heisst ich muss - nach erfolgreichem login - folgendes machen:
[php:1:dbed739000]<?php
session_start();
$_SESSION['user']=$user;
$sid=session_id();
echo "<a href=\"?sid=".$sid."\">blabla</a>";
?>[/php:1:dbed739000]
und wie kann ich hier überprüfen, ob die session noch gültig ist?
 
Indem Du (nach session_start()) $_SESSION['user'] überprüfst. Ist die Session abgelaufen, dann wird bei session_start() automatisch eine neue erzeugt, in der dann logischerweise $_SESSION['user'] nicht gesetzt ist.
 
Werbung:
Hat ja auch keiner gesagt. Aber um zu testen, ob die Session abgelaufen ist, muss er halt prüfen... Oder siehst Du noch ne andere Möglichkeit?
 
dh so soll ich es machen:
[php:1:f704c368df]<?php
session_start();
$sid=session_id();

if(isset($_SESSION['user'])) {
echo "<a href=\"?sid=".$sid."\">blabla</a>";
} else {
//hier kommt der ganze login...
$_SESSION['user']=$user;
}
?>[/php:1:f704c368df]
aber dann brauch ich doch gar keine $sid?
wie muss ich beim laden der site die alte sid übergeben, bbzw prüfen, ob die noch gültig ist?
 
Werbung:
Ich würde die SessionId nicht in die Url codieren, dann wird sie automatisch per Cookie transportiert. Dass kann bei Besuchern, die keine Sitzungs-Cookies in ihrem Browser dann zu Problemen führen, das ist aber besser, als ein Session-Fixation Angriff http://www.google.de/search?q=session+fixation+attack.

Auf jeder Seite, ausser natürlich der Login-Seite, baust Du dann sowas ein, oder lagerst es in eine Inklude-Datei aus.
[php:1:0cf47a2574]<?php
session_start();

if(isset($_SESSION['user'])) {
echo 'nicht angemeldet -> link zur login seite';
exit(0)
}
?>[/php:1:0cf47a2574]
 
ok ich habs kapiert...
es gibt in foren wie diesem die mögl, dass man immer angemeldet bleibt... allerdings kann ich ein cookie nicht auf unendl basis erstellen... wird da einfach ein cookie über 100j geschrieben?
wie kann ich überhaupt ne zeit setzen?
 
Genau. Da wird ein Cookie mit relativ langer Lebensdauer abgelegt. Diese kann als dritter Parameter von setcookie() als Unix Timestamp angegeben werden.

Die Lösung hat meiner Meinung nach aber zwei Nachteile.
Der praktische ist, dass viele Benutzer zwar Sitzungscookies annehmen, aber alle anderen Cookies mit Schliessen des Browsers gelöscht werden.
Der sicherheitstechnische ist, dass aus einer Authetifikation durch Wissen (Benutzername und Kennwort) eine Authentifikation durch Besitz (das Cookie) wird. Und so ein Cookie kann schnell mal gestohlen werden...

Genaue Implementierungsdetails kenn ich aber nicht, da wäre es wohl sinnvoll, mal den Quellcode von Foren o.ä. zu lesen.
 
Werbung:
ich frag mich immer, wie so was erkennt wird
also mit session_start() legt er bei keiner angabe ein cookie mit den angegebenen daten ab, sofern dieser nicht vorhanden ist? wenn dieser vorhanden ist, imkludiert er alle variablen?
 
Das Cookie enthält nur die SessionId. Die eigentlichen Variablen der Session werden auf dem Server z.B. in einer temporären Datei gespeichert. Sobald session_start() aufgerufen wird versucht PHP die SessionId zu ermitteln und liest die entsprechenden Variablen aus der Datei.

Um die SessionId zu transportieren, setzt PHP ein Cookie, dass dann auf allen folgenden Seiten abgefragt werden kann. Alternativ könnte die SessionId auch über die Url weitergereicht werden, aber das hatten wir ja schon.

Der Client hat also keine Möglichkeit die Session-Daten (außer der Id) zu verändern, da sie ja nicht bei ihm gespeichert werden.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben