Session verlängern

just-click

Erfahrenes Mitglied
Hi,

ich hab folgendes Problem:
Ich habe auf einer Webseite einen Login, welcher dann in die Session die ID einschreibt (noch relativ normal). Beim Testen und beim selber verwenden ist mir nie ein Fehler aufgefallen oder ähnliches, nur wenn der Administrator sich einloggt verfällt die Session immer relativ schnell, ca. 2 min.
ich habe nun auch schon mit dem Befehl ini_set('session.gc_maxlifetime',xxx);
gearbeitet aber entweder verwende ich diesen falsch oder es hat keine Auswirkung. In der PHPInfo steht auch eine Lifetime von 1800.

hier mal der kurze Auszug:
PHP:
<?php 
  error_reporting(E_ALL);
  include('inc/functions.php');
  ini_set('session.gc_maxlifetime',1800);
   if(isset($_GET['section']) AND ("admin" == $_GET['section'])) {
       session_start();
       if(!isset($_SESSION['IP'])) {
           $_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];
       }
       if($_SESSION['IP'] != $_SERVER['REMOTE_ADDR']) {
           echo "<p>\n";
           echo "    Ihre Sitzung ist abgelaufen,\n";
           echo "    bitte melden Sie sich erneut an.\n";
           echo "    \n";
           echo "    <a href=\"http://www.tsvgambach.de/\">Zurück zur Homepage</a>\n";
           echo "</p>\n";
           die();
       }
   }
[...]

Wie ist es nun möglich die Session so zu verlängern, dass der User auch seine halbe Stunde eingeloggt bleibt?
Oder soll ich vllt lieber auf Cookies umsteigen?

Mfg,
Marcel
 
Erstmal hi und frohe Weihnachten. :)

Also die Verwendun der Session und von ini_set() scheint mir richtig zu sein. Ich vermute das Problem besteht darin, dass du die IP speicherst und vergleichst. Nicht alle haben im Web eine feste IP. Einige Provider wechseln ständig die IP-Adressen, dass könnte bei deinem Admin der Fall sein. Verzichte zunächst einmal auf den IP Check und lass den Admin nochmal testen, ob die Session immer noch so kurzlebig ist.

Man sollte im Normalfall keinen IP-Check in die Session einbauen, wegen des oben genannten Problems. Sinnvoller ist es, stattdessen (falls der Browser ihn mitsendet) den User-Agent Header zu verwenden, da dieser sich im Normalfall nicht ändern dürfte. Das ist zwar nicht so sicher, aber immerhin etwas. In PHP könntest du das evtl. so regeln:
PHP:
if(isset($_SERVER['HTTP_USER_AGENT']))
{
  if(!isset($_SESSION['user_agent']))
  {
    $_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
  }
  elseif($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT'])
  {
    exit;
  }
}
Überprüfen, ob die Session abgelaufen ist, solltest du am besten in dem du noch eine weitere Variable setzt, sobald sich jemand einloggt, und auf allen am Anfang prüfst, ob die Variable in der Session gesetzt ist. Wenn nicht, dann ist die Session abgelaufen.

Hoffe das hilft weiter.
 
Danke für die Hilfe
Ich probiers jetzt mal mit dem User-agent-Header, da die Seite eh nicht viele Besucher hat, wirds schon schief gehen :D und dann fehlt ja auch immer noch die ID + Passwort ;).

Nur wunderts mich, dass bei der Telekom dann eine ständig ändernde IP vergeben wird. Naja ich werds wohl erst nach den Feiertagen ausführlich testen können.

Soweit schonmal danke!
 
Zurück