User nur einmal angemeldet

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

  • User nur einmal angemeldet

    Hallo Leute,

    Habe ein kleines Probelm: Stellt euch vor, ich will verhindern das sich der selbe user mehrmals auf einer seite einloggt. Ich habe mir folgendes überlegt: Ich schreibe einfach ein X in ein bestimmtes attribut auf der DB-row dieses users und weis somit das er online ist. Wenn er sich wieder ausloggt, nehme ich das X wieder raus. Das wäre ja kein problem wenn der sich wieder ausloggen würde. Was ist aber wenn er einfach das browserfenster schliesst? Ich habe ja keinen destruktor der losgeht wenn eine session stirbt, oder etwa doch? Gibt es eine möglichkeit rauszufinden ob eine sessionID noch aktiv ist?

    Da ich die ganze sache auf einem ISS und mit MSSQL realisieren muss bin ich noch zusätzlich ein bisschen eingeschränkt.

    Möglicherweise ist meine vorgehensweise total scheisse, also scheut euch nicht zu belehren.

    Besten dank für eure vorschläge.

    Gruss
    artemis

  • #2
    könntest du das nicht auch mit ner ip-sperre beim einloggen machen? die ip wird dann nach ner bestimmten zeit (cookie oder textdatei), oder wenn sich der user ausloggt wieder gelöscht.

    so würd ich es machen. nur en vorschlag

    des mit der session id weiß ich net sorry *g*

    Kommentar


    • #3
      danke für deinen vorschlag 0815,

      leider bringt mir das ja auch nichts wenn sich der kerl von einem pc mit einer anderen ip erneut anmeldet!

      gibt es keine funktion die einem sagt ob eine session (mit id) noch aktiv ist?

      falls jemand eine idee mit java oder so hat, wäre mir das auch recht.

      gruss
      artemis

      Kommentar


      • #4
        Du könntest einen timestamp in der DB speichern und bei jeder Aktion des users den timestamp aktualisieren. Wenn sich ein user jetzt einloggen will, kannst Du überprüfen, wann der user die letzte Aktion ausgeführt hat. Weicht die letzte Aktion zu sehr von der aktuellen Zeit ab, dann gilt die session als abgelaufen und der user kann sich wieder einloggen.
        Ein Problem kann es geben, wenn der Browser des users abstürzt und er sich wieder einloggen will. Ist der user zu schnell, gilt die gespeicherte Session als noch aktiv und er kommt nicht rein.
        cu tj99de
        Of all things I've lost
        I miss my mind the most

        Kommentar


        • #5
          eine weitere möglichkeit wäre eine liste mit den angelegten usern in eine weitere tabelle zu schreiben.
          sollrte allerdings auch bei jeder bewegung des users aktualisiert werden. und alle einträge, die älter als x sekunden sind, werden einfach gelöscht.
          h.a.n.d.
          Schmalle

          http://impressed.by
          http://blog.schmalenberger.it



          Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
          ... nur ohne :-)

          Kommentar


          • #6
            Ich verstehe das probelm nicht ganz. normalerweise reicht es einen cookie zu setzen, mit dem status logged_in.

            Kommentar


            • #7
              @ faustus: Man merkt, dass du das Problem nicht verstehst. Schließlich geht artemis ja davon aus, dass man sich zusätzlich von einem anderen PC (sogar von einem anderen Anschluss) aus einloggt.

              @ artemis: Java hilft dir da auch nicht weiter. Wenn du sogar von anderen IPs ausgehst, ist es wohl ein leichtes, einfach Java zu deaktivieren.

              Speicher den letzten Aktiven Zeitpunkt. Das ist das sinnvollste.

              Du kannst auch den Sessions sagen, in welches Verzeichnis die gespeichert werden und dann immer überprüfen, ob da was drin ist. Aber ist das nicht alles ziemlich übertrieben?

              Kommentar


              • #8
                Nun, wenn es so ist, dann wuerde ich eine verschluesselte datei schreiben, die man von einem zum anderen rechner transportieren kann und damit den login erhaelt.

                bin mir aber nicht sicher, ob der server auf meinen rechner zugreifen darf um die datei zu lesen. gebe ich zu.

                Kommentar


                • #9
                  Und was mache ich mit der Verschlüsselten Datei?

                  Du sagtest, von deinem Rechner. Ist das wirklich Sinnvoll? Dann muss der ja die ganze Zeit online bleiben. Auch im Urlaub, ... (ohne Wartung). Aber vorrausgesetzt du hast die richtige Serversoftware drauf und Berechtigungen fürs Web, kannst du das machen. Nur wofür???
                  Zuletzt geändert von TobiaZ; 07.09.2002, 10:23.

                  Kommentar


                  • #10
                    Besten dank für eure Hilfe, leute! Ich werde es so machen wie tj99de und TobiaZ vorgschlagen haben: Den Timestamp immer in der Tabelle des users aktualisieren. Nach 10 minuten ohne bewegung soll er sich halt neu anmelden. Ist zwar keine Ferrarilösung aber eine bessere möglichkeit scheint es ja nicht zu geben.

                    Besten dank für euer hilfe

                    cheers
                    artemis

                    Kommentar


                    • #11
                      Vielleicht koenntest du dein problem nochmals genauer beschreiben. ich muss zugeben, ich verstehe es noch nicht ganz. soll sich ein user nur einmal anmelden muessen - generell - und mit transportablem computer (egal welcher computer) oder soll ein user sich pro webseite nur einmal anmelden koennen ...

                      ich muesste mehr ueber die problematik wissen ...

                      Kommentar


                      • #12
                        Porsche: wie gesagt Sessions überprüfen.

                        Kommentar


                        • #13
                          das ist ja rührend wie Ihr euch um meine probleme kümmert ;-)Ich habe nun die porscheversion implementiert und das funkt eingentlich recht gut. da ich nicht so der web hacker (und erst recht nicht in PHP) bin, habt ihr mir mit euren ideen äusserst geholfen.

                          @ faustus
                          das ganze hört sich möglicherweise etwas übertrieben an, stell dir aber folgendes vor: du stellst live-streaming (präsentationen, workshops und so zeuchs) zur verfügung. Das ganze ist wie gesagt live und bestimmte leute bezahlen dafür. Was ich nun verhindern möchte ist, dass ein user bezahlt und 20 andere davon profitieren (weitergabe des logins, beispielsweise in einer Firma).

                          Eigentlich habe ich relativ schnell einen lösungsansatz gefunden jedoch hat mir eine funktion (oder event) in PHP gefehlt: wie finde ich heraus wenn ein user den browser einfach schliesst ohne sich vorher auszuloggen? In diesem falle hätte ich nämlich das online-kennzeichen auf der db nicht wieder zurückgesetzt und der user hätte sich nicht wieder anmelden können. Irgendwie habe ich gehofft das es so etwas wie einen destruktor gibt der anstpringt wenn die session tot ist. Dann habe ich gedacht das wenn ich die SID in der DB speichere, kann ich beim nächsten anmelden schauen ob diese noch aktiv ist. Gibt es wohl auch keine funktioin für...

                          Ein weiteres erschwernis ist, dass ich 100% webserver und dbms unabhängig bleiben muss, also keine apache - spezialfunktionen nutzen kann...

                          Also das genügt jetzt aber, will euch nicht auf den sack gehen mit meinen komischen vorstellungen.... .

                          besten dank noch mal...
                          cheers
                          artemis

                          Kommentar


                          • #14
                            hättest du schwierigkeiten damit, ein schliessen des fensters mit javascript abzufackeln?

                            Kommentar


                            • #15
                              Nun,

                              wie wäre es, wenn du ein logged in cookie erstellst, das nicht abläuft mit den informationen

                              - user_agent

                              also browser

                              - einen zahlencode, der verschlüsselt ist

                              eindeutige zuweisung, dass es sich um keinen anderen user handeln kann, weil der user diesen nicht etnschlüsseln kann

                              - das cookie auf eine gewisse gültigkeit setzt und diese immer überprüfst und regelmäßig erneuerst.

                              Ein zweites cookie mit loginstatus und dem usernamen

                              Dazu würde ich statt einen freien Usernamen die MSISDN (Handynummer oder Telefonnummer nehmen), weil du dann nie prüfen musst, ob es einen Usernamen schon gibt.

                              Was passiert dann?

                              Der user kann theoretisch sein passwort weitergeben. Aber der user_agent und der zahlencode zusammen ergeben mit dem login ein eindeutige identifizierung. Gibt der user sein passwort weiter passt das nicht zusammen und der andere wird rausgeschmissen.

                              Einschränkungen?

                              1. Nun, man kann das cookie theoretisch einem anderen geben zum abspeichern. Hat dieser aber einen anderen Browser geht es nicht. Eventuell kann man mit php auch einen noch genaueren Schlüssel, wie die Seriennummer des Browsers bekommen und damit das ganze sogar eindeutig machen.

                              2. Wenn der User das Authentifizierungscookie löscht, dann muss er sich neu registrieren. Aufgrund der MSISDN weisst Du aber, dass es sich um den selben alten user handelt und nicht um einen neuen.

                              Ist zwar immer noch keine 100% Lösung, aber es ist schon relativ sicher.

                              Vielleicht fällt dir ja bei diesem Ansatz selbst noch mehr dazu ein.

                              Kommentar

                              Lädt...
                              X