Moin Moin...
Daensch hat gesagt.:
Die help-file hab ich sogar auf meiner Tastatur-Hotkeys gespeichert =) Allerdings fehlt es mir oft an wirklich guten erklärungen oder Beispielen.
Stimmt, es ist teilweise etwas oberflächlich. Zwar sind die Inhalte sehr gut, gehen aber häufig nicht tief genug in die Materie.
Daensch hat gesagt.:
Die Variante die SID in der URL weiterzugeben halte ich für ziemlich unüberlegt..
Ehm, stop! Reden wir jetzt aneinander vorbei? Die Session-ID wird in Cookies übermittelt, außer das geht nicht, dann in der URL.
Normalerweise gibst
Du doch keinem User eine URL mit angehängter SID?! Wie gesagt - die Session verfällt i.d.R. nach 3 Stunden...
Wie ich das realisiere:
Der Benutzer gibt Name/Kennwort ein und klickt auf Login. Ich überprüfe die Gültigkeit (in dem ich mit der Datenbank vergleiche) und reagiere entsprechend mit Fehler- oder Willkommens-Meldung. Außerdem speichere ich nun wichtige Merkmale in der (eigentlich gerade frisch begonnenen) Session, z.B. den User-Namen.
Beim Klick auf Logout wird der Username wieder aus der Session entfernt.
So kann ich auf jeder Seite auf
Username <> "" prüfen, um den Login-Status zu erkennen.
Ähnliches gilt für Zugriffsrechte o.ä. Ich speichere einen Status in der DB und nach Login in der Session, z.B. je größer, desto berechtigter. (Jedes Bit steht für eine Berechtigung und kann mit z.B: $
status & 0x02 > 0 abgefragt werden.)
Das heißt, dass alles, was der User macht, in der Session UND in der DB abgelegt werden muss. Beim nächsten Login werden diese Dinge wieder aus der DB geholt.
So hat sich auch schon Deine Frage mit dem Session-Namen erklärt, welcher also zunächst völlig uninteressant ist. Den Usernamen speicherst Du in der Session ($_SESSION['username'] = $username); oder so. Anders funkt
Nicht die SID speichern und hoffen, das beim nächsten Mal noch alles da ist!
zu GET und POST meinte ich eher folgendes Problem:
PHP:
echo $_GET("var"); // keine ausgabe
echo $_POST("var"); // ausgabe
Also, wenn Du
seite.php?var=irgendwas aufrufst, wirst Du mit
echo $_GET['var']; auch
irgendwas angezeigt bekommen (wichtig: Eckige Klammern - GET ist ein Array!). Für $_POST natürlich nichts.
Für Deine Experminetierphase würde ich Dir empfehlen, folgendes ins Skript aufzunehmen:
<FONT color=black>
PHP:
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
Dann bekommst Du eine Meldung, das
$_POST['var'] nicht definiert ist!
Das ganze gilt natürlich auch analog andersrum, wenn Du METHOD=POST verwendest.
Tipp: Wenn Du
$_REQUEST['var'] verwendest, ist var immer drin, egal ob über GET oder POST.
Wichtigste Frage:
ich kann direkt über die session id vom user abfragen oder?
d.h. ich mache meine STATUS Anfragen oder alles weitere dann mit folgendem sql code:
$result = mysql_query ("SELECT benutzerrecht FROM benutzer WHERE session_id = ".$_SESSION('id')."");
Nö. Erstens müsstest Du session_id() statt $_SESSION['id'] nehmen. Zweitens würde ich das wie gesagt nicht über die SID regeln.
Warte mal, ich bringe mal hier ein wenig Beispiel-Quelltext:
PHP:
DEFINE ( '_SALT', "irgendwasschönes" );
DEFINE ( '_STATUS_SUPERVISOR', 0x80 );
.
.
// sql_get_value ist eine vorher von mir definierte Funktion, die halt genau den Wert zurückgibt, den ich über die Query übergebe...
.
.
// Starte Login-Versuch:
$db_pwd = sql_get_value ( sprintf ( "SELECT DECODE(password, '%s')
FROM user
WHERE nickname='%s'",
_SALT, $POST['username'] ) );
if ( mysql_affected_rows() == 1 )
{
if ( $password == $db_pwd )
{
$_SESSION['USER'] = $_POST['username'];
$status = sql_get_value ( sprintf ( "SELECT status FROM user
WHERE nickname='%s'", $_SESSION['USER'] ) );
$_SESSION['SUPERVISOR'] = ( $status & _STATUS_SUPERVISOR ) > 0 ;
// usw....
} // if password
else
echo "Falsches Passwort";
} // if mysql_affected_rows
else
echo "Benutzer unbekannt";
.
.
PS: Du solltest mal ein TUT über Sessions schreiben =) Thema:Session´s und Ihre Funktionen.. du kannst es ziemlich gut verständlich ausdrücken und nich wie die meisten verrückten goldmember einen zutexten das man sich das und dies tut durchlesen soll >=) like
Naja, dem einen oder anderen würde es wirklich mal helfen, zuerst das Handbuch zu lesen anstatt sofort voreilig einen Hilfeschrei ins Forum zu posten. Andererseits bin ich der Meinung, dass ein Forum dazu da ist, den anderen zu helfen und nicht übertrieben mit seinem eigenen Superwissen zu prahlen.