Du bist nicht eingeloggt.

Login

Pass

Registrieren

Community
Szene & News
Locations
Impressum

Forum / Bits und Bytes

HTACCESS-Prinzip abgreifen

sheeps
Team-Ulmler (offline)


Dabei seit 01.2007
5659 Beiträge

Geschrieben am: 13.01.2007 um 18:46 Uhr
Zuletzt editiert am: 13.01.2007 um 18:46 Uhr

Also, ich hoffe hier kennt sich wer mit Web-Programmierung im höheren Stil aus ;-)

-------------------

Bevor ich nun meine Idee präsentiere, muss ich zunächst einmal bei euch Experten nachfragen, wie eigentlich genau eine .HTACCESS funktioniert.

Also auf dem Server liegen die .ht-Files und ein Client/USER meldet sich nun an. Er authentifiziert sich erfolgreich und bekommt entsprechend einen positiven Auth.-Status. Wie überprüft nun der WebServer mit jedem Reload, ob der USER noch der selbe ist oder nicht? - Wenn der USER nun auf eine andere Website geht, und anschließend wieder im selben Browserfenster den geschützen Bereich betritt, merkt sich der Server den Client und lässt den USER passieren, ohne ihn nochmals nach der Authentifizierung zu prüfen. - Aber wieso, bzw. wie funktioniert das?

Könnte man dieses Prinzip nicht für einen Online-Status nutzen? - Quasi, solange der USER noch eine gültige .HTACCESS-Auth. besitzt (also seinen Browser noch nicht geschlossen hat), ist er auch noch als online definiert. - Kann ich mit PHP so darauf zugreifen, dass ich vielleicht diesen Status setzen kann?


Ich vermute, dass es ein kleveres zusammenspiel aus Server- und Client-Seite ist und alles über den HTTP-Header läuft. Damit steh ich dann wieder am Anfang und selbst mod_auth_mysql würde mich nicht weiterbringen. - Da helfen bestenfalls SOCKETs, oder ein schmales AJAX-Skript, dass alle paar Sekunden die Datenbank updatet.

Aber vielleicht weiß ja einer von Euch eine Lösung für mein Problem.

Ich versuche einen halbwegs echtzeitrealistischen (auf 1 Sekunde genau) Online-Status zu entwickeln, der auch mit dem Schließen des Browserfensters klarkommt und dann eben einen Offline-Status in die Datenbank schreibt.


Neben Sockets (die aber nicht das Verlassen der Website registrieren) fällt mir als beste NullFrame-Alternative nur noch das AJAX-Skript ein, das im Sekundentakt einen Timestamp in die Datenbank hochläd. Der Online-/Offline-Status wird erst dann ermittelt, wenn er wirklich benötigt wird, nämlich dann, wenn ein anderer USER auf das Profil des "Offline-USERs" klickt und der zuletzt gespeicherte Timestamp dann eben vom aktuellen Timestamp um diese eine symbolische Sekunde abweicht. - Diese Lösung ist jedoch ziemlich Traffic-Gierig.


Na ja, mal sehen, wie gesagt, vielleicht fällt euch zum .HT-Prinzip noch eine mögliche Lösung ein, wobei bei .HTACCESS der Seitenwechsel ja auch als weiterhin "authentifiziert" gecached wird. - Vielleicht doch keine so gute Lösung.
sheeps
Team-Ulmler (offline)


Dabei seit 01.2007
5659 Beiträge

Geschrieben am: 13.01.2007 um 18:47 Uhr

Einen Lösingsweg hab ich schonmal gefunden, is aber nicht so des wahre...

-------------------------------

Ich versuche es jetzt erstmal per AJAX, werd mir demnächst mal ein paar Bücher zum Thema kaufen, denn bislang geben die Themen in den Entwicklerforen nur wenig her. Einige sind zwar gut, aber wirklich dahinter steigen tu ich momentan noch nicht ganz. Weiß nicht ob's an meinen mangelnden JavaScript-Kenntnissen liegt oder an der Tatsache, dass ich zu selten mit XML arbeite. Außerdem stört mich letzteres. Denn an AJAX nervt A am Anfang und X am Ende. Denn einen Response (synchrone Datenübertragung) benötige ich außer vielleicht bei der OnlineStatusErfassung schon sehr oft. Und was die XML-Datenstruktur betrifft. Die ist übertrieben lang. Auch wenn sie dann schnell objekt-orientiert umgesetzt werden kann und Objekte sich beliebig oft ineinander schachteln lassen und jedes Objekt wieder durch Attribute und Methoden gekennzeichnet werden kann. Ein Array-System oder das CSV-Prinzip wäre mir lieber:

$auto['pkw']['opel']['astra'] = ($leistung = "101 PS"; $hubraum = "2.4 l"; $gewicht = "1.2 t"; $geschwindigkeit = "230 Km/Std"; $verbrauch = "7 l"; $preis = "29'000.00 EUR"; $farbe = "rot");
$werkstatt['europa']['deutschland']['berlin'][' opel'] ['name'] = "Opel Mustermann";
$werkstatt['europa']['deutschland']['berlin'][' opel'] ['anschrift'][strasse] = "Postdammer Platz 21a";
$werkstatt['europa']['deutschland']['berlin'][' opel'] ['anschrift'][hausnummer] = "21a";
$werkstatt['europa']['deutschland']['berlin'][' opel'] ['plz'] = "12345";
$werkstatt['europa']['deutschland']['berlin'][' opel'] ['ort'] = "berlin";

oder so ähnlich, also eine Syntax die eine Array-Bildung erzeugt, sowie eine Syntax die das C-/PHP-Prinzip aufgreift aber etwas einfacher abgeleitet wird (so wie Python oder so).

Na ja, soetwas lässt sich sicherlich basteln, man benötigt eine JavaScript-Funktion die solche Code-Ketten erzeugt (encoding) und eine JavaScript-Funktion die sollche Code-Ketten wiederum in JS-evalierbaren Code zurückwandelt (decoding).

Die eigentliche Website könnte dann theoretisch eine reine HTML-Seite mit JavaScript sein. Die Daten bekommt das JS dann via AJAX/JSON/eigeneSyntax und diese ürbermittelt Anforderungen an PHP, JSP, ASP, PERL, PYTHON, ... und bekommt dann eine Antwort zurück.

Erster Vorteil, abgesehen von JS handelt es sich auf den ersten Blick um eine serverseitig statische Website.

Zeiter Vorteil, mit JavaScript als Plattform und AJAX/JSON/... als Übermittler/Überträgerfunktion könnte man so Daten im Format XML/JSON/... in alle möglichen serverseitigen Skripte oder Servlets übertragen und sich Antworten zurück ins JS laden lassen. Somit könnte man ein clientseitiges Framework für serverseitige Sprachen generieren.

Ditter Vorteil, das JavaScript kann nun in Echtzeit agieren/reagieren und auch ganz ohne Seiten-Refreshes USER-Aktionen oder Events in kürzester Zeit handlen. Wichtig ist nur ein schmales Datenformat und eine gut überlegte Strategie, welcher Inhalt denn übertragen werden muss. So lässt sich zum Beispiel viel mit TMP-Dateien arbeiten, die dann parallel eingeladen werden oder bereits am Anfang eingeladen wurden. So minimiert sich der Datentransfer auf ein Minimum und egal ob MySQL/PostGre/MSSQL/ORACLE (über PHP), ACCESS/EXCEL/MSSQL (über ASP[VBS]) oder JDBO/etc... (über JSP), ja selbst eigenese Speichersysteme über C-/Java-/Python-Servlets oder Speicherdateien wie CSV/XML. JavaScript(AJAX/JSON/eigeneSyntax) führt auf einer clientseitigen Plattform alle serverseitigen Sktipsprache wieder zusammen und bindet diese sogar noch an die Web-Datenbanken oder Dateien an.


Vielleicht hat das Web-v2.0 doch einige Vorteile. - Dann sollte aber auch bald CSS-v3.0 (mit operativen Größenangaben z.B.: "100%-25px") und eine gebugfixte Version von HTML-v4.0, bzw. eine neue W3C- und DOM-Spezifizierung nachrücken. Vielleicht schaffen es ja dann auch alle Browser eine halbwegs vernüftige Annährung was eine vailde Code-Interpretation voraussetzt.
Nitek - 41
Champion (offline)

Dabei seit 01.2003
4129 Beiträge

Geschrieben am: 13.01.2007 um 19:17 Uhr

Also .htaccess-Zugriffschutz bringt dir in dem Fall gar nicht. Es ist nämlich nicht so, dass man nur einmal seine Zugangsdaten sendet, sondern dass der Browser die für einen Cached und für jede Request mitschickt. Ob der Browser nun geschlossen wurde oder nicht läßt sich daraus nicht folgern, schon gar nicht wenn ein User beispielweise die Zugangsdaten fest im Browser speichert und dieser diese selbst nach dem Neustart wieder automatisch sendet. Um den Onlinestatus sekundengenau feststellen zu können müßtest du Clientseitig etwas am laufen haben, was dir auch mind. sekündlich Rückmeldung liefert ob der User noch auf der Seite ist und wenn sich diese Rückmeldung aus irgendwelchen Gründen mal verzögert funktioniert das System schon wieder nicht...
sheeps
Team-Ulmler (offline)


Dabei seit 01.2007
5659 Beiträge

Geschrieben am: 13.01.2007 um 19:27 Uhr
Zuletzt editiert am: 13.01.2007 um 19:30 Uhr

Ginge das mit der auth Funktion von PHP?
Damit könnte ich prüfen, ob der User authentifiziert ist.
Wenn er die Seite wechselt und wieder zurück kommt, ist er noch angemeldet.
Wenn er den Browser schließt, ist er nicht mehr angemeldet.
Vorteil:
Ich kann den Login (Username/ Password) mit Einträgen in der Datenbank abprüfen und musst die Logins nicht in der HTACCESS Datei speichern.


Normal würde hier jetzt ein Beispiel kommen, wie ich mir das ganze vorstelle, aber irgendwie verschwindet der gepostete PHP-Code gleich wieder...
spectre - 42
Halbprofi (offline)

Dabei seit 04.2003
181 Beiträge
Geschrieben am: 14.01.2007 um 02:27 Uhr

Zitat von sheeps:

Ginge das mit der auth Funktion von PHP?
Damit könnte ich prüfen, ob der User authentifiziert ist.
Wenn er die Seite wechselt und wieder zurück kommt, ist er noch angemeldet.
Wenn er den Browser schließt, ist er nicht mehr angemeldet.
Vorteil:
Ich kann den Login (Username/ Password) mit Einträgen in der Datenbank abprüfen und musst die Logins nicht in der HTACCESS Datei speichern.


Normal würde hier jetzt ein Beispiel kommen, wie ich mir das ganze vorstelle, aber irgendwie verschwindet der gepostete PHP-Code gleich wieder...


es gibt keine auth() funktion in php.

was heißt "echtzeitrealistischer online-status" (so hast du es bezeichnet)?
heißt das, dass du auf die sekunde angezeigt haben willst, seit wann jemand online ist? oder was anderes? die frage ist an sich wichtig, da ich mir vorstellen kann, dass du gerade zu kompliziert denkst.

aufbauend auf nitek's aussage füge ich noch was hinzu:
du musst die dynamik einer seite bedenken... wenn du zum beispiel eine anzeige haben willst, die sich unmittelbar eine sekunde nach dem logout eines users selber aktualisiert, müsstest du tatsächlich eine ständige client-server-verbindung haben. das setzt ein aktives element voraus (php ist nicht aktiv), wie zB das weit verbreitete java-applet oder, was mir besser gefällt, asp.
sheeps
Team-Ulmler (offline)


Dabei seit 01.2007
5659 Beiträge

Geschrieben am: 14.01.2007 um 08:06 Uhr

Zitat von spectre:


es gibt keine auth() funktion in php.

was heißt "echtzeitrealistischer online-status" (so hast du es bezeichnet)?
heißt das, dass du auf die sekunde angezeigt haben willst, seit wann jemand online ist? oder was anderes? die frage ist an sich wichtig, da ich mir vorstellen kann, dass du gerade zu kompliziert denkst.

aufbauend auf nitek's aussage füge ich noch was hinzu:
du musst die dynamik einer seite bedenken... wenn du zum beispiel eine anzeige haben willst, die sich unmittelbar eine sekunde nach dem logout eines users selber aktualisiert, müsstest du tatsächlich eine ständige client-server-verbindung haben. das setzt ein aktives element voraus (php ist nicht aktiv), wie zB das weit verbreitete java-applet oder, was mir besser gefällt, asp.


Nein, jede Sekunde möchte ich nicht angezeigt bekommen. Jeder User wird eine kleine Lampe bekommen, die anzeigt ob er online ist. Wenn ja brennt dat Ding wenn er ein logout macht geht sie aus.

Dass ich irgendwie zu kompliziert denke vermute ich selbst auch, irgendwie hock ich seit gestern voll aufm Schlauch.

Das Projekt um das es hier geht soll eine große Community werden, die ich als eher ein kleiner Hobby-Programmierer zusammen mit einem mache, ders mal studiert hat, nur irgendwie bekomm ich immer die schweren sachen ab :totlacher: Der Vorteil hierbei ist, dass dieser mensch einen eigenen Server bestitzt auf dem die ganze Chose gelagert wird.

Für die Überprüfung des online-statuses haben wir uns gestern Nacht noch auf AJAX geeinigt. Wäre zwar ohne JS schöner gewesen, aber so gehts auch.
spectre - 42
Halbprofi (offline)

Dabei seit 04.2003
181 Beiträge
Geschrieben am: 14.01.2007 um 13:43 Uhr

Zitat von sheeps:

Nein, jede Sekunde möchte ich nicht angezeigt bekommen. Jeder User wird eine kleine Lampe bekommen, die anzeigt ob er online ist. Wenn ja brennt dat Ding wenn er ein logout macht geht sie aus.


warum denkst du dann so überaus kompliziert?
das kannst du auf unterschiedlichen, einfachen wegen lösen. unter anderem einfach n timestamp bei jedem seitenaufruf in die db schreiben und beim logout dementsprechend zurücksetzen... etc. pp.
aber ihr macht das ja nun über ajax ;)
sheeps
Team-Ulmler (offline)


Dabei seit 01.2007
5659 Beiträge

Geschrieben am: 14.01.2007 um 13:51 Uhr

Zitat von spectre:

Zitat von sheeps:

Nein, jede Sekunde möchte ich nicht angezeigt bekommen. Jeder User wird eine kleine Lampe bekommen, die anzeigt ob er online ist. Wenn ja brennt dat Ding wenn er ein logout macht geht sie aus.


warum denkst du dann so überaus kompliziert?
das kannst du auf unterschiedlichen, einfachen wegen lösen. unter anderem einfach n timestamp bei jedem seitenaufruf in die db schreiben und beim logout dementsprechend zurücksetzen... etc. pp.
aber ihr macht das ja nun über ajax ;)


Nun gut, ich werd die Idee mal weiterreichen... mal sehen was davon gehalten wird...
Caarcrinolas - 41
Profi (offline)

Dabei seit 02.2006
909 Beiträge

Geschrieben am: 14.01.2007 um 14:03 Uhr

Zitat von sheeps:

Nun gut, ich werd die Idee mal weiterreichen... mal sehen was davon gehalten wird...

Nunja Echtzeit Online User erzeugt zu viel Server, Datenbanklast weshalb man es auch nicht ständig prüft ob online oder nicht.

Ich für meinen Teil habe eine Session Table in welcher sich jeglicher Client einträgt wenn er auf die Page kommt, dort wird u.A. die Zeit eingetragen, User Status ist als "Gast" standardmäßig definiert.

Würde sich dieser User mehrmals falsch einloggen kann ich die Session sperren, loggt er sich ein wird er als eingeloggt betrachtet.

Daneneben kann ich sofern die Seite jemals sicherheitskritisch wird dem Client einen meta refresh übergeben welcher nach der maximalen Loginzeit bei Inaktivität automatisch die ausgeloggt Seite lädt womit der User mitbekommt das er ausgeloggt wurde.

Die Zeitdifferenz zwischen letzter Useraktivität und Loginzeit gibt an wie lange der User als online betrachtet wird

Aristoteles: "Es gibt kein großes Genie ohne einen Schuß Verrücktheit."

  [Antwort schreiben]

Forum / Bits und Bytes

(c) 1999 - 2026 team-ulm.de - all rights reserved - hosted by ibTEC Team-Ulm

- Presse - Blog - Historie - Partner - Nutzungsbedingungen - Datenschutzerklärung - Jugendschutz -