# Bestimmte Session zerstören



## mastermannrw (8. Januar 2005)

Ich möchte gerne bestimmte Sessions, die nicht mit der eingeloggten Session in verbindung stehen, löschen.
So viel ich weiß, bezieht sich SESSION_DESTROY() immer auf die aktuelle, aktive session.
Gibt es eine Möglichkeit, eine Session mit einer anderen ID zu zerstören?

Danke.


----------



## Devil Noxx (8. Januar 2005)

Warum willst du das machen?
Eine Session steht immer in Verbindung mit dem Benutzer, und mit sonst keinem anderen.
D.h. [phpf]session_destroy[/phpf] zerstört nur die Session vom aktuellen Benutzer.

Du kannst höchsten bestimmte Daten aus der Session löschen/zerstören.
Dies machst du dann z.b. so:

```
unset($_SESSION['beliebigerIndex']);
```

Gruß

Devil


----------



## mastermannrw (8. Januar 2005)

Also. In meinem Script läuft eine Überwachung der User, die Online sind. Sind diese mehr als 10 Minuten inaktiv, werden sie aus der Datenbank gelöscht. Zusätzlich soll die dazugehörige Session zerstört werden. Denn es bringt mir ja nichts, wenn die Session immer noch gültig ist, wenn der User angeblich nicht mehr Online ist.
Oder hast wer eine andere Idee, wie sich das lösen läßt?


----------



## Devil Noxx (8. Januar 2005)

Achso das meinst du.
In der php.ini gibt es eine Einstellung welche _session.gc_maxlifetime_ heisst.
Diese hat standardmässig den Wert _1440_. Der Sinn dieser Einstellung ist, dass eben nicht mehr gültige Sessions nach 1440 Sekunden bzw. 30 Minuten automatisch gelöscht werden. 
Darüber musst du dir also keine Sorgen machen.

Gruß

Devil


----------



## Gumbo (8. Januar 2005)

Wenn du diese Einstellung ändern möchtest, kannst du dies mit der ini_set()-Funktion machen.


----------



## mastermannrw (27. März 2005)

Hab eine andere Lösung gefunden, da diese irgendwie nicht zuverlässig arbeiten. Warum, weiß ich nicht. Aber Danke Ecuh für die Hilfe.


----------



## mastermannrw (5. April 2005)

Das Theam läßt mich nicht los. 



Warum habe ich, nachdem ich eine Session mit destroy_session() im Logoff-Script zerstört habe, wieder exakt die gleiche Session ID, wenn ich mich dann neu anmelde?
Is das normal oder leigt das am Code? Kennt dieses Problem jemand und kann direkt sagne Ahja, Du hast das und das Falsch gemacht?

Wie zerstöre ich zuverlässig einen Cookie?

Und zum Verständnis: Mit Session_start() erzeuge ich eine Session. Diese Funktion ist doch schon dafür zuständig, mir eine Session_id zu erzeugen oder? Danach wird Clientseitig ein Cookie zur Identifikation abgelegt. Die Anderen Sessionsachen, die nach dem Schema $_SESSION['var']=1 programmiert werden, landen auf dem Server. Ich hoffe, das ich das so weit richtig habe.
Wenn nun in einem Script session_start() aufgerufen wird, wird automatisch nach dem Cookie geschaut und wenn der da ist, wird die Session fortgesetzt.
Und nu dürft Ihr mich auseinander nehmen, weil ich keine Ahnung habe.


----------



## Dennis Wronka (5. April 2005)

mastermannrw hat gesagt.:
			
		

> Wie zerstöre ich zuverlässig einen Cookie?



Ich mach das ungefaehr folgendermassen:
Cookie setzen:

```
setcookie("id",$userid,time()+3600);
```
Cookie loeschen:

```
setcookie("id",$userid,time()-3600);
```


----------



## mastermannrw (5. April 2005)

Stellt sich für mich jetzt die Farge, wie die ID bei einem Session Cookie ist.

Nach ein wenig rumprobieren kommt mir der Verdacht, das sich die Cooki_lifetime nicht ändern läßt. Der Cookie ist immer bis zu schließen des Browsers gültig, obwohl ich direkt vor Session_start() den session_cookie_set_parameters() benutzt habe. Oder muß der vor wirklich jedem session_start() stehen? Doch eine sehr komplizierte Geschichte mit den Sessions. Oder ich hab heute nicht genug Hirnschmalz für sowas.


----------



## Dennis Wronka (5. April 2005)

mastermannrw hat gesagt.:
			
		

> Stellt sich für mich jetzt die Farge, wie die ID bei einem Session Cookie ist.
> 
> Nach ein wenig rumprobieren kommt mir der Verdacht, das sich die Cooki_lifetime nicht ändern läßt. Der Cookie ist immer bis zu schließen des Browsers gültig, obwohl ich direkt vor Session_start() den session_cookie_set_parameters() benutzt habe. Oder muß der vor wirklich jedem session_start() stehen? Doch eine sehr komplizierte Geschichte mit den Sessions. Oder ich hab heute nicht genug Hirnschmalz für sowas.


Ich meine mich zu erinnern, dass das vor jedem session_start() stehen muss. Am besten mal auf php.net die Doku zu session_cookie_set_parameters() checken, ich mein da steht was dazu.
Einen Session-Cookie kannst Du ueber $_COOKIES meines Wissens nach so ansprechen:

```
setcookie(session_name(),...
```



			
				Devil Noxx hat gesagt.:
			
		

> Der Sinn dieser Einstellung ist, dass eben nicht mehr gültige Sessions nach 1440 Sekunden bzw. 30 Minuten automatisch gelöscht werden.


1440 : 60 = 24
Es sind 24 Minuten.


----------



## mastermannrw (5. April 2005)

Wenn das alles so Einfach wäre. Aber ich bastel mich gearde durch. Ich bau den ganzen "Käse" noch mal von vorn auf.


----------



## mastermannrw (5. April 2005)

So, ich glaube, ich habs. Denke das das zusammenspielt von session_set_cookie_param und session_start nicht richtig war.


----------



## Dennis Wronka (5. April 2005)

Hast Du's jetzt jedes Mal vor session_start() ?


----------



## mastermannrw (5. April 2005)

Ja.  Das wars ebend, was ich ständig überhört btw. überlesen habe.
Wenn ich jetzt die Cookie_liftime auf 10 sekunden setze, müßte ich doch alle 10 sec. eine neue SID bekommen oder?

```
$session_id_old=session_id();
$cookie_old= session_get_cookie_params();
session_set_cookie_params(5,"/","hallo");
ini_set("gc_maxlifetime","5");
session_start();
$cookie_new= session_get_cookie_params();
$session_id_new=session_id();
echo $session_id_old."<-->".$session_id_new;
echo "<br>".$cookie_old['lifetime']."<--->".$cookie_new['lifetime'];
session_destroy();
```

Das scheint immer noch nicht zu funktionieren. Oder muß ich die "Lebenszeit" einer Session auch noch manipulieren?


----------



## Dennis Wronka (5. April 2005)

Theoretisch schon denk ich.
Ich kann mir nur vorstellen, dass das Problem dabei sein wird, dass Du basierend darauf kein Login-System aufbauen kannst.
Wenn der Cookie alle 10 Sekunden geloescht wird gehen damit auch die Login-Daten verloren und der User ist wieder ausgeloggt.


----------



## mastermannrw (5. April 2005)

reptiler hat gesagt.:
			
		

> Theoretisch schon denk ich.
> Ich kann mir nur vorstellen, dass das Problem dabei sein wird, dass Du basierend darauf kein Login-System aufbauen kannst.
> Wenn der Cookie alle 10 Sekunden geloescht wird gehen damit auch die Login-Daten verloren und der User ist wieder ausgeloggt.


Die 10 Sekunden sind doch nur zum testen.  Ich mag nicht immer x STunden warten wollen.


----------



## Dennis Wronka (5. April 2005)

Okay, zum Testen wirst Du es wohl mal verwenden koennen.


----------

