Antworten auf deine Fragen:
Neues Thema erstellen

session_destroy funktioniert nicht zuverlässig

rw1981

Nicht mehr ganz neu hier

Hi!

Sorry, ich hab noch eine Frage...


ich beende hiermit meine Session:

Code:
<?php
if (isset($_GET['logoff']) && $_GET['logoff'] == 1) {
  session_unset();
  if (isset($_COOKIE['PHPSESSID'])) {
    setcookie("PHPSESSID", "", time()-86400);
  } 
  session_destroy();
  $status = "Status: erfolgreich ausgeloggt";
} 
?>

Wieso wird aber die gleiche session-ID vergeben, wenn ich mich im gleichen browserfenster wieder einlogge. Das dürfte doch garnicht sein, wenn die session "destroyed" wird, oder?

DANKE!

lg
 

K

KutluBozkurt

Guest

AW: session_destroy funktioniert nicht zuverlässig

Hi,

auf einem Server oder lokal?

Weitere Infos zur Behandlung von Session findest du unter: PHP: session_destroy - Manual

man kann es lokal auch ausführen, aber dafür muss man php.ini bearbeiten... (Dies könnte vielleicht weiterführen: Sessions in PHP - php.ini)


und mein freund ich glaub du hast session und cooke verwechselt...
wenn du session benützt musst du auch session_start einsetzen an erste stelle... (PHP-Einfach.de - PHP Tutorial - PHP Session)
und wenn du cookies benützt kannst du sie erst beenden wenn du cookie time zurücksetzst ()

ich hoffe das war hilfreich genug
 

rw1981

Nicht mehr ganz neu hier

AW: session_destroy funktioniert nicht zuverlässig

So, sorry für die späte Antwort!

Dank den Links habe ich es gelöst, ABER ich verstehe es nicht ganz.

Hier der funktionierende Sessionkiller:

PHP:
<?php
include "sessionheader.inc.php";
if (isset($_SESSION['login']) && $_SESSION['login'] === true) {

$_SESSION = array();

  if (ini_get("session.use_cookies")) {
    setcookie(session_name(), '', time() - 42000, '/');
}

  session_destroy();
  $status = "Status: erfolgreich ausgeloggt";
}
header("Location: index.php");
?>
Das Problem war wohl das fehlende Verzeichnis beim Löschen des cookies.
Das ganze funktioniert nur wenn ich " '/' " hinzufüge!

Warum ist das so?



DANKE und liebe Grüße
Rene



PS: @kutlubotzkurt: Die session starte ich in einer anderen Datei, in der dann der gezeigte Codeschnipsel includiert wird....
 
D

Devilman

Guest

AW: session_destroy funktioniert nicht zuverlässig

Hallo!

hmmm... Eigentlich sollte es absolut reichen nur session_destroy zu benutzen. Das Cookie braucht man gar nicht extra zu löschen. Selbst wenn es noch auf dem Client vorhanden sein sollte ist die Session ja leer. Also ohne gespeicherte Daten und darauf kommt es ja an, dass es keine Informationen mehr enthält.

Was ich nicht verstehe ist das:
PHP:
$_SESSION = array();
$_SESSION ist eine superglobal Variable und braucht nicht extra definiert zu werden. So würde man auch nur ein leeres Array erzeugen.

Da am Ende der User dann auch umgeleitet wird und eine andere Seite geladen wird bringt es auch nichts einen Statustext zu speichern da ja ein neues Script geladen wird. Man könnte höchstens einen String per GET im Header übertragen.

Das Script sessionheader wird auch nicht benötigt.

Meiner Meinung nach würde das hier vollkommen reichen:

PHP:
<?

if(isset($_SESSION['login'])){
   if($_SESSION['login']){
      $status = "Status: User erfolgreich ausgeloggt";
   }else{
      $status = "Status: User ist bereits ausgeloggt";
   }
}else{
  $status = "Status: Login-Session nicht gefunden";
}

session_destroy();

header("Location: index.php?status=".$status);

?>
Wie man sieht werden die Bedingungen (if) nur benutzt um einen Statustext zu erzeugen.

Wenn man den Statustext nicht benötigt würde das hier vollkommen reichen:
PHP:
<?

session_destroy();
header("Location: index.php");

?>
Noch ein kleiner Tipp:
Hiermit kannst Du Dir die Daten in Deiner Session schön anzeigen lassen.
PHP:
<?

echo "<pre>";
print_r($_SESSION);
echo "</pre>";

?>
 
Zuletzt bearbeitet von einem Moderator:

Taharkas

Noch nicht viel geschrieben

AW: session_destroy funktioniert nicht zuverlässig

@Devilman

PHP:
$_SESSION = array();
Die Variable $_SESSION wird in diesem Fall nicht neu deklariert, sondern bekommt als neuen Wert ein leeres Array. So kann man das Sessionarray auch leeren.

PHP:
header("Location: index.php?status=".$status);
Sollte hier nicht ein absoluter Pfad stehen? Die GET-Variable hinten dran sollte eigentlich zu einem Fehler führen.
Den Status könnte man z.B. im Cookie speichern und und an der entsprechenden Stelle ausgeben.
 

saila

Moderatorle

AW: session_destroy funktioniert nicht zuverlässig

Der absolute Path wäre richtig (wobei es ausnahmen geben kann, je nach Servereinstellung und php-ini-Einstellung) und in der php-Funktion header wäre korrekt:
Code:
header('Location: http://www.bal.de/', true);
exit();
Zumindest wenn php5 läuft.

Was es mit dem true auf sich hat, kann man bei php.net nachlesen.

Und abgesehen davon, ist es nur korrekt, wenn man Cookies auch löscht. Man gibt dem User etwas und man nimmt es wieder, wenn es nicht mehr benötigt wird. Das nennt man sauberes arbeiten und unterbindet das Zumüllen des User. Ob Session nicht mehr vorhanden oder leer......
 

Taharkas

Noch nicht viel geschrieben

AW: session_destroy funktioniert nicht zuverlässig

Und abgesehen davon, ist es nur korrekt, wenn man Cookies auch löscht.
Selbstverständlich hast Du da recht. Es geht hier in diesem Fall doch darum, eine Statusmeldung zum Logout auszugeben. Dazu würde ich durchaus den Cookie noch verwenden, da diese Ausgabe üblicherweise nur ein einziges Mal nach dem Ausloggen stattfindet. Das Cookie erst direkt nachder Ausgabe zu löschen stellt für mich kein Zumüllen des Users dar.
 
D

Devilman

Guest

AW: session_destroy funktioniert nicht zuverlässig

Man muss aber nicht zwingend das Sessioncookie löschen. Abgesehen davon wird es ja wahrscheinlich sowieso sofort wieder erzeugt wenn man session_start() aufruft. Ich denke das löschen der Sessioncookies kann man durchaus dem Browser überlassen.

Alle anderen Cookies die z.B. aktuelle Sprache oder ein Warenkorb etc. enthalten sollten natürlich entfernt werden. Aber es geht ja um die Session.

Ein neues Cookie erzeugen um eine Statusmeldung nach dem Logout weiter zu reichen halte ich persönlich nicht für eine besonders elegante Lösung.

Ich arbeite in dem Fall immer mit Statuscodes. Den jeweiligen Text zum code hab ich in der Datenbank. So braucht man nur noch status=1 (nur als Beispiel) per GET übertragen. Das gleiche mache ich auch mit Errorcodes.
 
Zuletzt bearbeitet von einem Moderator:

rw1981

Nicht mehr ganz neu hier

AW: session_destroy funktioniert nicht zuverlässig

Hi Leute,

danke für Eure Diskussion!

Leider bin ich noch zu neu, um Euch komplett folgen zu können.
Ein paar Fragen hab' ich daher noch...

Lasst mich nochmal zum Löschen des Cookies kommen, weil ich das echt gern verstehen würde.

Das hier funktioniert:

PHP:
  if (ini_get("session.use_cookies")) {
    setcookie(session_name(), '', time() - 42000, '/');
}

Wieso benötige ich aber das '/' am Ende?
Das ganze funktioniert nämlich nur mit diesem Zusatz!



Und meine andere Frage wegen dem header?
Wieso hat meine alte Variante ohne absolutem path trotzdem funktioniert?

Sorry, ich kapiere das alles nicht... komisch, dass es bei so etwas mehrere Möglichkeiten gibt!


ICH DANKE EUCH!
 

rw1981

Nicht mehr ganz neu hier

AW: session_destroy funktioniert nicht zuverlässig

Tut mir echt leid, wenn die Fragen absolut amateurhaft klingen, aber bitte lasst es mich verstehen! :)


DANKE
 

saila

Moderatorle

AW: session_destroy funktioniert nicht zuverlässig

Vielleicht wäre es einfach auch mal gut, hier das Thema für sich selbst zu erschließen: PHP: setcookie - Manual

Abgesehen davon schraubst du in Unkenntnis an den php-Einstellungen herum per ini_get(). Dabei hast du dir möglicherweise noch nicht einmal die Grundeinstellung angesehen, wie php auf dem Sever eingestellt ist bzgl. session-handling. Hier wäre ein Blick in:
Code:
echo phpinfo();

angebracht, bevor man etwas ändern will.
 

rw1981

Nicht mehr ganz neu hier

AW: session_destroy funktioniert nicht zuverlässig

Vielleicht wäre es einfach auch mal gut, hier das Thema für sich selbst zu erschließen: PHP: setcookie - Manual

Du hast vollkommen recht, aber glaub mir: ich lese wie ein Blöder!
Und auch wenn manche Fragen für Fortgeschrittene unnötig klingen, so sind viele Dinge für Anfänger trotz eigener Recherchen dennoch nur sehr schwer zu verstehen.
Danke für deinen Link, ich kenne ihn… leider verstehe ich ihn nicht, da sich mir absolut nicht erschließt was '/foo/' heisst.
 

saila

Moderatorle

AW: session_destroy funktioniert nicht zuverlässig

foo bzw. bar ist ein angloamerikanisches Wort bzw. Begriff, welcher Synonym für x oder y steht. Es gibt einen Kinofilm (Titel ist mir entfallen), in welchem auch das Wort Foobar mehrfach fällt. Dieser Begriff ist auch in den Dokumentationen verwendet worden und dient wie gesagt als Synoym für "/foo/" = Verzeichnis "bar" = Variable oder was auch immer.

Im Zusammenhang mit Cookie bzw. das setzen von Cookies ist /foo/ der Bereich bzw. das Verzeichnis, auf welches das Cookie gültigkeit hat. Ist also / gesetzt, ist das Cookie für die gesamte domain gültig. Wird hingegen ein Verzeichnis z.B. /verzeichnisA/ definiert, ist das Cookie ausschl. für dieses Verzeichnis gültig und der darin gespeicherte Wert kann auch nur innerhalb dieses Verzeichnises abgefragt bzw. zur Verfügung gestellt werden.
 

rw1981

Nicht mehr ganz neu hier

AW: session_destroy funktioniert nicht zuverlässig

foo bzw. bar ist ein angloamerikanisches Wort bzw. Begriff, welcher Synonym für x oder y steht. Es gibt einen Kinofilm (Titel ist mir entfallen), in welchem auch das Wort Foobar mehrfach fällt. Dieser Begriff ist auch in den Dokumentationen verwendet worden und dient wie gesagt als Synoym für "/foo/" = Verzeichnis "bar" = Variable oder was auch immer.

lol
Da kann ich ja lange überlegen, was das bedeutet. Ich dank dir!



Abgesehen davon schraubst du in Unkenntnis an den php-Einstellungen herum per ini_get(). Dabei hast du dir möglicherweise noch nicht einmal die Grundeinstellung angesehen, wie php auf dem Sever eingestellt ist bzgl. session-handling.

Dank dir für den Denkanstoß!

Ich habe das mehr oder weniger blind aus euren links übernommen: PHP: session_destroy - Manual

In meiner ersten Variante hatte ich das so auch garnicht drin.


Jetzt habe ich allerdings eine (funktionierende) Variante, von der ich tatsächlich weiß, wie sie funktioniert und warum was und wo steht:

PHP:
<?php
include "sessionheader.inc.php";
if (isset($_SESSION['login']) && $_SESSION['login'] === true) {

  session_unset();
  if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), "", time()-86400, '/');
  } 
  session_destroy();
  $status = "Status: erfolgreich ausgeloggt";
}
header('Location: http://www.eyes-on-fire.de/test/1/', true);
exit();
?>
Wie sieht das in euren Augen aus?

Viele liebe Grüße...

ICH DANKE EUCH
 

rw1981

Nicht mehr ganz neu hier

AW: session_destroy funktioniert nicht zuverlässig

PHP:
<?php
include "sessionheader.inc.php";
if (isset($_SESSION['login']) && $_SESSION['login'] === true) {

  session_unset();
  if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), "", time()-86400, '/');
  } 
  session_destroy();
  $status = "Status: erfolgreich ausgeloggt";
}
header('Location: http://www.eyes-on-fire.de/test/1/', true);
exit();
?>
Wie sieht das in euren Augen aus?

Viele liebe Grüße...

ICH DANKE EUCH


Was meint Ihr?
Ist das ok so?
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben