ilch Forum » Allgemein » HTML, PHP, SQL,... » Autologout erstellen

Geschlossen
  1. #1
    User Pic
    Saugi Mitglied
    Registriert seit
    17.06.2010
    Beiträge
    3
    Beitragswertungen
    0 Beitragspunkte
    Hallo,

    und zwar sitz ich vor einem Problem.

    Ich soll auf meiner Homepage ein "autologout" erstellen. So wie man es von schüler.cc oder Online Banking kennt.
    ALso wenn man die Seite verlässt und man nicht auf ausloggen klickt, soll man trotzdem ausgeloggt werden.

    Ist dieses möglich?

    wenn ja, hat jemand den passenden Code parat den ich nur in die user,php einfügen muss.

    Oder bin ich in der datein auch falsch.

    Mfg Saugi


    verwendete ilchClan Version: 1.1 M

    betroffene Homepage: externer Link
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    SFX Mitglied
    Registriert seit
    31.07.2009
    Beiträge
    52
    Beitragswertungen
    0 Beitragspunkte
    Beim einfachen verlassen bin ich mir jetzt nicht sicher..

    1. du änderst das Verfallsdatum der Cookies
    1.1 auf zB eine Stunde
    1.2 auf die Sitzung, wenn man deine Browser schließt wird der Cookie gelöscht

    der Rest ist etwas schwerer umsetzbar..
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Unknown|User gelöschter User
    Oder die einfachste Möglichkeit: Alle Funktionen, die Cookies betreffen, aus der user.php löschen.

    include/includes/func/user.php
    <?php
    
    # hier werden alle user spezifischen funktionen
    # definert...
    
    function user_identification () {
      user_auth();
      user_login_check();
      user_update_database();
      user_check_url_rewrite();
    }
    
    function user_auth () {
      debug ('user - auth gestartet'. session_id());
      $cn = session_und_cookie_name();
      if (!user_key_in_db()
       OR !isset($_SESSION['authid'])
       OR (isset($_SESSION['authsess']) AND $_SESSION['authsess'] != $cn)) {
    
        debug ('user - nicht in db oder nicht authid');
    
        user_set_guest_vars();
        user_set_user_online ();
    
        # gruppen, und modulzugehoerigkeit setzten
        user_set_grps_and_modules();
      }
    }
    
    function user_check_url_rewrite() {
      global $allgAr;
      if ( !loggedin() AND $allgAr['show_session_id'] == 0 ) {
        # loescht die sessionid von allen urls
        # auch urls wie formulare usw. damit
        # suchmaschienen bots nicht iritiert sind ;)
        # output_reset_rewrite_vars ist eine php funktion
        # nicht unnoetig dannach suchen ;) ...
        output_reset_rewrite_vars ();
      }
    }
    
    function user_update_database () {
      $dif = date('Y-m-d H:i:s', time() - 7200);
      db_query("UPDATE prefix_online SET uptime = now() WHERE sid = '".session_id()."'");
      db_query("DELETE FROM prefix_online WHERE uptime < '". $dif."'");
      if ( loggedin() ) {
        db_query("UPDATE prefix_user SET llogin = '".time()."' WHERE id = '".$_SESSION['authid']."'");
      }
    }
    
    function user_set_user_online () {
      global $allgAr;
      if (0 == db_result(db_query("SELECT COUNT(*) FROM prefix_online WHERE sid = '".session_id()."'"),0) ) {
        db_query("INSERT INTO prefix_online (sid,uptime,ipa) VALUES ('".session_id()."',now(),'".getip()."')");
      }
      $_SESSION['authgfx'] = $allgAr['gfx'];
    }
    
    function user_key_in_db() {
      if ( 1 == db_result(db_query("SELECT COUNT(*) FROM prefix_online WHERE sid = '".session_id()."'"),0) ) {
        return ( true );
      } else {
        return ( false );
      }
    }
    
    function session_und_cookie_name () {
      return (md5(dirname($_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"]).DBPREF));
    }
    
    function user_login_check () {
      if ( isset ($_POST['user_login_sub']) AND isset ($_POST['name']) AND isset ($_POST['pass']) ) {
        debug ('posts vorhanden');
        $name = escape_nickname($_POST['name']);
        if ($name != $_POST['name'] OR strlen($_POST['name']) > 15) {
            return false;
        }
        $erg = db_query("SELECT name,id,recht,pass,llogin FROM prefix_user WHERE name = BINARY '".$name."'");
        if ( db_num_rows($erg) == 1 ) {
          debug ('user gefunden');
          $row = db_fetch_assoc($erg);
          if ( $row['pass'] == md5($_POST['pass']) ) {
            debug ('passwort stimmt ... '.$row['name']);
            $_SESSION['authname']  = $row['name'];
            $_SESSION['authid']    = $row['id'];
            $_SESSION['authright'] = $row['recht'];
            $_SESSION['lastlogin'] = $row['llogin'];
            $_SESSION['authsess']  = session_und_cookie_name();
            db_query("UPDATE prefix_online SET uid = ".$_SESSION['authid']." WHERE sid = '".session_id()."'");
            user_set_grps_and_modules();
            return (true);
          }
        }
        global $menu;
        $menu->set_url (0, 'user');
        $menu->set_url (1, 'login');
      }
      return ( false );
    }
    
    function user_set_guest_vars() {
      $_SESSION['authname']  = 'Gast';
      $_SESSION['authid']    = 0;
      $_SESSION['authright'] = 0;
      $_SESSION['lastlogin'] = time();
      $_SESSION['authgrp'] = array();
      $_SESSION['authmod'] = array();
      $_SESSION['authsess']  = session_und_cookie_name();
    }
    
    function user_markallasread () {
      $_SESSION['lastlogin'] = time();
    }
    
    function user_logout () {
      user_set_guest_vars();
      db_query("UPDATE prefix_online SET uid = ".$_SESSION['authid']." WHERE sid = '".session_id()."'");
    }
    
    function user_set_grps_and_modules () {
      $_SESSION['authgrp'] = array();
      $_SESSION['authmod'] = array();
      if ( loggedin() ) {
        $erg = db_query("SELECT gid FROM prefix_groupusers WHERE uid = ".$_SESSION['authid']);
        while ( $row = db_fetch_assoc ( $erg ) ) {
          $_SESSION['authgrp'][$row['gid']] = TRUE;
        }
        $erg = db_query("SELECT DISTINCT url
        FROM prefix_modulerights
        left join prefix_modules on prefix_modules.id = prefix_modulerights.mid
        WHERE uid = ".$_SESSION['authid']);
        while ( $row = db_fetch_assoc ( $erg ) ) {
          $_SESSION['authmod'][$row['url']] = TRUE;
        }
      }
    }
    
    function loggedin () {
      if ( has_right(-1) ) { return ( true ); } else { return ( false ); }
    }
    function is_admin () {
      if ( has_right(-9) ) { return ( true ); } else { return ( false ); }
    }
    function is_coadmin () {
      if ( has_right(-8) ) { return ( true ); } else { return ( false ); }
    }
    function is_siteadmin ($m = NULL) {
      if ( has_right(-7) ) { return ( true ); }
      if ( !is_null($m) AND has_right(NULL, $m)) { return (true); }
      return ( false );
    }
    
    # diese funktion liefert immer true wenn es ein admin ist.
    # wenn kein kein admin wird geprueft ob der user
    # entweder ein angegebenes recht oder in einer angegebene
    # gruppe ist. oder ob er fals angegben das modulrecht hat.
    # wenn eines von diesen 3 kriterien stimmt wird true ansonsten
    # wenn keins uebereinstimmt false zurueck gegeben.
    function has_right ($recht,$modul = '') {
      if ( !is_array($recht) AND !is_null($recht) ) {
        $recht = array ( $recht );
      }
    
      if ( $_SESSION['authright'] == -9 ) {
        return ( true );
      }
    
      if ( !is_null($recht) ) {
        foreach ( $recht as $v ) {
          if ( ($v <= 0 AND $v >= $_SESSION['authright'] ) OR (isset($_SESSION['authgrp'][$v]) AND $_SESSION['authgrp'][$v] === true) ) {
            return (true);
          }
        }
      }
    
      if ( !empty($modul) AND isset($_SESSION['authmod'][$modul]) AND $_SESSION['authmod'][$modul] === true ) {
        return ( true );
      }
    
      return (false);
    }
    
    ### admin
    # wenn der 2. parameter weggelassen wird oder auf true gesetzt wird
    # dann wird ein login formular angezeigt, wenn der user kein admin ist.
    # wird der parameter auf false gesetzt wird das login formular nicht angezeigt.
    # erste parameter ist das menu objekt...
    function user_has_admin_right (&$menu,$sl=true) {
      if ( $_SESSION['authright'] <= -8 ) {  # co leader...
        return ( true );
      } else {
        $uri_to_check1 = $menu->get(0);
        $uri_to_check2 = $menu->get(1);
    	  if ( count($_SESSION['authmod']) < 1 OR !loggedin() ) {
    		  if ( $sl === true ) {
            if ( !loggedin() ) {
              $tpl = new tpl ( 'user/login.htm' );
        	    $tpl->set_out('WDLINK','admin.php',0);
            } else {
              echo '<strong>Keine Berechtigung!</strong> <a href="index.php">Startseite</a>';
            }
          }
    		  return ( false );
        } elseif ( (isset($_SESSION['authmod'][$uri_to_check1]) AND $_SESSION['authmod'][$uri_to_check1] == true)
                  OR (isset($_SESSION['authmod'][$uri_to_check1.'-'.$uri_to_check2]) AND $_SESSION['authmod'][$uri_to_check1.'-'.$uri_to_check2] == true) ) {
          return ( true );
       	} elseif ( count($_SESSION['authmod']) > 0 AND loggedin() ) {
          if ( $sl === true ) {
            foreach($_SESSION['authmod'] as $k => $v ) { $x = $k; break; }
            $x = explode('-',$x);
            $menu->set_url (0, $x[0]);
            if ( isset($x[1]) ) {
              $menu->set_url (1, $x[1]);
            }
          }
          return ( true );
        }
      }
      return ( false );
    }
    
    function user_regist ($name, $mail, $pass) {
      global $allgAr, $lang;
    
      $erg = db_query("SELECT id FROM prefix_user WHERE name = BINARY '".$name."'");
      if (db_num_rows($erg) > 0) {
        return (false);
      }
    
      if ( $allgAr['forum_regist_user_pass'] == 0 ) {
    		$new_pass = genkey(8);
      } else {
    	  $new_pass = $pass;
    	}
    
      $md5_pass = md5($new_pass);
    	$confirmlinktext = '';
    
    	# confirm insert in confirm tb not confirm insert in user tb
    	if ( $allgAr['forum_regist_confirm_link'] == 1 ) {
    		# confirm link + text ... bit of shit put it in languages file
    	  $page = $_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];
    		$id = md5 (uniqid (rand()));
    		$confirmlinktext = "\n".$lang['registconfirm']."\n\n".sprintf($lang['registconfirmlink'], $page, $id );
    		db_query("INSERT INTO prefix_usercheck (`check`,name,email,pass,datime,ak)
    		VALUES ('".$id."','".$name."','".$mail."','".$md5_pass."',NOW(),1)");
      } else {
    	  db_query("INSERT INTO prefix_user (name,pass,recht,regist,llogin,email,status,opt_mail,opt_pm)
    		VALUES('".$name."','".$md5_pass."',-1,'".time()."','".time()."','".$mail."',1,1,1)");
    		$userid = db_last_id();
    	}
      $regmail = sprintf($lang['registemail'],$name, $confirmlinktext, $name, $new_pass);
    
    	icmail($mail,'Anmeldung',$regmail); # email an user
    
      return (true);
    }
    
    function user_remove($uid){
        $row = @db_fetch_object(db_query("SELECT recht,avatar FROM prefix_user WHERE id = ".$uid));
        if ( $uid <> 1 AND ($_SESSION['authid'] == $uid OR $_SESSION['authid'] == 1 OR (is_coadmin() AND $_SESSION['authright'] < $row->recht))) {
            db_query("DELETE FROM prefix_user WHERE id = ".$uid);
            db_query("DELETE FROM prefix_userfields WHERE uid = ".$uid);
            db_query("DELETE FROM prefix_groupusers WHERE uid = ".$uid);
            db_query("DELETE FROM prefix_modulerights WHERE uid = ".$uid);
            db_query("DELETE FROM prefix_pm WHERE eid = ".$uid);
            db_query("DELETE FROM prefix_online WHERE uid = ".$uid);
            //Usergallery entfernen
            $sql = db_query("SELECT id,endung FROM prefix_usergallery WHERE uid = ".$uid);
            while( $r = db_fetch_object($sql) ){
                @unlink("include/images/usergallery/img_$r->id.$r->endung");
                @unlink("include/images/usergallery/img_thumb_$r->id.$r->endung");
            }
            db_query("DELETE FROM prefix_usergallery WHERE uid = ".$uid);
            //Avatar
            @unlink($row->avatar);
        }
    }
    
    function sendpm ($sid,$eid,$ti,$te,$status = 0) {
      if (is_array($eid)) {
      	db_query("INSERT INTO `prefix_pm` (`sid`,`eid`,`time`,`titel`,`txt`,`status`) ".
      	"SELECT  ".$sid.",`prefix_user`.`id`,'".time()."','".$ti."','".$te."',".$status." FROM `prefix_user` WHERE `prefix_user`.`id` IN (" . implode(',', $eid) . ")");
      } else {
      	db_query("INSERT INTO `prefix_pm` (`sid`,`eid`,`time`,`titel`,`txt`,`status`) VALUES (".$sid.",".$eid.",'".time()."','".$ti."','".$te."',".$status.")");
      }
    }
    ?>
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    SFX Mitglied
    Registriert seit
    31.07.2009
    Beiträge
    52
    Beitragswertungen
    0 Beitragspunkte
    problem ist ja dass es automatisch passieren soll.. zunge
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Saugi Mitglied
    Registriert seit
    17.06.2010
    Beiträge
    3
    Beitragswertungen
    0 Beitragspunkte
    ja es sollte automatisch passieren.

    Nur angenommen SFX wenn ich die Cookies sagen wir mal 10 min da lasse. die sich danach selbst löschen.

    Kannst du mir die Code zeile geben wo ich dieses eintragen kann.
    Weil ich noch nicht so begabt bin in der Codersprache ^^

    mfg
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Unknown|User gelöschter User
    ZitatZitat geschrieben von SFX

    problem ist ja dass es automatisch passieren soll.. zunge

    Passiert ohne Cookies, da die Session schnell weg ist.
    Also genau so, wie ich es angegeben habe.


    Zuletzt modifiziert von Unknown|User am 17.06.2010 - 21:32:23
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Saugi Mitglied
    Registriert seit
    17.06.2010
    Beiträge
    3
    Beitragswertungen
    0 Beitragspunkte
    Ok ich danke die Unknown|User.

    Dein Script arbeitet einwandfre. Nur ist der logout wenn man den Firefox schliessst. wenn man die seite nur schliesst bleibt der login trotzdem. aber ich bin schonmal ein stück weiter.

    mfg


    danke nochmal


    Zuletzt modifiziert von Saugi am 18.06.2010 - 17:07:04
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Unknown|User gelöschter User
    Ist doch auch logisch. Das Script kann nicht nachvollziehen, ob du die Seite schließt zwinker
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    StefanTD Mitglied
    Registriert seit
    05.06.2010
    Beiträge
    12
    Beitragswertungen
    0 Beitragspunkte
    Der Logout funktioniert ohne Frage, aber die Session bleibt erhalten.

    Will sagen, wenn der Browser geschlossen wird ist zwar der Login weg, aber laut online Box ist der User immer noch online.

    Hab aber leider keine Lösung parat. Ist mir nur aufgefallen

    mfg
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    dastiii Mitglied
    Registriert seit
    27.12.2005
    Beiträge
    2.354
    Beitragswertungen
    84 Beitragspunkte
    richtig, der user wird auch erst nach 5 minuten oder so nicht mehr als online angezeigt.

    das ist, damit user, die sich länger auf einer seite aufhalten, nicht direkt wieder als offline angezeigt werden, obwohl sie noch auf der seite sind. dafür also ein kleiner zeitpuffer.
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    Unknown|User gelöschter User
    Und das hängt mit der DB zusammen und nicht mit einer Session.
    0 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    Botox84 Mitglied
    Registriert seit
    09.08.2006
    Beiträge
    1.190
    Beitragswertungen
    21 Beitragspunkte
    Man kann der Onlinebox aber sagen: Hey, ping alle 5 Minuten meinen Browser an, check ab ob ich noch da bin zwinker

    Das hab ich bei mir auch^^
    0 Mitglieder finden den Beitrag gut.
  13. #13
    User Pic
    Unknown|User gelöschter User
    lol - Typisch du mal wieder xD

    Nicht die Seite pingt den browser an, sondern umgekehrt per Ajax :p
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten