#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 + Multi-Zitat Zitieren
#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 . + Multi-Zitat Zitieren
#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... + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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" ))); + Multi-Zitat Zitieren
#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 ? + Multi-Zitat Zitieren
#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 ... + Multi-Zitat Zitieren
#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 ;) + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren
#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 ;) + Multi-Zitat Zitieren