Wie kann ich feststellen, ob auf eine PHP-Seite über http oder https zugegriffen wurde?PHP: HTTP oder HTTPS?
Antwort
$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'?'https':'http';
$protocol = isset($_SERVER["HTTPS"]) ? 'https' : 'http';
Diese sollten beide arbeiten
In der zweiten Version muss HTTPS in Großbuchstaben sein. – Tim
Wenn die Anforderung mit HTTPS gesendet wurde Sie in der $_SERVER Superglobal einen zusätzlichen Parameter haben - $ _SERVER [ 'HTTPS']. Sie können prüfen, ob es gesetzt ist oder nicht
if(isset($_SERVER['HTTPS'])) {
Das Problem mit diesem Ansatz ist, dass es nicht immer funktioniert, wie die '$ _SERVER'-Dokumentation sagt:" Die Einträge in diesem Array werden vom Webserver erstellt. Es gibt keine Garantie, dass jeder Webserver diese bereitstellen wird Server können einige auslassen oder andere bereitstellen, die hier nicht aufgeführt sind. " – Bruno
Wenn der Server richtig konfiguriert ist, sollte dies kein Problem sein. Besser, diesen Ansatz zuerst zu versuchen und auf Hacks zurückzugreifen, wenn es scheitert –
@EranGalperin, Sie vermissen den Punkt. Ein ordnungsgemäß konfigurierter Server darf $ _SERVER-Einträge weglassen. Es ist ausdrücklich in der Dokumentation erlaubt. – Pacerier
$_SERVER['HTTPS']
Diese enthält eine ‚nicht leeren‘ Wert, wenn die Anfrage über HTTPS
Sie sollten in der Lage sein, gesendet wurde Tun Sie dies, indem Sie den Wert von $_SERVER['HTTPS']
überprüfen (es sollte nur bei Verwendung von https gesetzt werden).
Siehe http://php.net/manual/en/reserved.variables.server.php.
also, wenn ich HTTPS benutze und der Server das $ _SERVER ['HTTPS'] nicht erzeugt, heißt das, dass es ein gefälschtes HTTPS ist? – PSyLoCKe
Dies kann komplizierter werden je nachdem, wo PHP in Ihrer Umgebung sitzt, da Ihre Frage ziemlich breit ist. Dies hängt möglicherweise davon ab, ob ein Load-Balancer vorhanden ist und wie er konfiguriert ist. Hier sind ein paar ähnliche Fragen:
Wenn Ihre Anfrage per HTTPS gesendet wird, müssen Sie einen zusätzlichen Server-Variable namens 'HTTPS'
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') { //HTTPS }
Sollte diese Antwort verwenden, wenn Sie ISAPI mit IIS verwenden. –
- 1. Magento CDN http oder https
- 2. PHP SESSION Variablen zwischen https und http
- 3. Android mit Datenübertragungsprotokoll http oder https
- 4. ASP.net überprüfen, ob Seite http oder https
- 5. HTTPS über HTTP-Proxy
- 6. Kettenumleitung https> http
- 7. Gemischte http/https-Site
- 8. HTTP und HTTPS iframe
- 9. HTTPS und HTTP CORS
- 10. Wordpress http zu https Umleitung
- 11. Problem mit http und https
- 12. Erzwinge HTTP zu HTTPS Umleitung
- 13. http zu https durch .htaccess
- 14. die http auszuziehen oder https aus einem JavaScript-String
- 15. Switching zwischen Http oder Https (basierend auf dem übergeordneten Verzeichnis)
- 16. So ändern Sie CSS-Elemente dynamisch zu HTTPS oder HTTP
- 17. Django, get Schema (http oder https), vor request.scheme Implementierung
- 18. Zugriff auf TortoiseSVN-Datei: // Repository mit http: // oder https: //
- 19. So verwenden Sie die Serverseite enthält bedingte HTTP oder HTTPS
- 20. Download-Datei mit HTTP oder HTTPS in Knoten
- 21. meine app von http zu https
- 22. PHP CURL & HTTPS
- 23. Migration der Website von http zu https
- 24. Wie http umleiten: // http: // www und https: // www zu https: // Verwendung von .htaccess
- 25. IIS7: HTTP-> HTTPS sauber
- 26. http zu https in IIS
- 27. Doppelte Inhalte SEO http & https
- 28. Gleiche uri http und https
- 29. HTTPS-> HTTP via Fiddler
- 30. Http GET Methode zu Https?
Wenn wäre nützlich, um mehr über Ihre PHP-Konfiguration zu erfahren (auf welchem Server sie zum Beispiel läuft). – Bruno
Die folgenden Antworten beziehen sich nur auf die Überprüfung von $ _SERVER ["HTTPS"] sind nicht vollständig. Eine vollständige Antwort finden Sie unter http://stackoverflow.com/questions/1175096/how-to-find-out-if-youre-using-https-without-serverhttps. – AnthonyVO