Als ich kürzlich auf einer Website abstimmte, stieß ich auf einen Konflikt zwischen Cookies und Sitzungen in ThinkPHP, der dazu führte, dass Cookies nicht verwendet werden konnten.
Diese Website wird mit dem ThinkPHP-Framework erstellt. Es gibt eine Seite, auf der viele Bilder angezeigt werden, und für jedes Bild ist eine entsprechende Abstimmung erforderlich. Durch die Beschränkung der IP-Adresse werden Besucher auf mehrere Abstimmungen innerhalb einer bestimmten Zeit beschränkt Bildabstimmung, aber jedes Bild kann nur einmal abgestimmt werden. Dies wurde zunächst durch die Verwendung von IP zum Speichern in der Datenbank gelöst. Die IP-Adresse muss jedoch in der Dienstdatei verwendet werden in einem lokalen Cookie gespeichert werden. Befolgen Sie die Anweisungen im ThinkPHP-Handbuch. Der Vorgang der Sitzung verlief reibungslos, aber nach der Erstellung des Cookies konnte der Cookie-Text nicht auf dem lokalen Computer gefunden werden Generierung von Cookies, aber die Ergebnisse der Anzeige und des Testens zeigten, dass es keine Begrenzung gab, also habe ich eine separate PHP-Datei erstellt und das generierte Cookie getestet. Kein Problem, der Cookie-Text wurde lokal gefunden, sodass ich den folgenden Inhalt online gefunden habe. Das Problem wurde nacheinander gelöst, indem die Funktion setcookie() zum Setzen des Cookies verwendet wurde, und das gewünschte Ergebnis erzielt.
Die Lösung lautet wie folgt:
Suchen Sie die Konfigurationsdatei php.ini und suchen Sie dann nach einem Element: „output_buffering“, ändern Sie seinen Wert von „off“ auf „on“ und starten Sie Apache neu, und es wird sein OK.
Es gibt auch viele ähnliche Probleme:
Manchmal werden Sie feststellen, dass Dateien, die ursprünglich lokal ohne Probleme liefen, beim Testen auf dem Server tatsächlich einen Fehler auslösen, der lokal nicht auftritt: Warnung: Header-Informationen können nicht geändert werden - Header bereits gesendet von...
Bei einer solchen Aussage liegt es auf der Hand, dass der Grund dafür bei setcookie liegt. Nach Überprüfung des Internets gibt es die folgende Erklärung: Es gibt einige Einschränkungen für Verwendung von Cookies selbst, wie zum Beispiel:
1. Die Beschreibung des Aufrufs von setcookie muss vor dem Tag platziert werden
2. Echo kann nicht vor dem Aufruf von setcookie verwendet werden
3. Das Cookie wird nicht angezeigt das Programm, bis die Webseite neu geladen wird
4. Die Funktion setcookie muss
senden, bevor Daten an den Browser ausgegeben werden. Aufgrund der oben genannten Einschränkungen wird dies bei der Ausführung der Funktion setcookie() häufig der Fall sein stoßen auf „Undefinierter Index“ und „Kann Header-Informationen nicht ändern“ – Header bereits gesendet von“... und andere Probleme. Die Möglichkeit, den Fehler „Kann Header-Informationen nicht ändern – Header bereits gesendet von“ zu beheben, besteht darin, die Datenausgabe an zu verzögern Daher können Sie vor dem Generieren des Cookies die Funktion ob_start() verwenden. Auf diese Weise kann das Problem gelöst werden. Wenn Sie jedoch ob_start () hinzufügen möchten, ist dies nicht sehr machbar. Das Programm wurde geschrieben, daher erscheint es etwas deprimierend, dies zu ändern! Als ich herausfand, dass dieser Fehler ausgelöst wurde, fragte ich mich, warum mein lokaler Computer dieses Problem nicht verursachte, weil die PHP.ini-Konfiguration anders war, aber als ich darüber nachdachte, war es falsch egal. Also habe ich mir den folgenden Satz „Ausgabe begann um …“ angesehen, was bedeutete, dass die Ausgabe an einer anderen Stelle vor setcookie erfolgte, also fand ich die Datei, die auf die Ausgabe begann, und stellte schließlich fest, dass die erste Zeile leer war.
Weitere verwandte Artikel über die Cookie- und Sitzungskonflikte von ThinkPHP, die dazu führen, dass Cookies unbrauchbar werden, finden Sie auf der chinesischen PHP-Website!