php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.03.2007, 14:22  
Neuer Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 24
noBody
Standard Denkfehler => Session Controll

Hi,

der Admin kann bestimmen, wie lange eine Session gültig ist, dass wird dann in einer DB gespeichert.
Jetzt wollte ich mit folgenden Script folgendes erreichen:

PHP-Code:
<?php
error_reporting
(E_ALL);

//SESSION CONTROLL

//wenn es eine User id gibt den die Session löschen, wenn die Zeit abgelaufen ist

if(isset($_SESSION['user_id']))
{
$user_info "SELECT login_time FROM board_user_login WHERE user_id = '".$_SESSION

['user_id']."'";
$user_time = new mysql($user_info);

$result_user_time $user_time -> select($user_info);

while(
$user_time_out mysql_fetch_assoc($result_user_time))
{
    
$logout_time $session_time+$user_time_out['login_time'];    

    if(
$user_time_out['login_time'] >= $logout_time)
    {
        
session_unset();
    }
}
}

//alle alten Einträge löschen

$old_session "DELETE FROM board_user_login WHERE login_time >= '".$session_time."'";
$delete_old_session = new mysql($old_session);

$result_old_session $delete_old_session -> select($old_session);
?>
Wenn man auf logout klick wird auch der Eintrag in der DB gelöscht.
Doch irgendwie klappt das alles nicht so wirklich.
Der Admin gibt die Zeit übrigns in Sekunden an.

Wo habe ich meinen Denkfehler gemacht?
noBody ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 29.03.2007, 15:07  
Erfahrener Benutzer
 
Registriert seit: 09.03.2005
Beiträge: 219
webbi
Standard

Irgendwie komme ich nicht ganz mit der Logik deiner Unset Bedingung klar. Könnte es sein, dass hier der Fehler liegt?

if($user_time_out['login_time'] >= $logout_time)
{
session_unset();
}

$user_time_out['login_time'] ist der Zeitpunkt an dem der User sich eingeloggt hat? Und ab da bleibt die Angabe unverändert bis zum nächsten Login?

$logout_time ist bei dir die gleiche Zeit + einen Wert den der Admin angibt. Passt von der Logik nicht, da dieser Wert immer größer wie der andere ist, weil du vergleichst: Loginzeit >= Sessiondauer + Loginzeit. Deshalb gibts auch nie einen Logout.

Du müsstest doch irgendwo noch die aktuelle Zeit unterbringen...

Also wenn: Loginzeit+Session_dauer <= AktuelleZeit dann logge aus.
webbi ist offline  
Alt 29.03.2007, 15:47  
Erfahrener Benutzer
 
Registriert seit: 12.05.2005
Beiträge: 1.038
PHP-Kenntnisse:
Fortgeschritten
notyyy befindet sich auf einem aufstrebenden Ast
Standard

session_start() ist aber aktiviert ?
notyyy ist offline  
Alt 29.03.2007, 19:41  
Neuer Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 24
noBody
Standard

Habe es jetzt wie folgt versuch:

PHP-Code:
<?php
error_reporting
(E_ALL);

//SESSION CONTROLL

if(isset($_SESSION['user_id']))
{

$date time();

$user_info "SELECT login_time FROM board_user_login WHERE user_id = '".$_SESSION

['user_id']."'";
$user_time = new mysql($user_info);

$result_user_time $user_time -> select($user_info);

while(
$user_time_out mysql_fetch_assoc($result_user_time))
{
    
$logout_time $session_time+$user_time_out['login_time'];    

    if(
$date >= $logout_time)
    {
        
session_unset();
        
session_destroy ();

        echo 
'<meta http-equiv="refresh" content="0; URL=index.php">';
    }
}
}

$old_session "DELETE FROM board_user_login WHERE login_time >= '".$session_time."'";
$delete_old_session = new mysql($old_session);

$result_old_session $delete_old_session -> select($old_session);
?>
Trotzdem bleibt die Session bestehen und logt mich nicht aus.
Obwohl die $session_time eigentlich nur eine Sekunde ist.
Ich verstehe die Welt nicht mehr.
Achja und session_start(); ist in der Index.php gesetzt wo diese Datei ^^ includet wird.
noBody ist offline  
Alt 29.03.2007, 20:20  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

"Du hast keinen Schimmer, was wirklich passiert, benutzt keinen Debugger und es fehlen die Behandlung für else-Fälle". Damit schicke ich Mitarbeiter normalerweise sofort wieder aus meinem Büro.
Also, bitte allermindestens
PHP-Code:
<?php
if(isset($_SESSION['user_id']))
{
...
    if(
$date >= $logout_time)
    {
    ...
    }
    else
    {
        echo 
__FILLE__,'@'__LINE__,": $logout_time = $session_time+$user_time_out[login_time]  => if($date >= $logout_time) false
"
;
    }
  }
}
else
{
  echo 
__FILLE__,'@'__LINE__,': $_SESSION[user_id] nicht gesetzt
<pre>'
;
  
print_r($_SESSION);
  echo 
'</pre>';
}
?>
und dann mal schauen.
Schnulli ist offline  
Alt 29.03.2007, 21:16  
Neuer Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 24
noBody
Standard

Sorry, ich habe nie richtig gelernt zu Debuggen.

Das ist die Ausgabe:

Code:
Notice: Use of undefined constant __FILLE__ - assumed '__FILLE__' in /home/webpages/lima-city/newwarrior/html/juca/session_controll.php on line 28
__FILLE__@28: 1175195711 = 1+1175195710 => if(1175195710 >= 1175195711) false
noBody ist offline  
Alt 29.03.2007, 21:21  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

Zeigt zwei Dinge
  1. wir schreiben beide gerne ein L zuviel. __FILE__ statt __FILLE__, control statt controll.
  2. die Bedingung if($date >= $logout_time) wird nicht erfüllt und deshalb wird die Session nicht beendet.
    Ich hab zwar auch eine Idee, wie das passieren kann, aber vielleicht schaust Du Dir besser nochmal selbst den Ablauf an, bevor ich wild rumrate.
Schnulli ist offline  
Alt 29.03.2007, 21:45  
Neuer Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 24
noBody
Standard

Also ich kann den Hacken nicht finden.
Liegt vielleicht daran, dass ich die letzten zwei Tage nichts anderes gemacht habe als Fehler auszubessern und meinen Code sauberer zu schreiben.
Sorry, könntest du mir nur einen Tipp geben ?
Danke
noBody ist offline  
Alt 29.03.2007, 22:09  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

Zitat:
echo __FILE__,'@', __LINE__,": $logout_time = $session_time+$user_time_out[login_time] => if($date >= $logout_time) false
";
Zitat:
1175195711 = 1+1175195710 => if(1175195710 >= 1175195711) false
sprich: $user_time_out[login_time] == $date == time()
Wenn das jedes Mal so ist, solltest Du Dir nochmal genau ansehen, wann und wie login_time in der Tabelle board_user_login aktualisiert wird.
Schnulli ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Session Problem karina_02 PHP Tipps 2008 6 18.05.2008 22:37
Session Variablen als Referenz!? O_o Sam781 PHP-Fortgeschrittene 4 01.10.2007 11:19
Problem bei session Lifetime Cyberbob_at_tot PHP Tipps 2007 5 05.06.2007 17:47
session nach seitenwechsel leer... GELight PHP Tipps 2006 8 17.09.2006 15:17
Session Logout Login Navigation TailerD PHP Tipps 2006 10 24.06.2006 17:12
session array Timo Trallala PHP Tipps 2006 18 22.04.2006 13:45
Frage zur Anwendung einer Session mehrfach... GELight PHP Tipps 2006 10 12.03.2006 16:47
[Erledigt] php session problem :( PHP Tipps 2005-2 5 21.10.2005 16:37
Klassenobjekt in ner Session speichern?! Finkman PHP Tipps 2005-2 5 09.08.2005 00:38
Session wird nicht angelegt PHP Tipps 2005-2 7 24.07.2005 13:35
Kreieren einer Session PHP Tipps 2005 11 28.05.2005 15:16
Session error nach Umstellung auf PHP 5 PHP Tipps 2005 15 13.05.2005 14:35
Session Problem PHP-Fortgeschrittene 3 18.02.2005 14:37
[Erledigt] Formulardaten in einer Session speichern, per Link übergeben PHP Tipps 2004-2 2 29.12.2004 15:47
[Erledigt] Hilfe...PhpBB Session Problem!! PHP Tipps 2004-2 2 15.12.2004 18:28

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php delete_old_session

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:44 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.