Logo - MyWebsolution.de
User gesamt  :  1976248
User online  :  2
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
   
   
 
Registrieren Login User F.A.Q Suche Home

eingeloggt bleiben

MyWebsolution.de Foren » Workshops » Autologout

Seite: 1 2 3  > Posts pro Seite: 5 10 20
Autor Thread
23.03.2009 00:14 Uhr Autologout
strolch_007
Forenuser
 
registriert 16.03.2009
wohnt in
Beiträge 40
hallo,

habe mich jetzt mit dem workshop eingehend befasst und ich muß sagen. Hervorragend!
Trotzdem komm ich mit einem, nämlich dem Autologout, nicht so ganz klar.
Ich habe das Script bei mir eingebaut und funktioniert soweit auch wunderbar. Allerdings nur wenn ich die if-Anweisung -->Online Status der User aktualisieren weg lasse. Versteh ich das richtig das bei klick auf irgendwas die DB mit dem Feld "letzet_aktion" akualisert wird und dann gleich anschließend geprüft wird (User ohne Autologin ausloggen) ob der User 20 Minuten nicht aktiv war. Entweder hab ich da einen totalen "Wurm" im Kopf oder aber an dem Script stimmt was nicht, weil ein Script das vor ein paar Sekunden (letzte_aktion in DB) aktualisiert wurde, doch niemals die anschließend folgende 20 Minuten Bedingung erfüllen kann. Meine Denkweise ich muß ja irgendwas anklicken um eine Seite mit dem Script autologout zu starten, weil sich ja sonst das php (wenn es einmal durchlaufen wurde) nicht von selbst noch einmal startet.
Wo hab ich da den Denkfehler oder woran liegt das sonst? Ich poste mal vorsichtig mein Script, weils etwas lang ist hoffe ich das sich niemand drüber auffregt hier:-)

PHP:
    
<?php

       error_reporting
(E_ALL);
    
    
session_start();


                  
// eindeutigen Benutzernamen anhand von Session wählen
                  
$username $_SESSION['username']; 
                   
                  
    
$MYSQL_HOST 'xxxxxx';
    
$MYSQL_USER 'xxxxxx';
    
$MYSQL_PASS 'xxxxxx';
    
$MYSQL_DATA 'xxxxxx';

    
$connid mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS) OR die("Error: ".mysql_error());
    
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
    
    
//   ##### automatischer Logout  -  ANFANG     - Einbau in JEDE SEITE  !!!!
    
    
        // 1. Prüfen, ob ein Autologin des Users stattfinden muss
            // Dies Prüfung ist für User mit aktiviertem autologin
            // wenn sie sich nicht ausgelogt haben wird ihre Session ja   
                        // zerstörrt,
            // also wird nach einem gesetzten Cookie gesucht und die   
                        // Session (falls Cookie vorhanden)
            // wieder gestartet
            
    
if(isset($_COOKIE['autologin']) AND !isset($_SESSION['UserID'])){
        
$sql "SELECT
                        id
                FROM
                        xxxxx
                WHERE
                        autologin = '"
.mysql_real_escape_string($_COOKIE['autologin'])."'
               "
;
        
$result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        
$row mysql_fetch_assoc($result);
        if(
mysql_num_rows($result) == 1)
            
doLogin($row['id'], '1');
    } 
    
    
        
// 2. Online Status der User aktualisieren - Prüfung über letzte_aktion 
                //    ob ein User aktiv ist
            
if(isset($_SESSION['UserID'])){
            
                    
$sql "UPDATE
                                xxxxxx
                        SET
                                letzte_aktion = '"
.time()."'
                        WHERE
                                id = '"
.$_SESSION['UserID']."'
               "
;
               
        
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
    }     
    
    
        
// 3. User ohne Autologin ausloggen
                // wird nach 20 Minuten automatisch ausgeloggt, aber 
                                // nur wenn autologin nicht 
                // aktiviert wurde - Im Test sind nur 2 Minuten 
                                // eingestellt!
                
                
$sql "UPDATE
                                    xxxxxxx
                SET
                                    session_id = NULL,
                                    autologin = NULL,
                                    ip = NULL
                                WHERE

                    '"
.(time()-60*2)."' > letzte_aktion AND
                    autologin IS NULL
           "
;
    
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());     
    
    
        
// 4. Kontrollieren, ob ein automatisch ausgeloggter User noch eine 
                //    gültige Session besitzt
                // Sessions besitzen eine Lebensdauer von 24 Minuten, 
                                // kann also sein das trotzdem 
                // noch eine Session besteht. Deswegen erfolgt diese 
                                // Prüfung
                
    
if(isset($_SESSION['UserID'])){
        
$sql "SELECT
                        session_id
                FROM
                        xxxxx
                WHERE
                        id = '"
.$_SESSION['UserID']."'
               "
;
        
$result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        
$row mysql_fetch_assoc($result);
        if(!
$row['session_id']){
        
$_SESSION = array();
            
session_destroy();
        }
    }     
    
    
//   ##### automatischer Logout  -  Ende     - Einbau in JEDE SEITE  !!!!

?>


Wäre nett wenn mir jemand hier etwas helfen könnte. Evtl. hab ich ja auch nur einen gravierenden Denkfehler, irgendwo.....
Falls ich irgendwie, irgendwas irgendwo falsch gepostet habe oder so. Dann bitte ich um viel SORRY. Bin neu hier:-)

gruessle

strolch_007

Dieser Beitrag wurde am 23.03.2009 um 00:20:59 Uhr von strolch_007 zum 5. Mal editiert.
Profil ansehen
23.03.2009 10:19 Uhr
Flitze
Administrator
registriert 17.10.2006
wohnt in Eschwege
Beiträge 332
Hey Strolch,
diese Methode mit dem "Skript bei jedem Seitenaufruf laden" ersetzt quasi CronJobs, also zeitgesteuerte Skripte, da diese nicht von jedem Hoster angeboten werden.
Das Ganze funktioniert nur, wenn du schon ein paar Besucher auf deiner Seite hast, denn stell dir vor, du bist eingeloggt und machst 25 minuten nichts. In dieser Zeit kommt ein anderer User auf deine Seite ==> Das Skript zum ausloggen wird ausgeführt und wird dich, da du ja bereits seit 25 minuten inaktiv bist, ausloggen.
Wenn du der alleinige Benutzer deiner Seite bist dann funzt das leider nicht.. gibt aber dann ohne Cronjobs auch keine andere Möglichkeit, sowas zu realisieren ;)

Viele Grüße


Profil ansehen Mail senden
23.03.2009 22:41 Uhr Autologout
strolch_007
Forenuser
 
registriert 16.03.2009
wohnt in
Beiträge 40
Hallo,

danke für die schnelle Antwort! Also kann ich meine "Denke" und Sorgen über Bord werfen. Bin nämlich dann genau in die "Falle" mit nur einem User (zum Testen) getappt. - Und da funktioniert es dann natürlich nicht. Jetzt wo du das so anschaulich schreibst versteh ich das sogar und erscheint mir auch extrem logisch. Hab mir das (fast) gedacht das das als Ersatz für Cronjobs dient. :-) Ist einer der Gründe warum ich mich da so richtig rein gekniet habe um das zu verstehen, weil ich nicht so ein ganz doller Freund von Cronjobs bin (ohne jetzt hier eine Diskussion über Sinn- oder Unsinn von Cronjobs lostreten zu wollen).
Habe mir da aber noch einen Gedanken drüber gemacht. Wenn nun jemand auf meine Seite klickt und ich werde ausgeloggt. Dann steh ich ja weiter auf dieser Seite rum (irgendwo im Innenbereich). Ich mcöhte aber gerne, wenn ich dann als ausgeloggter User zu dem Entschluss komme, z. B. nachdem ich gemütlich meine Bratkartoffeln gegessen habe, wieder online zu gehen. Funktionert das dann ja nicht mehr. Sprich ich muß mich neu einloggen. Ist es nun machbar wenn ich irgendwo auf der Seite was rumklicke dass ich automatisch auf die Loginseite "verwiesen" werde, sprich die Loginseite erscheint bei klick.
Habe das bis jetzt immer mit

PHP:


<?php
.
.
header('Location: http://..und ab zur Loginseite');
.
.
?>

gelöst. Bin mir aber nicht sicher ob das hier sinnvoll ist und überhaupt klappt. Wie gesagt testen ist sehr eingeschränkt, weil ich nur einen User habe.

Gruss
strolch_007
Profil ansehen
24.03.2009 17:36 Uhr
Flitze
Administrator
registriert 17.10.2006
wohnt in Eschwege
Beiträge 332
Zitat:
Wie gesagt testen ist sehr eingeschränkt, weil ich nur einen User habe.

Benutz 2 Browser. Dann werden nämlich auch 2 Sessions erzeugt und du kannst nen bisschen rumtesten ;)

Generell solltes so funktionieren, wie du schreibst. Sofern sich der User grad in nem Bereich aufhält, in dem ein Login erfoderlich ist. Kanns dann mittels
PHP:
<?php
if (isset($_SESSION['UserID']))
?>

prüfen, ob derjenige noch eingeloggt ist und dann mit dem header() weiterleiten.


Profil ansehen Mail senden
27.03.2009 06:54 Uhr
strolch_007
Forenuser
 
registriert 16.03.2009
wohnt in
Beiträge 40
hallo,

also das mit dem

PHP:
<?php
if (isset($_SESSION['UserID']))
?> 


habe ich so gelöst das ich (isset verlangt ja onlne-user!, ich will ja reagieren wenn er eben nicht mehr online ist = automatische Logout) einfach direkt nach session_destroy den header.... eingegeben habe. Hab ja ganz übersehen das der User ja eindeutig identifiziert wurde. Drum meine Eingangsbedenken. Wer lesen kann ist klar im Vorteil. Hätt mir die Frage fast sparen können:-)
So "fliegt" der User automatisch bei überschreiten der voreingestellten Zeitabfrage auf eine Seite "Aus Sicherheitsgründen wurden Sie automatisch ausgeloggt." Ansonsten funktionier alles einwandfrei. Naja ein User bleibt bei mir IMMER online. Warum das so ist weiß ich nicht. Stört aber jetzt auch nicht so unbedingt. Einer muß ja die Stellung halten:-)

Wollte dann noch was einbauen und dachte des geht ja ganz flott weil ich ähnliches schon gemacht habe. Aber "Pustekuchen":-)
Ich habe die Userliste etwas "mibraucht und daraus eine Onlinstatusanzeige für jeden User gebastelt. Ist ja mehr oder weniger nur die echos aus den Diensten zu entlassen:-)
Auch das geht einwandfrei solange ich "nur" onlie oder eben offline verwende. Möchte ich jetzt aber z.B. mittels

Code:
      

<form>
 <select name="user_status" id="user_status">
                        
             <option value="0" selected="selected">online</option>
             <option value="beschäftigt" <?php if(isset($_POST['user_status']) AND $_POST['user_status'] == 'beschäftigt') echo ' selected'; ?>>beschäftigt</option>
             <option value="bin gleich zurück" <?php if(isset($_POST['user_status']) AND $_POST['user_status'] == 'bin gleich zurück') echo ' selected'; ?>>bin gleich zurück</option>
                                            
                       		</select></td> 
                             
       <input name="ok" type="submit" value="ok" style="height:22px; padding: 0px;" />

                </form>


die Abfrage erweitern tun sich gleich mehrere Probleme auf. Wie ist es machbar das z.B. das angecklickte "beschäftigt" über alle Seiten erhalten bleibt und die Schrift sich z.B. in orange ändert. Nur eine Zeile dazu schreiben mit den entsprechenden Änderungen reicht ja hier bei weitem nicht.
Bei "nur" Formular neu laden wäre das ja kein Problem. Wie bringe ich das gesetzte online auch ins select rein und kann aus dem select (sprich mit den da vorgenommenen Änderungen auf den Onlinestatus direkt zugreifen?
Es gibt also mehrere Seiten auf denen man "rumwandern" kann (interner = eingeloggter Bereich, ist ja wohl meisten so:) ) und auf allen Seiten soll dann das (egal in welcher Seite die Änderung vorgenommen wurde) in select angeklickte (z.B "beschäftigt";) angezeigt werden und die Änderung des Status in $olnine ebenfalls auf allen Seiten erhalten bleiben. Seitenaufbau ist bei mir so das ganz oben das PHP steht und dann nach <Doctype....> der XHTMLl Teil kommt.
Die online/ offline Anzeige klappt ja bei mir ausnahmslos gut.

Gruss

strolch_007

Dieser Beitrag wurde am 27.03.2009 um 07:11:13 Uhr von strolch_007 zum 4. Mal editiert.
Profil ansehen
Seite: 1 2 3  > no reply
Powered by Pascal Landau © 2006 MyWebsolution.de
Designed by Pascal Landau © 2006 MyWebsolution.de
 
 
 
 
Home Email Impressum Disclaimer Statistik