Sessions erstellen- Frage zur ID Übergabe
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
auslese
beispiel
benutzer
code
datei
datum
domain
ftp
funktion
http
login
match
meldung
normalfall
sache
schritt
session
speichern
text
url
-
Hallo erstmal an alle, ja auch an die, die mir jetzt wohl am liebsten den Kopf abreisen wollen ("Schon wieder so einer!").
Ich versuche jetzt zum ersten mal mit sessions zu arbeiten und habe dafür schon einmal b ei google gesucht.
Mit session_start() startet man die Session und ind $_SESSION['blabla'] = '....' kann ich als Array speichern, was ich will.
Was mich interessiert:
- Wie wird die ID am besten übergeben?
- Wie und wo speichern sich die Daten?
- Wie kann ich die Session wieder auslesen?
Wäre euch sehr dankbar für diese hilfe.
Ich habe shcon was gesucht, aber ich habe nichts von dem verstanden,w as da stand und im Gegensatz zu manch anderem, will ich evrstehen, was ich da tue.
Mfg
Mde -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
http://tut.php-quake.net/de/sessions.html
http://www.php.net/manual/en/book.session.php
Beitrag zuletzt geändert: 25.9.2009 14:57:56 von bladehunter -
1. Häh? Die ID hat dich im Normalfall nichts zu interessieren.
2. In die $_SESSION-Variable. Gespeichert wird das ganze auf die Festplatte (man kann den Pfad ändern, gibts ne Funktion für)
3. Im nächsten Script wieder ein session_start() [verwirrend. Es wird keine neue gestartet, sondern die alte weiter genutzt.] Und aus $_SESSION kannst du wieder auslesen.
€dit: Urlps. Sry. Bin da zu spät gekommen. Lima ist gerade unendlich lahm...
Beitrag zuletzt geändert: 25.9.2009 14:57:11 von nikic -
Köpfe werden nur abgerissen, wenn man keine konkreten Fragen stellt. Dein Thread ist aber vollkommen in Ordnung und deshalb mal die erste Antwort.
Die Daten werden auf dem Webserver in einer Datei gespeichert, welche so lang erhalten bleibt, bis die Session beendet wird.(Oder automatisch abläuft)
Man speichert Variablen in einer Sessionvariable
$_Session['variablenname']="Wert";
Auf jeder Seite in der du diese Variable brauchst muss die Session durch session_start() auch gestartet sein, dann kannst du auch auf diese Variablen zugreifen.
Wie man die ID am besten übergibt weiss ich leider nicht -
nikic schrieb:
3. Im nächsten Script wieder ein session_start() [verwirrend. Es wird keine neue gestartet, sondern die alte weiter genutzt.] Und aus $_SESSION kannst du wieder auslesen.
€dit: Urlps. Sry. Bin da zu spät gekommen. Lima ist gerade unendlich lahm...
Wird da automatisch dieselbe Session weiter benutzt?
ICh frage nur, weil ich das in den Tuts eben nicht so richtig evrstanden habe?
Kann ich eigentlich auch ne eigene Fehlerseite angeben, wenn die Session abgelaufen ist? (Sollte ich das jetzt lieber wieder löschen?) -
Die Session wird automatisch weiter genutzt. Um Sachen wie IDs braucht man sich nicht kümmern. Wenn du die Session killn willst, dann session_destroy().
Wenn die Session abgelaufen ist, wird normalerweise kein Fehler angezeigt. Weil man die Session (im Normalfall, wenn man welche nutzt) immer startet, kann man nur checken, ob zum Beispiel $_SESSION['user'] geissetet ist und eine Login-Meldung ausspucken, falls nicht ;) -
nikic schrieb:
Die Session wird automatisch weiter genutzt. Um Sachen wie IDs braucht man sich nicht kümmern. Wenn du die Session killn willst, dann session_destroy().
Wenn die Session abgelaufen ist, wird normalerweise kein Fehler angezeigt. Weil man die Session (im Normalfall, wenn man welche nutzt) immer startet, kann man nur checken, ob zum Beispiel $_SESSION['user'] geissetet ist und eine Login-Meldung ausspucken, falls nicht ;)
Also kann ich keine Seite speziell dafür machen, im Sinne "Ihre Sitzung ist abgelaufen, loggen Sie sich bitte erneut ein."?
Wäre für mich ganz hilfreich, aber eher als schönheitkorrektur, damit derjenige weiß, warum er sich neu einloggen muss.
Beitrag zuletzt geändert: 25.9.2009 15:13:16 von maechte-der-elemente -
Ja, das kannst du machen. Dabei musst du einfach nur abfragen ob eine Session des Benutzers mit seiner ID oder was auch immer existiert und er bereits von einer deiner Seiten kam, denn sonst sieht ein neuer Benutzer auch die Meldung und das willst ja nicht ^^
//edit: Simples Beispiel für sessions und cookie zur wiederkehr
session_name('meine_session); session_start(); if (!isset($_SESSION['user']) || !($_SESSION['user'] instanceof SessionUser) ) { // create or recreate ^^ $_SESSION['user'] = new SessionUser(); } // Cookie? if (isset($_COOKIE['meine_session_login'])) { // COOKIE? $cookieData = unserialize(stripslashes($_COOKIE['meine_session_login'])); // delete cookie on error if ($cookieData === false || !is_array($cookieData)) { unset($_COOKIE['meine_session_login']); // delete cookie $oneYear = 3600 * 24 * 356; setcookie('meine_session_login','',time() - $oneYear,'/'); } else { // load the users data... // hier kann code stehen der zb. die Benutzerdaten aus der DB lädt und mit dem Cookie abgleicht } }
SessionUser ist ein ganz normales Objekt das Werte festhält und keinerlei Funktionalität bietet.
Der Code sollte natürlich immer aufgerufen werden in einer Datei die immer von deinen anderen Seiten eingebunden wird.
Beitrag zuletzt geändert: 25.9.2009 17:52:41 von evil-devil -
Es stimmt zwar, dass man sich prinzipiell nicht um die Vergabe und Verwaltung der Session ID kümmern muss, doch entscheidet die Apache Einstellung, welches Verfahren genutzt wird.
Bei Lima ist
undsession.use_cookies=on
session.use_trans_sid=0
eingestellt. Das bedeutet, dass die Session ID in einem Cookie beim User gespeichert wird und nicht offen übergeben wird. Wenn ein User aber keine Cookies akzeptiert nützt das so nichts. Habe das bei einem 2. Webprojekt hier auf Lima schon testen können. Werden keine Cookies akzeptiert, verliert der User auch die Session Daten (z.B. wird man beim nächsten Klick nach einem Login direkt wieder rausgeworfen).
Will man auch Usern, die keine Cookies akzeptieren, den Komfort von Sessions gewähren, so muss die Session ID in der URL übergeben werden (welches durch use_trans_sid = 0 nicht automatisch geschieht). Und ob ein User das Cookie akzeptiert hat erkennt man ja erst im 2. Schritt. Dann ist die SID aber schon verloren.
Folgende Funktion kann da Abhilfe schaffen
// Funktion um Session ID an Links anzuhängen, falls SESSID nicht im Cookie gespeichert wird // ----------------------------------------------------------------------------------------- function scansid ($text, $domain, $basefolder) { if(!isset($_COOKIE[session_name()])) { $text = preg_replace_callback(',<form(?:[^>]+)action=\'(?:(?!https?://|ftp://|mailto:|news:|/)|(?:(?:https?\://(?:.+\.)?'.$domain.')?'.$basefolder.'))(?:[^>\'\s]+),ix', create_function( '$match', '$glue = strpos($match[0], \'?\') === FALSE ? \'?\' : \'&\'; return $match[0].$glue.session_name().\'=\'.session_id();' ), $text); return preg_replace_callback(',<a(?:[^>]+)href=\'(?:(?!https?://|ftp://|mailto:|news:|/)|(?:(?:https?\://(?:.+\.)?'.$domain.')?'.$basefolder.'))(?:[^>\'\s]+),ix', create_function( '$match', '$glue = strpos($match[0], \'?\') === FALSE ? \'?\' : \'&\'; return $match[0].$glue.session_name().\'=\'.session_id();' ), $text); } else return $text; }
Dann einfach vor der Ausgabe der Daten die Funktion scansid aufrufen.
Z.B.echo scansid($meineAusgabeDaten,$_SERVER['HTTP_HOST'], str_replace(preg_replace("/^.*\//","",$_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME'])
Da wie gesagt die Cookie-Daten erst im 2. Schritt abgefragt werden können, wird mit dieser Funktion die SID auch trotz Akzeptanz von Cookies einmalig an die URLs angehängt. Bei weiteren Klicks verschwindet sie aber wieder.
Das Weiterleiten der SID birgt aber leider die Gefahr, dass z.B. Fremde Zutritt zu einem Intranet bekommen können, sobald die URL an jemand anderen weitergeleitet wird.
Daher sollte man in $_SESSION['id'] die aktuelle ID des Users speichern und dann evtl. ein Zwangslogout durchführen, sobald sich die ID geändert hat.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage