Zum Inhalt springen

Hilfe bei Sessions


Woodstock

Empfohlene Beiträge

Hallo,

ich benötige für eine Webseite einen 'internen' Bereich. Habe im Netz etwas gesucht und mich für die Scripte auf DIESER Webseite entschlossen (oberer Teil).

Habe alles in die Webseite integriert, klappt auch wunderbar, nur bleiben die Benutzer ständig eingeloggt, so sie sich nicht ausloggen.

Kann mir jemand dabei helfen wie ich die Session zeitlich begrenzen kann? Oder die Session beendet wird wenn der Browser geschlossen wird?

Ich habe schon einiges versucht, aber es klappt immer nicht :(

Ach ja, das Script läuft auf gemietetem Webspace, ich kann also die php.ini nicht verändern soweit ich weiß.

LG Sabine

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab gerade nichts auf Lager, aber such mal nach "session timeout". Das kannst du im Normalfall setzen, und gibst somit an, wie lange eine Session "am Leben bleibt"

Das Schließen des Browser beendet übrigens auf jedenfall eine Session (ausser sie ist Cookie basierend)

Hoffe das hilft ein bisschen.

Viele Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

nun, muss wohl Cookie basierend sein, da ich selbst heute noch, wo der Computer bereits heruntergefahren und neu gestartet wurde die Session noch hat.

Deswegen ja meine Frage.

Und ich weiß einfach nicht wie ich das ganze einbinden muss (session timeout hab ich ja auch selbst schon gefunden). Habe mit Sessions keine Erfahrung, habe das noch nie selbst programmiert, und weiß deswegen nicht wo ich was einfügen muss.

LG Sabine

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

also, ich habe gerade noch mal geschaut, klappt doch nicht so wie ich gedacht habe.

Ich hatte etwas auskommentiert und dachte deswegen es würde klappen.

Also, ich habe alle Dateien außer der Intern.php erstellt. Ein Problem scheint es sowohl in der login.php zu geben.

Und zwar bekomme ich für die Variable $result ein Ergebniss zurück, aber wenn ich das Array dann auslese habe ich in den folgenden Variablen keine Daten.

Der Code der login.php sieht so aus:

<?php
// Session starten
session_start ();

// Datenbankverbindung aufbauen
$connectionid = mysql_connect ("localhost", "sabine", "Snoopy");
if (!mysql_select_db ("gollnick", $connectionid))
{
die ("Keine Verbindung zur Datenbank");
}

$sql = "SELECT "."Id, Nickname, Nachname, Vorname "."FROM "."benutzerdaten "."WHERE "."(Nickname like '".$_REQUEST["name"]."') AND "."(Kennwort = '".md5 ($_REQUEST["pwd"])."')";
$result = mysql_query ($sql);

if (mysql_num_rows ($result) >= 0)
{
// Benutzerdaten in ein Array auslesen.
$data = mysql_fetch_array ($result);

// Sessionvariablen erstellen und registrieren
$_SESSION["user_id"] = $data["Id"];
$_SESSION["user_nickname"] = $data["Nickname"];
$_SESSION["user_nachname"] = $data["Nachname"];
$_SESSION["user_vorname"] = $data["Vorname"];

// header ("Location: ergebnisse.php");
}
else
{
header ("Location: formular.php?fehler=1");
}
?>[/PHP]

Diese Zeile:

[PHP]// header ("Location: ergebnisse.php");

habe ich nur auskommentiert damit ich nicht automatisch weitergeleitet werde.

Wenn ich also nun versuche mit:

echo $data;

oder

echo $data[Nickname];

mir anzuschauen was drin steht bekomme ich nichts ausgegeben. Kann mir jemand sagen warum nicht?

LG Sabine

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Schließen des Browser beendet übrigens auf jedenfall eine Session (ausser sie ist Cookie basierend)

Das stimmt so aber gar nicht!

Eine Session ist solange vorhanden, bis die Session-Daten auf dem Server gelöscht sind.

Der Server legt die Session-Daten standardmäßig im temp Ordner als Textdatei mit Name = SessionID ab. Je nach Einstellung in der php.ini prüft er bei Neustart einer Session (irgendeiner Session, also der session_start Befehl) die letzte Zugriffszeit auf diese Datei und je nach Einstellung in der php.ini hat er eine gewisse Chance eine Datei zu löschen, wenn sie über der maximalen unbenutzen Lebenszeit liegt.

Solange diese Datei auf dem Server liegt, kann man mit der richtigen SessionID immer wieder auf sie Zugreifen. Das hat mit dem Browser nichts zu tun, wenn die SessionID z.B. in der URL übergeben wird (was ja dann nciht Cookie basierend ist) und ich diese URL bookmarke, kann ich diese Session theoretisch ein Leben lang benutzen, auch wenn ich den Rechner ausschalte zwischendurch usw.

nun, muss wohl Cookie basierend sein, da ich selbst heute noch, wo der Computer bereits heruntergefahren und neu gestartet wurde die Session noch hat.

Cookie basierend ist eigentlich der Standard. Wenn das nicht über Cookies ginge, dann hättest du an jeder URL ein Anhängels PHPSessID=872346iwjhfkfzo84tzsdhf7843843erh hängen. Mehr als diese beiden Möglichkeiten gibt es nicht um vom Browser die Session ID zu übermitteln.(Ok, theoretisch ginge auch über ein Post. Nur damit ich nix falsches erzähle ;) )

Hast du Zugriff auf die php.ini? Dann schau mal hier:

PHP: Sessions - Manual

Da stehen alle Einstellungen zu Sessions. Im Normalfall ist sie session.cookie_lifetime = 0, d.h. der Cookie soll gelöscht werden, wenn der Browser geschlossen wird. Da könnte z.B. ein anderer Wert stehen.

Außerdem könntest du dir im Browser mal die Cookies für deine Seite ansehen, da steht auch wann dieser Cookie verfällt.

Also eigentlich sollte es das sein, dass da eine cookie_lifetime eingetragen ist.

EDIT:

Nachtrag: Wenn du keinen Zugriff auf die php.ini hast, kannst du die Lifetime AFAIR auch bei session_start angeben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Oh! Dann tut mir die Fehlinformation leid. Ich hab hier 3 verschiedene Server von verschieden Anbietern am laufen und da ist es tatsächlich so, dass die Session "tot" ist wenn ich den Browser schließe und erneut die Seite öffne.

Bei ASP war das auch so (früher).

Muss dann wohl ein Zufall sein, dass es hier überall gleich ist.

Sorry:rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab hier 3 verschiedene Server von verschieden Anbietern am laufen und da ist es tatsächlich so, dass die Session "tot" ist wenn ich den Browser schließe und erneut die Seite öffne.

Dann ist die Session wohl Cookie basierend und die cookie_lifetime so gesetzt, dass der Cookie beim Browser schließen gelöscht wird. Aber der Browser kann mit der Session gar nichts zu tun haben, das verbietet schon die Zustandslosigkeit des HTTP-Protokolls (jede Anfrage ist vollkommen unabhängig und losgelöst von der vorhergehenden). Ausnahme ist hier eine Java-Session, wenn es denn so eine gibt. Da funktioniert das ja issl anders und ist nicht unbedingt zustandslos.

Sorry, ich wollte ja nur sagen wie es ist, wenn du dich jetzt so angegriffen fühlst kann ich ja nichts dafür.

Fakt ist aber, eine Session ist solange "aktiv" wie die Session Daten auf dem Server liegen. Und der Browser kann zum Glück nicht einfach irgendwas auf dem Server löschen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

danke Euch allen, inzwischen klappt es, ich hatte in der Zeile:

if (mysql_num_rows ($result) > 0)

hinter dem > auch noch ein =. Das und dass ichzwischendrin mal das Passwort geändert hatte waren die Probleme.

Scheint bei meinem Anbieter auch der Fall zu sein dass die Session beim Schließen des Browsers beendet wird, denn wenn ich es ausprobiere muss ich mich danach neu anmelden.

Das reicht mir im Grunde. Es geht nur darum dass die Session nicht ewig geöffnet bleibt.

LG Sabine

Link zu diesem Kommentar
Auf anderen Seiten teilen


// ...
$sql = "SELECT "."Id, Nickname, Nachname, Vorname "."FROM "."benutzerdaten "."WHERE "."(Nickname like '".$_REQUEST["name"]."') AND "."(Kennwort = '".md5 ($_REQUEST["pwd"])."')";
// ...
[/PHP]

Moin,

mal nebenbei: ich an deiner Stelle würde anstatt

Nickname like '".$_REQUEST["name"]."'

lieber schreiben

Nickname = '".$_REQUEST["name"]."'

Bei deiner Ähnlichkeitssuche (like) würde jemand durch Eingabe von "%" in Name und "geheim" in pwd als der erste Benutzer mit "geheim" als Passwort eingeloggt ...

Reinhold

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde sogar soweit gehen und


$name = mysql_real_escape_string($_POST["name"], $connectionid);
...
$sql = "... NAME = '$name' ...";
[/php]

Damit hast du erstens den Zugriff auf nur die Post-Übergabe beschränkt ($_REQUEST ist es egal woher die Daten kommen, GET oder POST), und du übergibst die Nutzereingabe nicht einfach so direkt an die DB. mysql_real_escape_string filtert "böse" Eingaben aus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...