@Tchalvak Nein, die aktuellen Antworten sind noch maßgebend. Seit 2008 hat sich nichts an der Einstellung von HTTP-Cookies in PHP geändert. Welche Browser nur HTTP-Cookies unterstützen, ist eine andere Frage mit einer anderen Antwort.
Die setcookie()und setrawcookie()-Funktionen führten den httponlyParameter in den dunklen Zeiten von PHP 5.2.0 ein und machten dies schön und einfach. Setzen Sie einfach den 7. Parameter gemäß der Syntax auf true
Geben NULLSie die Parameter ein, die Sie als Standard beibehalten möchten. Möglicherweise möchten Sie auch überlegen, ob Sie den secureParameter einstellen sollten .
Es ist auch möglich, die ältere header()Funktion auf niedrigerer Ebene zu verwenden:
+1, da dies eine gute Sache (aus Sicherheitsgründen) ist, die auf Ihrem gesamten Server vorhanden ist, aber stattdessen zum hinzugefügt wird php.ini.
Anthony Hatzopoulos
10
Bitte beachten Sie, dass stattdessen php_flag verwendet werden sollte: "Verwenden Sie php_value nicht zum Festlegen von Booleschen Werten. Stattdessen sollte php_flag verwendet werden." php.net/manual/en/configuration.changes.php
Ondrej Machulda
@OndrejMachulda Das Wechseln php_valuezu php_flagfunktioniert funktioniert nicht. Ich habe es gerade auf meinem Server versucht ..
Nate
6
@Nate: Wenn Sie zu ändern php_flag, müssen Sie auch den Wert ändern - entweder onoder off- siehe Handbuch.
Ondrej Machulda
14
Beachten Sie, dass PHP-Sitzungscookies httponlystandardmäßig nicht verwendet werden.
Beachten Sie, dass HttpOnly das Cross-Site-Scripting nicht beendet. Stattdessen wird ein möglicher Angriff neutralisiert, und dies geschieht derzeit nur im Internet Explorer (FireFox macht HttpOnly-Cookies in XmlHttpRequest verfügbar, und Safari berücksichtigt dies überhaupt nicht). Schalten Sie auf jeden Fall HttpOnly ein, aber lassen Sie nicht einmal eine Stunde Ausgabefilterung und Fuzz-Tests im Handel dafür fallen.
Nur FYI session.use_only_cookies ist standardmäßig in PHP> 5.3
Nic Cottrell
1
und richtig ist, dass "alle zukünftigen Sitzungscookies " nur http, nur benutzerdefinierte verwenden ...
qdev
2
Die richtige Syntax des Befehls php_flag lautet
php_flag session.cookie_httponly On
Und seien Sie sich bewusst, setzen Sie einfach zuerst die Antwort vom Server und setzen Sie das Cookie und hier (zum Beispiel können Sie die Anweisung "HttpOnly" sehen. Zum Testen löschen Sie Cookies nach jeder Testanforderung aus dem Browser.
$cookie->setHttpOnly(true);
mit github.com/delight-im/PHP-CookieAntworten:
PHPSESSID
standardmäßig) finden Sie in der Antwort von @ richieDie
setcookie()
undsetrawcookie()
-Funktionen führten denhttponly
Parameter in den dunklen Zeiten von PHP 5.2.0 ein und machten dies schön und einfach. Setzen Sie einfach den 7. Parameter gemäß der Syntax auf trueFunktionssyntax der Kürze halber vereinfacht
Geben
NULL
Sie die Parameter ein, die Sie als Standard beibehalten möchten. Möglicherweise möchten Sie auch überlegen, ob Sie densecure
Parameter einstellen sollten .Es ist auch möglich, die ältere
header()
Funktion auf niedrigerer Ebene zu verwenden:quelle
Für PHP-eigene Sitzungscookies auf Apache:
Fügen Sie dies Ihrer Apache-Konfiguration hinzu oder
.htaccess
Dies kann auch innerhalb eines Skripts festgelegt werden, sofern es zuvor aufgerufen wurde
session_start()
.quelle
php.ini
.php_value
zuphp_flag
funktioniert funktioniert nicht. Ich habe es gerade auf meinem Server versucht ..php_flag
, müssen Sie auch den Wert ändern - entwederon
oderoff
- siehe Handbuch.Beachten Sie, dass PHP-Sitzungscookies
httponly
standardmäßig nicht verwendet werden.Das zu tun:
Einige wichtige Punkte hier:
session_name()
vorher anrufensession_start()
quelle
Beachten Sie, dass HttpOnly das Cross-Site-Scripting nicht beendet. Stattdessen wird ein möglicher Angriff neutralisiert, und dies geschieht derzeit nur im Internet Explorer (FireFox macht HttpOnly-Cookies in XmlHttpRequest verfügbar, und Safari berücksichtigt dies überhaupt nicht). Schalten Sie auf jeden Fall HttpOnly ein, aber lassen Sie nicht einmal eine Stunde Ausgabefilterung und Fuzz-Tests im Handel dafür fallen.
quelle
Quelle
quelle
Erklärung hier von Ilia ... nur 5.2
Unterstützung nur für Cookie-Flags in PHP 5.2
Wie in diesem Artikel angegeben, können Sie den Header in früheren Versionen von PHP selbst festlegen
quelle
Sie können es in der eingestellten Cookie-Funktion angeben, siehe PHP-Handbuch
quelle
Sie können dies in einer Header-Datei verwenden.
Auf diese Weise verwenden alle zukünftigen Sitzungscookies nur http.
quelle
Die richtige Syntax des Befehls php_flag lautet
Und seien Sie sich bewusst, setzen Sie einfach zuerst die Antwort vom Server und setzen Sie das Cookie und hier (zum Beispiel können Sie die Anweisung "HttpOnly" sehen. Zum Testen löschen Sie Cookies nach jeder Testanforderung aus dem Browser.
quelle
Eine elegantere Lösung seit PHP> = 7.0
session_start
session_start-Optionen
quelle