Sessions OHNE Cookies
Kalle_Worms
- php
Hallöle,
ich habe hier so einen Mix aus Grundsatzdiskussion und Fragen im Detail und bedanke mich schon mal bei jedem, der dies mit konstruktiver Kritik begleitet. Da ich allein arbeite, ist dieses Forum für mich sehr wichtig, um Ideen auszutauschen und Gedanken zu ordnen.
Ich programmiere Seiten, für die ich mit dem Auftraggeber nach erfolgten Zugriffen abrechne. Wer als Surfer (oder datenpflegender Mitarbeiter) zugreift, hat dann eine Zeiteinheit x, bevor der Abrechnungszähler eins weiterschaltet. Vergleichbar mit dem Minutentakt beim Telefonieren.
Diese Technik ist nur ein Unterpunkt (Frame) beim Webauftritt des Auftraggebers, ich bin also nicht Herr über das Ganze.
Problem:
--------
Die Wiedererkennung des Users hatte ich zunächst per Cookie gelöst, was im Test prima funktionierte. Aber der Auftraggeber selbst hat Cookies gesperrt und nun tickt für ihn alle paar Sekunden bei jedem Seitenaufruf der Zähler weiter. Ausserdem kann er keine Einstellungen vornehmen, weil die per Cookie weitergegeben werden. Klar, dass er damit nicht einverstanden ist.
Und Cookies zulassen ? Auf keinen Fall - Sicherheitsrisiko !
Auch ein Surfer könnte Cookies gesperrt haben und kann dann diese Seiten nicht nutzen.
(ganz nebenbei: Auf JavaScript kann man sich nicht verlassen, kein Flash, dann gibt's scheinbar Browser ohne Frames und nun brechen auch noch die Cookies weg ...).
Lösungsansatz:
--------------
gestern wurde mir empfohlen, mit Sessions zu arbeiten, damit auch User ohne Cookies ihre Einstellungen zumindest für eine Sitzung behalten können.
Habe festgestellt, dass PHP ganz automatisch hinter jedem FORM- Tag so etwas einfügt:
<input type="hidden" name="PHPSESSID" value="a497a448a81286db3ee53fe3a2b3d87b" />
Problem bei Sessions:
---------------------
Wenn ein Besucher die Einstiegsseite erneut von extern aufruft (Klick auf den Link im Menü- Frame), wird eine neue Session-ID vergeben und alle Einstellungen sind verloren.
Es muss aber auch anders gehen: Wenn ich mich bei meinem Datenbank- Programm mysqladmin anmelde (dreimal Cookies verweigert), kann ich in einem anderen Browser- Fenster vollkommen neu einsteigen und bin trotzdem bekannt.
Frage:
------
Welche Möglichkeiten gibt es denn noch, sich gegenüber dem Web-Server zu identifizieren ?
Die IP kenne ich schon, sie gilt aber ja für ein ganzes Firmennetz hinter dem Router.
Lieben Gruß, Kalle
Hi,
ich habe hier so einen Mix aus Grundsatzdiskussion und Fragen im Detail und bedanke mich schon mal bei jedem, der dies mit konstruktiver Kritik begleitet. Da ich allein arbeite, ist dieses Forum für mich sehr wichtig, um Ideen auszutauschen und Gedanken zu ordnen.
gut.
Ich programmiere Seiten, für die ich mit dem Auftraggeber nach erfolgten Zugriffen abrechne. Wer als Surfer (oder datenpflegender Mitarbeiter) zugreift, hat dann eine Zeiteinheit x, bevor der Abrechnungszähler eins weiterschaltet. Vergleichbar mit dem Minutentakt beim Telefonieren.
Hmm.
Diese Technik ist nur ein Unterpunkt (Frame) beim Webauftritt des Auftraggebers, ich bin also nicht Herr über das Ganze.
Hmm.
Problem bei Sessions:
Wenn ein Besucher die Einstiegsseite erneut von extern aufruft (Klick auf den Link im Menü- Frame), wird eine neue Session-ID vergeben und alle Einstellungen sind verloren.
Du koenntest die Einstellungen an einen bestimmten Nutzer binden (also nicht an die Session natuerlich) => Anmeldevorgang
Es muss aber auch anders gehen: Wenn ich mich bei meinem Datenbank- Programm mysqladmin anmelde (dreimal Cookies verweigert), kann ich in einem anderen Browser- Fenster vollkommen neu einsteigen und bin trotzdem bekannt.
Eine wie auch immer geartete Anmeldung muss erfolgt sein, denn sonst kann ein System seinen Herrn nicht erkennen. Logisch, oder?
Frage:
Welche Möglichkeiten gibt es denn noch, sich gegenüber dem Web-Server zu identifizieren ?
Die IP kenne ich schon, sie gilt aber ja für ein ganzes Firmennetz hinter dem Router.
Die IP zu nutzen ist aber riskant (so riskant wie alles andere mit Cookies oder Javascript). Was spricht denn gegen das uebliche Dreischichten-Konzept mit den Entitaeten "Sitzungen" (fuer die Identifikation), "Rechte" (fuer die Autorisierung) und "Nutzer" (fuer die Authentifikation)?
Gruss,
Ludger
Hello,
Du koenntest die Einstellungen an einen bestimmten Nutzer binden (also nicht an die Session natuerlich) => Anmeldevorgang
Es muss aber auch anders gehen: Wenn ich mich bei meinem Datenbank- Programm mysqladmin anmelde (dreimal Cookies verweigert), kann ich in einem anderen Browser- Fenster vollkommen neu einsteigen und bin trotzdem bekannt.
Eine wie auch immer geartete Anmeldung muss erfolgt sein, denn sonst kann ein System seinen Herrn nicht erkennen. Logisch, oder?
"Das System" HTTP kennt keine permanente Anmeldung. Der User muss sich bei jedem Request und daraus resultierendem Subrequest (iFrames, Images, Frames, etc) aufs Neue identifizieren.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
Eine wie auch immer geartete Anmeldung muss erfolgt sein, denn sonst kann ein System seinen Herrn nicht erkennen. Logisch, oder?
"Das System" HTTP kennt keine permanente Anmeldung. Der User muss sich bei jedem Request und daraus resultierendem Subrequest (iFrames, Images, Frames, etc) aufs Neue identifizieren.
der Nutzer muss sich immer wieder aufs Neue identifizieren, richtig, aber nicht immer wieder authentifizieren um dann autorisiert zu werden.
Die Authentifikation und nachfolgende Autorisierung habe ich Anmeldung genannt.
Gruss,
Ludger
Hello,
"Das System" HTTP kennt keine permanente Anmeldung. Der User muss sich bei jedem Request und daraus resultierendem Subrequest (iFrames, Images, Frames, etc) aufs Neue identifizieren.
der Nutzer muss sich immer wieder aufs Neue identifizieren, richtig, aber nicht immer wieder authentifizieren um dann autorisiert zu werden.
Die Authentifikation und nachfolgende Autorisierung habe ich Anmeldung genannt.
An HTTP-Systemen gibt es keine Anmeldung. Es gibt nur die Möglichkeit des Authentifikationskriterienwechsels. Der wird beim Arbeiten mit Sessions und Cookies i.d.R. genutzt. Man meldet sich über ein Zweischlüsselverfahren beim System (nicht: 'an') und erhält einen temporären Schlüsselwert zurück. Dieser wird dann vom Browser automatisch bei jedem Request mitgesendet.
Aber eine 'Anmeldung', wie sie auf der Grundlage einer statischen Connection-ID auf Hardwareebene erfolgen könnte, funktioniert bei HTTP eben nicht, de bei jedem request ein neuer Prozess (oder Prozesskind) zugewiesen wird.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
Die Authentifikation und nachfolgende Autorisierung habe ich Anmeldung genannt.
An HTTP-Systemen gibt es keine Anmeldung.
was hat denn das Protokoll damit zu tun??
Es gibt nur die Möglichkeit des Authentifikationskriterienwechsels. Der wird beim Arbeiten mit Sessions und Cookies i.d.R. genutzt. Man meldet sich über ein Zweischlüsselverfahren beim System (nicht: 'an') und erhält einen temporären Schlüsselwert zurück. Dieser wird dann vom Browser automatisch bei jedem Request mitgesendet.
Ja, der Anmeldende oeffnet eine Sitzung, deren ID hin- und hergereicht wird =>Identifikation
Wenn ein Anmeldedialog erfolgreich passiert werden konnte, wird die Sitzung authentifiziert und der Sitzende ggf. autorisiert.
Aber eine 'Anmeldung', wie sie auf der Grundlage einer statischen Connection-ID auf Hardwareebene erfolgen könnte, funktioniert bei HTTP eben nicht, de bei jedem request ein neuer Prozess (oder Prozesskind) zugewiesen wird.
Eine Anmeldung bleibt eine Anmeldung.
Gruss,
Ludger
Hello,
Eine Anmeldung bleibt eine Anmeldung.
Genau! Und deshalb ist bei HTTP auch keine Anmeldung möglich.
Es ist nur eine immer wieder erneute Authentifizierung möglich.
Wie die erreicht wird, ist egal, wenn sie nur mindestens zwei Kriterien besitzt.
Wenn Du die "Anmeldung als Vertragspartner" meinst, reden wir aber von verschiedenen Dingen.
"Anmeldung" im datentechnischen Sinne ist aber genauso ein Fachbegriff, wie suchen, holen, wegschreiben, authentifizieren, ...
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
Eine Anmeldung bleibt eine Anmeldung.
Genau! Und deshalb ist bei HTTP auch keine Anmeldung möglich.
meinst Du eine Anmeldung ist nur bei verbindungshaltenden Protokollen moeglich? Wie kommst Du auf die Idee?
Es ist nur eine immer wieder erneute Authentifizierung möglich.
Nicht Authentifizierung, sondern Identifizierung.
"Anmeldung" im datentechnischen Sinne ist aber genauso ein Fachbegriff, wie suchen, holen, wegschreiben, authentifizieren, ...
Quellen?
Gruss,
Ludger
Hi Kalle_Worms,
Lösungsansatz:
gestern wurde mir empfohlen, mit Sessions zu arbeiten, damit auch User ohne Cookies ihre Einstellungen zumindest für eine Sitzung behalten können.
Habe festgestellt, dass PHP ganz automatisch hinter jedem FORM- Tag so etwas einfügt:
<input type="hidden" name="PHPSESSID" value="a497a448a81286db3ee53fe3a2b3d87b" />
Nur wenn es, wie ich dir im alten Thread (warum zum Kuckuck bleibst du eigentlich nicht in dem Thread???) schon geschrieben habe, in der php.ini aktiviert wurde. Dann sollte PHP aber auch an Links (sofern es relative und _nicht_ absolute Links sind) die SessionID dranhängen.
Problem bei Sessions:
Wenn ein Besucher die Einstiegsseite erneut von extern aufruft (Klick auf den Link im Menü- Frame), wird eine neue Session-ID vergeben und alle Einstellungen sind verloren.
Das liegt aber an dir - warum hängst du denn an die Menü Links die Session nicht dran?
Ach ja, weil du Frames nutzt? (ich will mich jetzt mal des Kommentars darüber, dass Frames einfach nur blöd sind enthalten.)
Dann musst du das so machen: Auf der Seite, wo du das Frameset definierst, musst du mit PHP die Session starten. An die URL's zu den Frames musst du dann die SessionID noch dranhängen, also z.B:
left_frame.php?<?php echo SID; ?>
Dann kannst du in dem Frame (bzw. in der Datei) auch einfach session_start() ausführen und hast die alten Daten immer noch.
Ansatz klar?
Frage:
Welche Möglichkeiten gibt es denn noch, sich gegenüber dem Web-Server zu identifizieren ?
Die IP kenne ich schon, sie gilt aber ja für ein ganzes Firmennetz hinter dem Router.
Mir fällt so spontan keine weitere vernüftige Möglichkeit mehr ein.
MfG, Dennis.
Hi Dennis,
erstmal danke für deine Antwort.
warum zum Kuckuck bleibst du eigentlich nicht in dem Thread???
1. Da ging es "nur" um Cookies, die verweigert wurden. Die Lösung mit Sessions wurde vorgeschlagen und ist somit eine "neue Baustelle".
2. Wie lange werden Threads denn eigentlich von den Forums- Teilnehmern begleitet? Ich denke, die dritte Zusatzfrage zum Thread von gestern wird wohl kaum noch wahrgenommen.
Kalle
Hi Kalle_Worms,
warum zum Kuckuck bleibst du eigentlich nicht in dem Thread???
- Da ging es "nur" um Cookies, die verweigert wurden. Die Lösung mit Sessions wurde vorgeschlagen und ist somit eine "neue Baustelle".
Das wird vermutlich die Mehrheit hier anders sehen, aber nichts für ungut ;-)
- Wie lange werden Threads denn eigentlich von den Forums- Teilnehmern begleitet?
Von den sog. "Stammpostern": Bist der Thread aus dem Forum raus ist.
Ich persöhnlich verfolge (nur) Thread in denen ich selber aktiv gepostet habe, bis diese ins Archiv gewandert sind.
Ich denke, die dritte Zusatzfrage zum Thread von gestern wird wohl kaum noch wahrgenommen.
Das glaube ich weniger.
MfG, Dennis.
Hi,
Ich denke, die dritte Zusatzfrage zum Thread von gestern wird wohl kaum noch wahrgenommen.
Das glaube ich weniger.
jede Zusatzfrage wird wahrgenommen. Allerdings wird nicht immer reagiert. Also, die Wahrnehmung loest nicht reflexartig eine Antwort aus. Soweit sind wir noch nicht heruntergekommen.
Daraus folgt, dass man interessant fragen sollte. (Oder ganz doof und mit Frauennamen.)
Gruss,
Ludger
Hello,
Daraus folgt, dass man interessant fragen sollte. (Oder ganz doof und mit Frauennamen.)
Nee, das nützt auch nix. Das mache ich doch die letzten Wochen jeden Tag 40 Mal *kicher*
Weder interessant fragen noch mit hochjezogenem Minirock nützt.
Aber ernsthaft:
Am meisten hilft immer noch, wenn man selber auch mal antwortet. Es ist eben ein Forum auf Gegenseitigkeit. Die einfachen Fragen kannst Du auch mittels Archiv und Internet-Suchmaschinen klären, weil sie alle schon 40.000-fach gestellt wurden. Aber die, die in die Tiefe gehen... Da wird die Luft ganz schnell dünn. Auch hier!
Da freut man sich dann dreifach, wenn noch jemand antwortet. Auch nach Tagen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
man kann Sessions auch mit "AUTH401" aufbauen. Dann muss sich aber der Benutzer freiwillig anmelden. Eine "unbemerkte" Sessionführung ist damit nicht möglich.
Leider liefert PHP dafür kein fertiges Konzept, aber die Bausteine (Funktionen) für den Aufbau der Sessions mit Passwort und Username sind da.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom