mehrfachlogin gleichzeitig aus verschiedenen pcs verhindern - wie ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mehrfachlogin gleichzeitig aus verschiedenen pcs verhindern - wie ?

    hallo leute,

    hier meine Situation:
    1. Benutzer loggt sich erfolgreich am PC1 ein - als Bsp. Benutzername: test
    2. Anderer Benutzer loggt sich kurz danach auch ein
    -> diesmal am PC2 ABER auch mit Benutzername: test

    Also waehrend ein bestimmter Benutzer eingeloggt ist und ein anderer
    loggt sich auch mit dem selben Benutzernamen an einem anderen PC ein.

    Kann man da dem letzteren eine Meldung liefern a la: Sorry, aber dieser Benutzer ist grade eingeloggt...

    Oder geht das nicht..
    Ziel ist es, wenn einer gerade administrative Arbeiten erledigt, der andere nix veraendern kann bis der erste sich ausloggt oder der timeout eintritt..
    Je nach dem was zuerst eintritt..

    Vielen Dank im Voraus Leute..

    Frank

  • #2
    Man kann. Vermerke irgendwo (DB?), ob ein Benutzer gerade eingeloggt ist oder nicht.
    Will er sich anmelden, kann er das nur, wenn er es nicht schon ist.

    Kommentar


    • #3
      mhh.. stimmt..!
      (bin ich doof?!) wieso hab ich daran nit gedacht..

      danke!

      Kommentar


      • #4
        wie stellst du fest das ein user wirklich ausgeloggt ist?? jeden user zum ausloggen zwingen geht ja nicht...
        mfg

        Kommentar


        • #5
          ich loesche die session (session_destroy()) und dann koennte man den eintrag in der DB, das man eingeloggt ist loeschen..
          dies geschieht dann alles beim ausloggen.

          und wenn einer mit demselben namen sich einloggen will schaut man neben der loginprozedur auf das feld (DB) ob da ein eintrag steht, das man eingeloggt ist oder nit..

          Kommentar


          • #6
            und was machst du wenn ich jetzt eingelogt bin und einfach den Browser schliese oder eine andere Webseite lade? ich habe dann ja nicht auf den logout button geklickt, von daher kann ich mich erst wider einlogen wen der eintrag aus der db weg ist!

            mfg Roland
            Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

            Kommentar


            • #7
              der benutzer bleibt dann solange aktiv bis er sich selber ausloggt oder timeout ihn "ausloggt"...

              Kommentar


              • #8
                wie muss ich vorgehen wenn timeout eintritt..
                wie handle ich das mit dem loeschen des eintrages in der db, dass man sich abgemeldet hat..

                also eine art automatisierter ablauf:
                wenn timeout zuschlaegt, loesche den eintrag aus der spalte usw..

                gruss,
                frank

                Kommentar


                • #9
                  ich glaube, dass du deine Problem mit der Speicherung von session in datenbenk lösen kannst.
                  dafür muss du function session_set_save_handler anzupassen.
                  ein guter Beispiel dafür findest du hier:
                  http://de2.php.net/manual/en/functio...dler.php#60316
                  Jetzt kannst du einen Benutzer in Verbindung mit session_id in eine extratabelle abspeichern.
                  bei Aufruf von der Seite konntrollierst du ob aktuele session_id von Benutzer schon existiert und die session_id in session-Tabelle noch nicht zeitlich abgelaufen ist.
                  Versuchen wir jetzt votgehensweise zusammen zu fassen:
                  1)
                  PHP-Code:
                  session_start();
                  if(isset(
                  $_SESSION['benutzername'])) {//ok benutzer ist regestriert
                   
                  andere Entscheidungen
                  }
                  else{
                  //zur anmeldung weiterleiten}


                  ------------------------
                  //bei anmeldung nach dem benutzernamen eingegeben ist
                  //müssen wir kontrollieren ob in unserer usersession tabelle 
                  //ein Benutzer mit lebender session existiert

                  select session.*, usersession.* from session inner join usersession
                  on session
                  .session_id=usersession.session_id where session_expires<".time()." and usersession.benutzername="was der benutzer eingegeben hat"

                  //liefert diese Abfrage  eine Ergebniszeile, 
                  echo "Sie sind schon angemeldet";
                  wenn nicht
                  kontrollierst du 
                  die eingaben von Benutzer wie immer
                  und einschlisslich muss du in $_SESSION
                  ['benutzername'sein Name eintragen und mit
                  insert into usersession
                  (session_id,benutzernamevalues(session_id(),
                  $_SESSION['benutzername'] )
                  eintragen
                  warum so komplex?
                  damit du möglichkeit hast von deinem script aus auf die Werte von anderen sessions bequem zuzugreifen und damit leichter deine Aufgabe lösen kannst.
                  Irrtum vorbehalten
                  Slava
                  bituniverse.com

                  Kommentar


                  • #10
                    Naja das kann man auch einfacher haben: als Anmeldezustand des Benutzers statt "ja" und "nein" einen Zeitstempel speichern. Entweder die Loginzeit oder den Zeitpunkt der letzten Aktion, wahlweise beides auch plus der Sessionlaufzeit.

                    Kommentar


                    • #11
                      Original geschrieben von onemorenerd
                      Naja das kann man auch einfacher haben: als Anmeldezustand des Benutzers statt "ja" und "nein" einen Zeitstempel speichern. Entweder die Loginzeit oder den Zeitpunkt der letzten Aktion, wahlweise beides auch plus der Sessionlaufzeit.
                      Zugegeben!
                      Aber wenn er sowieso session starten muss, dann wird er die extraeintragung von zeitstempel in die taelle sparren können.
                      obwohl in hintergrund wird session_handler dasselbe machen .
                      vielleich war das wirklich zu komplex von mir.
                      Slava
                      bituniverse.com

                      Kommentar


                      • #12
                        wenn das eine überblickbare firmeninterne Situation ist, könnte man auch ein force-login
                        vorsehen, oder der admin kann den pc nr xxx (IP-Adresse) ausloggen.

                        sonst geht es mit time-out, dh user test darf sich neu anmelden, wenn user test
                        zwar schon angemeldet ist, aber xxx Minuten nichts mehr gemacht hat. Dabei
                        sollte aber auch die alte session (via db) gekillt werden: php-mässig ist sie noch
                        da, aber das skript schaut in der db nach, ob es diese session noch in der db
                        gibt .....

                        Ich würde als timeout nie den php-session-timeout nehmen, sondern diesen auf
                        php-möglichst-lang setzen und es selber drüber-machen.

                        bloss ein brainstorming beitrag

                        Kommentar


                        • #13
                          Original geschrieben von tcpip

                          sonst geht es mit time-out, dh user test darf sich neu anmelden, wenn user test
                          zwar schon angemeldet ist, aber xxx Minuten nichts mehr gemacht hat. Dabei
                          sollte aber auch die alte session (via db) gekillt werden: php-mässig ist sie noch
                          da, aber das skript schaut in der db nach, ob es diese session noch in der db
                          gibt .....
                          session_id und daten werden immer in der Tabelle bleiben!
                          aber session lebensciklus ist für mich entscheidend und der ist mit PHP-mässigem lebensciklus gleich, da die beide intern sich auf 'session.gc_maxlifetime' orientieren, genau so wie die coockis, die dafür benutzt werden.
                          Slava
                          bituniverse.com

                          Kommentar


                          • #14
                            Original geschrieben von Slava
                            aber session lebensciklus ist für mich entscheidend und der ist mit PHP-mässigem lebensciklus gleich, da die beide intern sich auf 'session.gc_maxlifetime' orientieren, genau so wie die coockis, die dafür benutzt werden.
                            das würde ich eben gerade nicht so machen. Die session-id identifiziert nur das
                            terminal und das sollte möglichst lange identifiziert bleiben. Die applikatorische
                            session von logged-in bis logged-out geht über das Vorhandensein von passenden
                            Daten in $_SESSION.

                            Kommentar


                            • #15
                              ich glaube langsam, dass bei einer Firmen-interner Lösung, würde ich einfach auslogen über "onunload" mit javascript machen.
                              aber ich habe Zweifel, dass eine gute Firma überhaupt sich für eine php-lösung für die interne zwecke entscheidet( bitte nicht schlagen) .
                              Slava
                              bituniverse.com

                              Kommentar

                              Lädt...
                              X