[PHP] Session/Online/Datenbank

Dieses Thema im Forum "Webentwicklung" wurde erstellt von reb00ty, 14. Januar 2009 .

  1. 14. Januar 2009
    Heyho ich bins mal wieder ^^

    Ich habe folgendes Problem. Sind eigentlich 2 aber ok.

    Zum einem mal wenn ich mich auf meiner seite einlogge und den browser schliesse wird die session gelöscht. Das kann man ja mit session coockie time oder so einstellen. Weiss jemand genau wie das geht?

    Zum anderen, wenn man sich einloggt wird in der datenbank > onlinestatus = "1" eingestellt und wenn man sich ausloggt > onlinestatus = "0". So aber wenn man den Browser schliesst ist man ja "Offline"

    So jetzt möchte ich eine Lösung haben für beide Probleme und zwar am besten wie folgt:
    Man loggt sich ein, ist dann Online. Die Session soll z.B 1 Woche aktiv bleiben. Wenn sich der User ausloggt wird diese gelöscht. Wenn er aber nur den Browser schliesst, bleibt die Session bestehen aber man wird trotzdem als offline gezeigt.


    Nochmal zusammengefasst:

    User loggt sich ein | Online | Session hält 1 woche (ausser man loggt sich aus)
    User loggt sich aus | Offline | Session gelöscht
    User schliesst Browser | Offline (nach ca. 20 min) | Session besteht weiterhin (bis die woche um ist)


    Hat irgendjemand eine Idee wie ich das umsetzten kann?

    Meine Denkansätze:

    - Beim einloggen erst einmal die Einstellung session cookie lifetime dingsbums auf eine woche setzten.
    - In die Datenbank wird die Seite die er als letztes aufgerufen hat eingetragen und wenn sich der Inhalt sagen wir in 20 min nicht ändert wird in der Datenbank der onlinestatus auf offline gesetzt.


    Ich hoffe einer hat ne Idee wie ich das umsetzten kann. Ich hab schon rumgerätzelt und nachgedacht aber im endeffekt gabs immer ein problem. Wär echt cool wenn mir jemand weiterhelfen könnte.

    bw wie immer ehrensache

    1000 Dank schon mal im voraus!

    Mfg, reb00ty
     
  2. 14. Januar 2009
    AW:
    PHP:
     Session / Online / Datenbank [/ b ]

    Sessions halten meines Wissens immer nur solange der Browser geöffnet ist  das ist was sie  ( außer der Art der Speicherung von den Cookies unterscheiden .
    Wieso arbeitest du nicht mit Cookies ?

    Anstelle dem true / false Modus würde ich einfach einen UNIX Timestamp der letzten Aktualisierung  ( einfach Script in deine  global. php hauen und immer wenn der User etwas macht wird der Timestamp aktualisiert in  die  DB einfügen .
    Du kannst dann entweder nur Werte aus der DB holen , die  jünger als letzten x Minuten sind oder ein anderes Script schreiben das  die  älteren Werte löscht .
     
  3. 14. Januar 2009
    AW:
    PHP:
     Session / Online / Datenbank [/ b ]

    man kann doch  die  lebensdauer der sessions über cookier steuern irgendwie oder kenn mich leider gottes nicht so gut mit cookies aus hab nur mal was von session . cookie . lifetime oder so gehört .

    hm also zum beispiel

    User 1 14
    : 00 Uhr
    user 2 14
    : 03 Uhr
    user 3 13
    : 56 Uhr

    [ PHP ] $zeit  date ( "H:i" , time ()) -  $ausdatenbank [ 'uhrzeit' ];
    if(
    $zeit irgendwie was k . A ) { echo  "online" ; } else { echo  "offline" ; }
    so ungefähr? aber wie mach ich die abfrage... also aktuelle uhrzeit MINUS die der datenbank ... hm ok was is wenn das von nem anderen tag is ... im timestamp sind auch tage mit drinn oder? hrm...
     
  4. 14. Januar 2009
    AW:
    PHP:
     Session / Online / Datenbank [/ b ]

    [
    PHP ] $result  = ... query ( "SELECT * FROM onlineusers WHERE lastactive > " . floor ( time ()-( 30 * 60 )). "); //User, die in den letzten 30 Minuten online waren
    Hatte mir das eher so vorgestellt, also einen Query, der ausliest wie viele Personen sind.

    Es sitmmt, Cookies sind teilweise komplizierter, weil du sie besser schützen musst. Cookies werden auf den Rechnen gespeichert und können daher manipuliert werden, viele User-Scripte, die ich kenne arbeiten nach folgendem Schema:
    PHP:
    if ( $_SESSION [ 'userid' ] AND  $_SESSION [ 'pwdhash' ])  $this -> userdata [ 'userid' ] =  intval ( $_SESSION [ 'userid' ]);
    elseif (
    $_COOKIE [ 'userid' ] AND  $_COOKIE [ 'pwdhash' ])
    {
        
    $result  $this -> db -> query ( "SELECT * FROM users WHERE userid='" . intval ( $_COOKIE [ 'userid' ]). "' AND pwdhash='" . $this -> db -> real_escape_string ( $_COOKIE [ 'pwdhash' ]). "'" );
        if (
    $result -> num_rows  ==  1 )
        {
            
    $_SESSION [ 'userid' ] =  $_COOKIE [ 'userid' ];
            
    $_SESSION [ 'pwdhash' ] =  $_COOKIE [ 'pwdhash' ];
            
    $this -> userdata [ 'userid' ] =  $_COOKIE [ 'userid' ];
        }
        else
        {
            
    setcookie ( "userid" "" , ( time ()- 10000 ));  // COOKIE "userid" löschen
            
    setcookie ( "pwdhash" "" , ( time ()- 10000 ));  // COOKIE "pwdhash" löschen
        
    }
    }
    Erst wird überprüft, ob Sessions vorhanden sind. Diese werden - wie gesagt - auf dem Server gespeichert und sind daher i.d.R. sicher, daher habe ich hier nicht die selbe Absicherung wie bei den Cookies gebaut.
    Bei den Cookies ist es komplizierter, erst wird überprüft, ob denn beide vorhanden sind und dann, ob der User tatsächlich so existiert (es wird vorausgesetzt, dass das Passwort so in der Datenbank steht, wie auch in dem Cookie [am besten verschlüsselt ]). Wenn es so einen Eintrag gibt, wird den Cookies vertraut - wenn nicht, werden die unnötigen Cookies gelöscht.
     
  5. 14. Januar 2009
    AW:
    PHP:
     Session / Online / Datenbank [/ b ]

    hm es wurde mir dringenst abgeraten von diversen usern das passwort in nem cookie zu speichern . ^^  auch wenns nur sein eigenes passwort ist aber wenn  die  geklaut werden oder so hm muss mir das script von dir nochmal genauer anschauen
     
  6. 14. Januar 2009
    AW:
    PHP:
     Session / Online / Datenbank [/ b ]

    Wie gesagt  ich setze voraus dass das Passwort verschlüsselt wird Und solange deine Art der Verschlüsselung unbekannt ist kann man es auch nicht knacken .

    [
    PHP ] $verschluesselt  md5 ( sha1 ( md5 ( "halloichbinsalt" . $password . "undichpepper" )));
     
  7. 14. Januar 2009
    AW:
    PHP:
     Session / Online / Datenbank [/ b ]

    hm hast recht sehr interessant ...  ich werd mich ma rannsetzten und rumprobieren !

    nochma zur session dauer Hab das hier gefunden

    "session.cookie_lifetime"  is standartmäßig auf 0 sagt meine php ini wenn ich jetzt möchte das  die  länger hält mus ich dann per ini set den wert erhöhen und wenn reicht das wenn ich das beim einloggen angebe oder auf jeder seite ?
     
  8. 14. Januar 2009
    AW:
    PHP:
     Session / Online / Datenbank [/ b ]

    Ich vermute mal das  die  0 eine art  'unendlich'  darstellt bzw es dem Browser überlassen wird ...
     
  9. 14. Januar 2009
    AW:
    PHP:
     Session / Online / Datenbank [/ b ]

    [
    quote ][ i ] Original von  [ url = http : //www.php-resource.de/handbuch/ref.session.htm]php-resource[/url][/i]

    session . cookie_lifetime  integer

        session
    . cookie_lifetime spezifiziert  die  Cookie - Lebensdauer , die  an den Browser geschickt wird in Sekunden Der Wert 0 bedeutet  "bis der Browser geschlossen wird."  Grundeinstellung 0. Siehe auch session_get_cookie_params ()  und session_set_cookie_params ().  Da das Cookie vom Browser zurückgegeben wird wird seine Lebensdauer nicht verlängert Es muss mittels setcookie ()  gesendet werden . [/ quote ]

    Geht also um  die  Cookies  ;)
     
  10. 15. Januar 2009
    AW:
    PHP:
     Session/Online/Datenbank[/b]

    [PHP]<?php
    $value 
    'irgendetwas von irgendwo' ;

    setcookie ( "TestCookie" $value );
    setcookie ( "TestCookie" $value time ()+ 3600 );  
    setcookie ( "TestCookie" $value time ()+ 3600 "/~rasmus/" ".example.com" 1 );
    ?>
    wie muss ich jetzt den code mit der session "vereinen" muss man dann anstatt $value dann $_SESSIN['id'] nehmen?
     
  11. 15. Januar 2009
    AW:
    PHP:
     Session / Online / Datenbank [/ b ]

    Wie willst du beides vereinen ?

    Wenn du mein oben genanntes Beispiel benutzen willst einfach beim LogIn zusätzlich zu den Sessions auch Cookies mit  [ B ] setcookie [/ B setzen  ;)
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.