Forum: PC-Programmierung BEstimmte dinge tun wenn session destroy aufgerufen wird (php mysql)


von emi (Gast)


Lesenswert?

Möchte herausfinden ob sich ein Benutzer angemeldet hat oder nicht. Wenn 
sich wer anmeldet, dann schreibe ich eine variable in die datenbank, 
damit von nirgends wo anders aus dieser Benutzer angemeldet werden kann. 
Jedoch kriege ich dabei ein Problem, wenn der Benutzer das Fenster 
einfach schließt statt sich ordnungsgemäß abzumelden. ich möchte aber in 
jedem Fall die Variable zurücksetzen wenn das fenster geschlossen wird.

Wäre dankbar für jeden Tipp.

von T.roll (Gast)


Lesenswert?

emi schrieb:
> ich möchte aber in
> jedem Fall die Variable zurücksetzen wenn das fenster geschlossen wird.

Eine zuverlässige Erkennung ist nicht möglich, denk z.B. an 
Stromausfall.

Du kannst es so machen: Wenn innerhalb von X Minuten keine Aktion 
erfolgt→Variable löschen.

von emi (Gast)


Lesenswert?

T.roll schrieb:
> Du kannst es so machen: Wenn innerhalb von X Minuten keine Aktion
> erfolgt→Variable löschen.

das muss aber dann irgendwie in myphpadmin eingestellt werden oder? 
Nagut, ich schau mal wo das ist.
Danke zunächst mal!

von emi (Gast)


Lesenswert?

Naja problematisch ist das aber auch. Denn wenn eine bestimmte Zeit 
vergangen ist, dann wird vielleicht die mysql variable gelöscht, jedoch 
könnte die session noch existieren. Und da ich meine seite so gebaut 
habe, dass immer nur die session kontrolliert wird damit der benutzer 
seinen account verwenden kann, wird bei auslaufen der Zeit zwar die 
variable in mysql gelöscht (wenn es auch wirklich so funktioniert) aber 
der benutzer kann immer noch seinen account verwenden, da er ja noch 
seine Session hat.

Das heißt der Nachteil bei dieser Methode ist, dass ich bei JEDER Seite 
die Benutzerrechte erfordet, ich in die Datenbank hineinschauen muss um 
herauszufinden ob dieser noch engemeldet ist und nicht mehr mit Sessions 
arbeite.

von Richard T. (richard_t)


Lesenswert?

Hey also hätte eine Vorschlag warum nimmst du nicht die IP Adresse oder 
andere Sachen die sich während des Besuch nicht ändern. Z.b. Browser 
Version usw.  Es gibt so viele Möglichkeiten jemanden zu tracken! Die 
großen Firmen wie Google und Co schaffen es auch ohne session dich im 
Auge zu behalten.

Gruß
Richi

von --- (Gast)


Lesenswert?

emi schrieb:
> Das heißt der Nachteil bei dieser Methode ist, dass ich bei JEDER Seite
> die Benutzerrechte erfordet, ich in die Datenbank hineinschauen muss um
> herauszufinden ob dieser noch engemeldet ist und nicht mehr mit Sessions
> arbeite.

Ja und, wo ist das Problem an einem kleinen SELECT?

von Peter II (Gast)


Lesenswert?

PHP ist leider nicht wirklich mehr zeitgemäß für eine Webapplikation. In 
anderen Sprachen (Java, .net) Läuft auf dem Server wirklich eine 
Anwendung, dort kann man auch sich Events für Beginn und Ende einer 
Session geben lassen.
Zusätzlich kann man recht einfach globale Daten cachen und mit Threads 
arbeiten. Dazu noch die Vorteile der Typsicherheit.

Damit ist es dort z.b. überhaupt kein Problem zu ermitteln wie viele 
User angemeldet sind, ohne die Datenbank zu befragen.

von emi (Gast)


Lesenswert?

Peter II schrieb:
> PHP ist leider nicht wirklich mehr zeitgemäß für eine Webapplikation.

Heißt das die meisten Webanwendungen werden heutzutage nicht mehr in php 
geschrieben?

von Peter II (Gast)


Lesenswert?

emi schrieb:
> Heißt das die meisten Webanwendungen werden heutzutage nicht mehr in php
> geschrieben?

Wenn ich die Wahl habe würde ich es zumindest nicht mehr machen. Es 
kommt natürlich auf dem Umfeld an.

Bei Business Anwendungen wird wohl Java führend sein. Da die meisten 
Provider nur PHP anbieten, hat man aber nicht immer die Wahl.

von TestX .. (xaos)


Lesenswert?

Peter II schrieb:
> PHP ist leider nicht wirklich mehr zeitgemäß für eine Webapplikation

"reines" php, wie auch nodejs, ruby, java, beans etc. sind ohne 
WebApplicationFrameworks nicht mehr zeitgemäß..da hast du recht...

@TO wenn du wirklich was seriöses entwickeln willst schau dir mal zB 
ZendFramework an... alles neu von hand zu basteln ist keine option...nur 
zum spielen&lernen ist es aber ok solange es nicht wirklich produktiv 
genutzt werden soll..

von Peter II (Gast)


Lesenswert?

Andi ... schrieb:
> Peter II schrieb:
>> PHP ist leider nicht wirklich mehr zeitgemäß für eine Webapplikation
>
> "reines" php, wie auch nodejs, ruby, java, beans etc. sind ohne
> WebApplicationFrameworks nicht mehr zeitgemäß..da hast du recht...

auch mit WebFramework wird PHP nicht wirklich besser.

- keine Typsicherheit
- keine Threads
- keine globalen Variablen für die WebApplication.

http://blog.benny-baumann.de/?p=334

Zum testen und spielen ist php OK, aber eine richtig Anwendung würde ich 
damit nicht machen.
( Ich habe PHP auch für kleine dinge im Einsatz. )

von emi (Gast)


Lesenswert?

Also ich bastle gerade ein Forum und ich habe so ziemlich alles schon 
mit php gemacht und keine Probleme damit. Es läuft alles wie gewollt 
(außer die ganze Stringbearbeitung fehlt mir noch...)

Peter II schrieb:
> - keine Typsicherheit

Ok, das ist wirklich schlecht.

Peter II schrieb:
> keine Threads

Wüsste nicht wozu man sie brauchen könnte...

Peter II schrieb:
> keine globalen Variablen für die WebApplication.

Wüsste nicht wieso das schlimm sein sollte...

von Peter II (Gast)


Lesenswert?

emi schrieb:
> Peter II schrieb:
>> keine globalen Variablen für die WebApplication.
> Wüsste nicht wieso das schlimm sein sollte...
Es ist nicht schlimm, es schränkt nur ein.
Verwendung z.b. zum cachen von Daten.


> Peter II schrieb:
> > keine Threads
> Wüsste nicht wozu man sie brauchen könnte...
im Asynchron z.b. pdf zu erzeugen oder Images im Format zu ändern.

von Michael (Gast)


Lesenswert?

Peter II schrieb:
>> > keine Threads
>> Wüsste nicht wozu man sie brauchen könnte...
> im Asynchron z.b. pdf zu erzeugen oder Images im Format zu ändern.

Und wofür braucht man jetzt Threads?

von emi (Gast)


Lesenswert?

--- schrieb:
> Ja und, wo ist das Problem an einem kleinen SELECT?

1.) Verbindung aufbauen
2.) ABfrage machen
3.) Ergebnis herauslesen
4.) Verbindung schließen

Das geht mit if(isset($_SESSION['...'])) einfacher zum Abfragen, ist 
aber unsicherer.

Werde aber ab jetzt immer beide abfragen. Das einzige Problem ist wenn 
ich das Fenster schließe. Dann bleibt nämlich der Wert in der Datenbank 
auf eingeloggt und ich komme nicht mehr hinein wenn ich mich wieder 
einlogge weil ich genau das überprüfe. Dafür gibt es nehme ich an keine 
schöne Lösung...

von Peter II (Gast)


Lesenswert?

Michael schrieb:
> Peter II schrieb:
>>> > keine Threads
>>> Wüsste nicht wozu man sie brauchen könnte...
>> im Asynchron z.b. pdf zu erzeugen oder Images im Format zu ändern.
>
> Und wofür braucht man jetzt Threads?

wenn der Anwender ein Bild hoch lädt, wo die Bearbeitung länger dauert. 
Dann kann  man das in einem extra Thread im Hintergrund erledigen und 
kann den Request sofort beantworten.

PHP blockiert ja die komplette Session von einen Nutzer. Damit kann der 
Browser nicht mal 2 Images gleichzeitig vom PHP abfragen wenn dafür die 
Session gebraucht wird.

von Εrnst B. (ernst)


Lesenswert?

Peter II schrieb:
> PHP blockiert ja die komplette Session von einen Nutzer

Kann man umgehen, wenn man statt $_SESSION was eigenes verwendet 
(Memcached, redis, ...)
Macht aber überhaupt keinen Spaß, das bei jedem CMS u.Ä. von neuem 
reinzupatchen, nur um damit bei jedem Update neuen Ärger zu haben...

von cbtester (Gast)


Lesenswert?

Entschuldigt das aufwärmen.

Aber ich erinnere mich das ein bekannter mal ein ähnliches problem 
hatte.

Dabei war die lösung ein bisschen javacode der das schließen der seite 
registrierte und dann im hintergrund einfach eine art "Abmeldungsscript" 
aufgerufen hatte das mit den informationen zum user gefüttert wurde.
(GET also alá http://testlink.de/abmelden.php?u=username&sid=*********)

In diesem script wurde die session mit session_destroy dann "Zerstört" 
und seine datenbankvariablen gelöscht.

Nur so eine idee vielleicht hilft sie dir ja.

von T.roll (Gast)


Lesenswert?

cbtester schrieb:
> javacode

Google.de → Unterschied Java Javscript

Diese Scriptspielerein sind durchaus möglich, lösen aber sein Problem 
nicht, da er das Verlassen des Benutzers in jedem Fall erkennen will.

Ich zitier mich jetzt einfach nochmal:
T.roll schrieb:
> Eine zuverlässige Erkennung ist nicht möglich, denk z.B. an
> Stromausfall.

von T.roll (Gast)


Lesenswert?

cbtester schrieb:
> javacode

Google.de → Unterschied Java Javascript

Diese Scriptspielerein sind durchaus möglich, lösen aber sein Problem 
nicht, da er das Verlassen des Benutzers in jedem Fall erkennen will.

Ich zitier mich jetzt einfach nochmal:
T.roll schrieb:
> Eine zuverlässige Erkennung ist nicht möglich, denk z.B. an
> Stromausfall.

von cbtester (Gast)


Lesenswert?

T.roll schrieb:
> Google.de → Unterschied Java Javascript

Ja ja... Ich hab dich auch lieb ;-*
1
<script type="text/javascript">
2
window.onbeforeunload = function () {
3
return "Wollen sie wirklich schon gehen?"; }; </script>

Statt des return das "Abmeldescript" aufrufen.


Hier noch etwas mit Ausführlicherem code:

http://www.java-forum.org/allgemeines-ee/48689-schliessen-browserfensters-tabs-erkennen.html

@T.roll
Javascript, Ajax, Jquery und der ganze andere kram ist sich (bis auf die 
Ausnahme Java da dies ja durch einen compiler gejagt wird) so ähnlich 
das ich echt lachen muss das um 4 minuten nach 12 noch einer erbsen 
zählt!

Leg nicht jedes wort auf die goldwage! Speziell wenn sich der tag gen 
ende neigt!

von cbtester (Gast)


Lesenswert?

Wieso sollte das nicht helfen ?
(Ok stromausfall deckt das script nicht ab)
Aber das versehendliche oder absichtliche schließen der seite schon.

Manchmal ist es halt einfach nicht möglich alles zu erfassen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.