Wenn der User Cookies verweigert ...
Kalle_Worms
- php
Hallöle,
den Umfang einer Liste (Spalten, Zeilen) zur Datenpflege kann ich in einem getrennten Programm per Checkboxen einstellen, die Parameter werden als Cookie langfristig abgelegt. Zweck: Der User findet beim nächsten Besuch seine letzte Einstellung wieder vor und kann nahtlos weiterarbeiten.
Problem: Bei dieser Technik haben jene User keine Chance, die Cookies ablehnen, sie können nicht sinnvoll arbeiten.
Idee: Die Parameterliste wird ZUSÄTZLICH als _POST oder _GET übergeben, um zumindest während der aktuellen Sitzung konstant zu bleiben.
Falls jedoch ein Cookie vorhanden ist, hat es die höhere Priorität und überschreibt die _POST und _GET Parameter.
FRAGE:
Kann ich mich darauf verlassen, dass KEIN Cookie kommt, wenn Cookies abgeschalltet sind?
Was passiert, wenn der User zunächst Cookies akzeptiert, sie dann aber abschaltet. Übermitteln die Browser dann die veralteten Cookies, ohne Chance, sie löschen oder ändern zu können?
LG, Kalle
Hi,
Idee: Die Parameterliste wird ZUSÄTZLICH als _POST oder _GET übergeben, um zumindest während der aktuellen Sitzung konstant zu bleiben.
bessere Idee: Die Parameterliste wird _zusätzlich_ in einer Session gespeichert.
Noch bessere Idee: Die Parameterliste wird _primär_ in einer Session gespeichert.
Kann ich mich darauf verlassen, dass KEIN Cookie kommt, wenn Cookies abgeschalltet sind?
Wie kommst Du darauf, das Verhalten des Client sei mit "abgeschaltet" hinreichend beschrieben? Cookies werden vom Client gesendet, wenn für den Seitenbereich welche gespeichert sind.
Was passiert, wenn der User zunächst Cookies akzeptiert, sie dann aber abschaltet. Übermitteln die Browser dann die veralteten Cookies, ohne Chance, sie löschen oder ändern zu können?
Wieso "ohne Chance"? Vorhandene Cookies werden natürlich gesendet. Gelöschte Cookies natürlich nicht. Die _Annahme_ jedes einzelnen Cookies kann akzeptiert, abgelehnt oder dem User zur Auswahl gegeben werden, ganz nach Belieben, und was gespeichert wurde, kann vom User beliebig manipuliert werden.
Cheatah
Hi, Cheatah,
Noch bessere Idee: Die Parameterliste wird _primär_ in einer Session gespeichert.
Okay, was genau ist eine Session?
http://de.selfhtml.org/projekt/kontrollieren.htm#begriffe
also die Arbeit von einer IP-Adresse, solange mindestens einmal pro 30 Minuten zugegriffen wird?
Nun habe ich aber festgestellt, dass mehrere User hinter einem Router dieselbe IP haben. Wie können da die Sessions unterschieden werden? Diese Diskussion hatten wir schon am 18.11.:
http://forum.de.selfhtml.org/archiv/2004/11/t94547/
Und wann "verliert" der PHP- Server die Session-Variablen ?
Kalle
Hi Kalle_Worms,
Okay, was genau ist eine Session?
http://de.selfhtml.org/projekt/kontrollieren.htm#begriffe
also die Arbeit von einer IP-Adresse, solange mindestens einmal pro 30 Minuten zugegriffen wird?
Eine Session ist erst mal eine Datei, die auf dem Server gespeichert wird und die Variablen (natürlich auch Arrays) enthalten kann - mal so ganz einfach gesagt.
Jede Session hat eine ID (AFAIK auch gleich der Dateiname). Wenn eine SessionID an das PHP Script übergeben wurde (wie s.u.) und es wird dann eine Session gestartet, dann können Werte in der Session abgelegt werden oder später auch wieder ausgelesen werden (das ist alles im Array $_SESSION in PHP drin).
Jetzt muss man natürlich dafür sorgen, dass die Session ID (wenn diese verloren geht, gehen auch die Daten für den Besucher verloren) immer wieder mitgegeben wird. Dass passiert so:
Es existiert nach dem Starten der Seesion die Konstante SID. Wenn ein Cookie gesetzt wurde, dann ist diese Konstante leer, ansonsten enthält sie sessionname=sessionid, man kann diese Konstante also in Link mit einbetten:
<a href="datei.php?<?php echo SID; ?>">bla</a>
Das ist jetzt aber alles erst mal unabhängig von der IP des Users, so können also auch mehrere User mit der gleichen IP verschiedenen Sessions haben, denn jedem wird eine eigene Session gegeben und jeder hat seine eigene Session ID.
Was du natürlich machen kannst, ist selber einen IP Schutz bauen, also so ewtas, dass wenn die IP sich in einer Session ändert die Session zerstört wird oder so, dass könnte z.B. dann der Fall sein, wenn jemand meine Session ID rauskriegt und von seinem PC aus meine Session ID an die URL dranhängt.
Und wann "verliert" der PHP- Server die Session-Variablen ?
Das ist eine Einstellungssache des Servers, die man AFAIK auch mit ini_set() neu setzen kann. Du solltest dazu noch mal http://de3.php.net/manual/de/ref.session.php im PHP-Manual lesen, insbesondere session.gc-maxlifetime dürfte für dich interessant sein.
MfG, Dennis.
Hi,
habe jetzt also Sessions aktiviert, verweigere das zugehörige Cookie und bekomme folgenden Text:
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
Habe bei allen Variablen $_SESSION[...] hinzugefügt, aber der Text bleibt. Hier mein Source (kommt das von source=Sorgen ?)
// ---------------------------------------------
// S E S S I O N S T A R T E N
// ---------------------------------------------
session_start();
if ( !session_is_registered( "sess_aen_berechtigung") ) session_register( "sess_aen_berechtigung" );
if ( !session_is_registered( "sess_startzeit") ) session_register( "sess_startzeit" );
if ( !$_SESSION['sess_aen_berechtigung'] ) {
if ( session_is_registered("kennwort") && session_is_registered("passwort")) {
// aus form anmeldung:
$_SESSION['kennwort'] = $_POST['kennwort'];
$_SESSION['passwort'] = $_POST['passwort'];
if (( $_SESSION['kennwort'] == 'xxxxx' && $_SESSION['passwort'] == 'yyyyyy' )
|| ( $_SESSION['kennwort'] == 'aaaaa' && $_SESSION['passwort'] == 'bbbbbb' ))
{
$_SESSION['sess_aen_berechtigung'] = 1;
$_SESSION['sess_startzeit'] = time();
} else {
$text = "<font color=#ff0000>Anmeldung um ".date( "H:i:s", time())." fehlgeschlagen, bitte wiederholen</font> ";
}
} else {
session_register( "kennwort", "passwort" );
$text = "Bitte anmelden ";
}
}
Was will die Meldung mir sagen ?
LG Kalle
Hi,
hallo
habe jetzt also Sessions aktiviert, verweigere das zugehörige Cookie und bekomme folgenden Text:
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3.
das will dir glaub ich sagen das du eine höhere version benutzt, also wahrscheinlich 5 und diese funktion gab es nur bis 4.2.3, aber da es nur eine warning is, ist es egal
Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
Habe bei allen Variablen $_SESSION[...] hinzugefügt, aber der Text bleibt. Hier mein Source (kommt das von source=Sorgen ?)
source = Quelle = Code
....
Hallo Cheatah,
Kann ich mich darauf verlassen, dass KEIN Cookie kommt, wenn Cookies abgeschalltet sind?
[...] Cookies werden vom Client gesendet, wenn für den Seitenbereich welche gespeichert sind.
Was passiert, wenn der User zunächst Cookies akzeptiert, sie dann aber abschaltet. Übermitteln die Browser dann die veralteten Cookies, ohne Chance, sie löschen oder ändern zu können?
Wieso "ohne Chance"? Vorhandene Cookies werden natürlich gesendet.
Das ist nur bedingt wahr.
Ich habe das jetzt mit Firefox ausprobiert:
Erlaub man einer Site Cookies zu setzen und dann entfernt dam die Site aus der Liste, so wird kein Cookie mehr gesendet, obwohl die soeben erzeugten noch gültig und vorhanden sind. Das gilt sowohl für normale Cookies wie für Session-Cookies.
IE etc. habe ich jetzt nicht überprüft, aber ich gehe davon aus, dass sie sich ebenso verhalten.
Grüße
Thomas