SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 30.06.2008, 18:17:29
cIph3r cIph3r ist offline
Anfänger
 
Registriert seit: Jun 2008
Alter: 36
Beiträge: 4
Prüfen ob bestimmte Session-ID existiert

Hallo,

da meine Frage ziemlich speziell ist und ich beim suchen nie das gefunden hab, was ich brauch, frag ich also mal selber nach:

Mein Problem ist folgendes:

Ich habe in einer Datenbank gespeichert, welche user gerade online sind (für ein Chat).
Jeder user bekommt also eine Session beim Betreten der gesamten Seite und eine login-SESSION-variable, wenn er den chat betritt und wird dann in der datenbank erfasst.


Meldet er sich wieder ab, wird der Name auch aus der Datenbank entfernt.

Meldet er sich jedoch nicht ab, bleibt sein name in der datenbank und wird als online aufgelistet, ist es aber lange nicht mehr (nach 1h inaktivität ist ers zwar, aber das geht zu lange)

Und genau da ist das Problem:
Wie kann ich rausfinden, ob der User noch online ist.

Da gabs 2 Ansätze:
1. Ein Script ausführen, wenn der User den Chat verlässt, welches den Namen aus der DB entfernt.
Problem: php geht ja nur beim betreten der seite, nicht aber beim verlassen.
Also das wäre die elegantere lösung, hab aber keine Ahnung, wie das gehen soll.

2. Über Sessions:
Das geht zwar nur eingeschränkt, also wenn der Browser beendet wird oder eben über abmelden, aber ist die einzige alternative, die mir einfällt.

Die idee war, nicht nur den namen, sondern auch die Sess-Id zu speichern und dann regelmäßig zu prüfen, ob die Session-Ids aus der Datenbank noch auf dem Server existieren und ggf. dann die Namen aus der DB zu löschen.
Aber ich habe keine funktion in php gefunden, mit der ich überprüfen kann, ab eine bestimmte Session-ID auf dem server existiert.

Ich glaube, das war schon deutlich genug formuliert, aber ich fass es nochmal zusammen:
-User wird mit seiner SID zusammen erfasst und als online registriert.
-User meldet sich nicht ab, aber session wird beendet
Problem: Wie prüfen, ob die SID "80c94f533ce847d58a5d31ce1e607232" noch existiert.


Alternative:
Beim verlassen des Chats wird der Benutzer (wenn das irgendwie geht) aus der Datenbank gelöscht.

Noch kurz zur info:
Bei mir gibts keine Anmeldungen im klassischen Sinne
Also kein Passwort, sondern nur Nickname und los gehts.


Ich danke schonmal fürs lesen und evtl auch für ne gute Antwort
Mit Zitat antworten
  #2  
Alt 30.06.2008, 18:52:44
Benutzerbild von Domi
Domi Domi ist offline
Senior Member
 
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
AW: Prüfen ob bestimmte Session-ID existiert

Hi und erstmal herzlich willkommen im Forum.

Also prinzipiell mache ich das so: Jedesmal wenn eine PHP-Seite geladen wird, dann aktualisiere ich den Timestamp. So sehe ich wann der Benutzer das letzte mal was gemacht hat und so kann ich entscheiden ob er noch aktiv was macht oder ob er bereits weg ist.

In wie fern sich das mit deinem Chat realisieren lässt müsste man noch checken. Aber ich denke auch das ist auf jeden Fall möglich. Aber um was für ein Chat handelt es sich denn? Komplett in PHP geschrieben? Wenn dies der Fall ist, dann brauchst du ja einen Reload um die Texte der anderen aus der DB zu lesen, in diese Moment könntest den Timestamp aktualisieren. So kannst dann sagen, dass alle die älter wie 5 Minuten sind einfach nicht mehr on sind. Wenn du das jede Sekunde aktualisierst, könntest das z.B. auf 10 Sekunden herunterschrauben..

Ich hoffe ich konnte dich etwas inspirieren, damit du der Lösung näher kommst.

Domi
__________________

the best way to be ready for the future is to invent it
Mit Zitat antworten
  #3  
Alt 30.06.2008, 19:02:03
cIph3r cIph3r ist offline
Anfänger
 
Registriert seit: Jun 2008
Alter: 36
Beiträge: 4
AW: Prüfen ob bestimmte Session-ID existiert

Danke für die schnelle Antwort


der Chat funktioniert so:
Über Ajax wird ein Script aufgerufen, welches die Posts aus der datenbank holt

also die seite wird nie komplett neu geladen

die Fragen bleiben beide offen:
1. Kann man mit php feststellen, ob eine bestimmte Session-Id existiert
und
2. Kann man beim Verlassen der Chatseite irgendwie ein Löschbefehl an die Datenbank senden

mit Timeouts wollte ich eben nicht arbeiten, weil die sehr unzuverlässig sind.
Ich habe ja einen eingebunden, der nach 1 stunde checkt, ob der user noch aktiv ist
aber weiter runter wollte ich den timeout nicht setzen (habe selber mal einen langen Text verfasst und nachdem ich auf senden geklickt habe, war alles weg, weil meine Session abgelaufen war [zurück] ging auch nicht mehr (ist schon etwas länger her aber da hab ich mir gesagt, sowas schreib ich nicht, auch nicht, wenn die posts nur 20 wörter lang sind)
Mit Zitat antworten
  #4  
Alt 30.06.2008, 19:08:16
Benutzerbild von Domi
Domi Domi ist offline
Senior Member
 
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
AW: Prüfen ob bestimmte Session-ID existiert

Na, das ist schon klar, aber die Beiträge werden ja eh alle x-Zeiteinheiten aktualisiert, in dem Zug aktualisierst du auch den Timestamp. Wenn der Benutzer keine Beiträge mehr bekommt, dann ist er ja eh "draußen" .. so merkst innerhalb 2*x-Zeiteinheiten ob er noch da ist oder net.

Die anderen Fragen kann ich dir momentan net beantworten, würde mich da aber auch net auf eine Lösung versteifen.

Domi
__________________

the best way to be ready for the future is to invent it
Mit Zitat antworten
  #5  
Alt 30.06.2008, 19:12:39
cIph3r cIph3r ist offline
Anfänger
 
Registriert seit: Jun 2008
Alter: 36
Beiträge: 4
AW: Prüfen ob bestimmte Session-ID existiert

ich glaube, ich hab gecheckt, was du meinst

werd ich gleich mal testen

darauf bin ich noch garnicht gekommen, wenn es wirklich das is, was ich denke


thx
Mit Zitat antworten
  #6  
Alt 30.06.2008, 20:26:17
cIph3r cIph3r ist offline
Anfänger
 
Registriert seit: Jun 2008
Alter: 36
Beiträge: 4
AW: Prüfen ob bestimmte Session-ID existiert

jep, so gehts
dass ich da nicht selber drauf gekommen bin

hatte den timestamp nur beim schreiben vergeben, aber beim lesen gehts ja genauso

die Antwort auf meine Frage is jetzt zwar nicht mehr so wichtig
aber interessieren würds mich dennoch

also wenn da jemand was weiß, wie man die aktiven sessions auslesen kann,

war cool
Mit Zitat antworten
  #7  
Alt 30.06.2008, 21:57:17
Benutzerbild von Domi
Domi Domi ist offline
Senior Member
 
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
AW: Prüfen ob bestimmte Session-ID existiert

Das ist son Punkt den ich über die Jahre gelernt hab .. man darf nicht auf ner Idee verharren, man muss sich auch mal auf andere Ideen einlassen :)
__________________

the best way to be ready for the future is to invent it
Mit Zitat antworten
  #8  
Alt 02.07.2008, 02:11:29
deedee deedee ist offline
Anfänger
 
Registriert seit: Sep 2007
Beiträge: 44
AW: Prüfen ob bestimmte Session-ID existiert

Zitat:
Zitat von cIph3r Beitrag anzeigen
jalso wenn da jemand was weiß, wie man die aktiven sessions auslesen kann,

war cool
Sessions sind aus zu lesen - zum beispiel:
PHP-Code:
<?php 
session_start
();
$path ini_get('session.save_path');
$handle dir($path);
while (
$filename $handle->read()) {
    if (
substr($filename05) == 'sess_')
    {
        
$data file_get_contents("$path/$filename");

        if (!empty(
$data))
        {
            
session_decode($data);
            
$session $_SESSION;
            
$_SESSION = array();
            echo 
"Session [" substr($filename5) . "] <br>\n";
            
print_r($session);
            echo 
"<br>\n\n";
        }
    }
}
?>
Von: http://phpsecurity.org/code/ch08-1

By einen shared host ist es besser dein eigenen session handler zu machen
Mit Zitat antworten
  #9  
Alt 02.07.2008, 11:05:26
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
AW: Prüfen ob bestimmte Session-ID existiert

Zitat:
Zitat von deedee Beitrag anzeigen
Sessions sind aus zu lesen - zum beispiel:

[...] php-code [...]
damit kannst die in einer session gespeicherten daten auslesen - ob die session noch aktiv ist (im sinne von "ob der user noch online ist"), steht auf einem anderen blatt.

Zitat:
Zitat von deedee Beitrag anzeigen
by einen shared host ist es besser dein eigenen session handler zu machen
das ist ein weit verbreitetes vorurteil / eine zu pauschale einschätzung. gute hoster verstehen ihr handwerk und erzielen durch die konfiguration des webspace eine höhere sicherheit, als das die meisten coder mit irgendwelchen selbstgebastelten skripten hinbekommen.

cx
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Session wird zu früh beendet ... sk4ter PHP Grundlagen 2 15.11.2007 19:49:57
Prüfen ob eine entfernte Datei existiert FabianWesner PHP für Fortgeschrittene und Experten 2 05.06.2007 15:04:37
Bestimmte länge prüfen? varos PHP Grundlagen 6 11.01.2007 09:18:18
die schnellste möglichkeit zu prüfen, ob ein eintrag existiert EyeDacor MySQLi/PDO/(MySQL) 15 25.05.2005 15:34:40
prüfen, ob relation existiert? ingo MySQLi/PDO/(MySQL) 4 20.09.2004 15:50:24


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:48:30 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt