# Login Session Dauer bestimmen



## piti66 (26. Oktober 2007)

Hey,

ich habe ein Login Script was über Session läuft. Nun will ich gerne die Option "eingeloggt bleiben" einbauen. Kann ich denn der Session eine Dauer geben? Wenn ja wie mache ich dass?

Die Session setzte ich so:

$_SESSION['userid'] = $row['userid'];
$_SESSION['login'] = $row['login'];

Kommt dann ne PHPSESID raus, mit den Daten. In der Dauer steht dann halt "Am Ende der Sitzung drin". Dass möchte ich gerne beeinflussen. Geht dass?

mfg

Sebastian


----------



## Acriss (27. Oktober 2007)

Das geht nur mit Cookies:
setcookie('name', 'wert', time()+3600);
Das würde den Cookie auf eine Stunde setzen(3600sek)

für 2monate saehe das dann so aus:

setcookie('name', 'wert', time()+3600*24*60);
24h, 60Tage


----------



## piti66 (27. Oktober 2007)

Acriss hat gesagt.:


> Das geht nur mit Cookies:
> setcookie('name', 'wert', time()+3600);
> Das würde den Cookie auf eine Stunde setzen(3600sek)
> 
> ...



Mmmmh muss doch auch mit Session gehen, bist dir ganz sicher? Cookie ist mir viel zu Gefährlich. Man mist, noch jemand ne andere idee?
Trotzdem danke

mfg

Sebastian


----------



## Acriss (27. Oktober 2007)

Ja ich^^

Regel das doch via eines Datenbanksystems.
Wenn der User x mit der ip y eingestellt hat eingeloggt zu bleiben, dann ...


----------



## splasch (27. Oktober 2007)

Man kann in der Session auch die dauer festlegen aber meisten wird das von den Webhostern nicht gestattet bwz gesperrt aus Sicherheitssgründen.

Es gibt 2 möglichkeiten das einzustellen einmal in der Apache ini datei und einmal über einen php befehl.

Normal ist ein standartwert eingetragen der eben geändert werden kann.

Mfg Splasch


----------



## piti66 (27. Oktober 2007)

Hey und wie stelle ich es per php ein?

mfg

Sebastian


----------



## Acriss (28. Oktober 2007)

Warum ist dir Cookie zu gefaehrlich?


----------



## piti66 (29. Oktober 2007)

Mmmmh weil die doch zum Beispiel von anderen Rechnern ausgelesen werden können.

mfg


----------



## piti66 (29. Oktober 2007)

Okay und wenn ich das mit Cookies mache, wie mache ich es da am sichersten. Bei der Anmeldung nen Cookie setzen ist klar und welche Daten sollen rein? und wie?
Un beim nächsten Aufruf der seite dann schauen ob Cookie gesetzt, wenn ja auslesen und automatisch einloggen?

mfg

Sebastian


----------



## drucko (29. Oktober 2007)

Hallo,
ich geb auch mal meinen Senf dazu : 


piti66 hat gesagt.:


> Mmmmh weil die doch zum Beispiel von anderen Rechnern ausgelesen werden können.
> 
> mfg



Das stimmt einfach nicht. 
Cookies können nur von dem Rechner ausgelesen werden, der sie auch gesendet hat, bzw. sendet dein Browser die Cookies ZU diesem Rechner, wenn passende existieren, von "auslesen" kann man also eigentlich garnicht sprechen!
Irgendwie haben die Medien es geschafft zu verbreiten, dass Cookies gefährlich wären, dem ist aber nicht so! Ein Cookie ist einfach eine Schlüssel>Wert Kombination, die auf deinem Rechner gespeichert wird.


Zum Eingeloggt-bleiben-Problem:
Du könntest z.B. in der Datenbank zur User-Tabelle ein Feld "Loginhash" o.Ä. hinzufügen, in das du einen md5-codierten String einträgst, den du am Besten aus einer zufällig generierten Zeichenkette + Loginname o.Ä. generierst (Ist ne Einweg-Verschlüsselung, lässt sich also nicht zurückrechnen). Wenn dann ein User auf deine Seite geht, prüfen, ob das Cookie gesetzt ist (isset($_COOKIE['cookiename']), verhält sich im Umgang genau wie $_SESSION, $_GET oder $_POST). Wenn es gesetzt ist, mit der Datenbank abgleichen, ob der String aus dem Cookie mit dem aus der Datenbank identisch ist und wenn ja, kannst du dann entsprechend deine Session-Variablen setzen und sozusagen automatisch einloggen. Missbrauch wäre so nur möglich, wenn jemand seine Cookies manipuliert und genau diesen md5-Hash einträgt. Also vom Risikofaktor wie wenn man eine Session-ID weitergibt (Stichwort "Session-Injection"), nur dass Cookies zu manipulieren für Laien eigentlich noch komplizierter ist. Das ganze kannst du dann noch erweitern, z.B. ein weiteres Cookie mit dem Wert der ID des Users aus der Datenbank o.Ä.,
aber im Endeffekt befinden sich dann keinerlei Daten in den Cookies, mit denen man als potentieller Angreifer was anfangen könnte. (Benutzername und Passwort(!!) haben da drin nix verloren, in unverschlüsselter Form gleich 3mal nicht!)

MfG


----------



## piti66 (29. Oktober 2007)

Okay danke, da schaue ich doch mal, wie ich es am besten umsetze 

mfg

Sebastian


----------



## Radhad (30. Oktober 2007)

Beim Zend Framework ruft man die Methode rememberMe() von Zend_Session auf. Als Parameter übergibt man die lifetime in Sekunden. Diese Methode ruft dann folgende Methode auf, welche dem Session-Cookie PHPSESSID (Standard) eine Lifetime mitgibt!

```
/**
     * rememberUntil() - This method does the work of changing the state of the session cookie and making
     * sure that it gets resent to the browser via regenerateId()
     *
     * @param int $seconds
     * @return void
     */
    public static function rememberUntil($seconds = 0)
    {
        $cookieParams = session_get_cookie_params();

        session_set_cookie_params(
            $seconds,
            $cookieParams['path'],
            $cookieParams['domain'],
            $cookieParams['secure']
            );

        // normally "rememberMe()" represents a security context change, so should use new session id
        self::regenerateId();
    }
```
Wie man sieht, lässt sich das ganz einfach einstellen über session_set_cookie_params()


Gruß Radhad


----------

