Table of Contents
PHPスクリプト内でSSL暗号化通信(https://)で接続されているかを調べる方法です。
$_SERVER[‘HTTPS’]
スーパーグローバル変数 $_SERVER を利用します。$_SERVERは接続しているサーバーやファイルのパスなどの情報を格納している配列になっています。
$_SERVER のインデックスに HTTPS を指定すると、HTTPSプロトコル(https://)で接続していた場合、文字列 on を受け取ることができます。
<?php echo $_SERVER['HTTPS']; //httpsで通信しているときは on と表示される ?>
逆に、HTTPSプロトコルでなかった場合、このインデックスは設定すらされないので、isset で判定を行うと false が返されます。
このことを利用して、以下のようにSSL接続かどうかを判定できます。
<?php function isHttps() { // httpsで通信しているかどうか return (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on'); } ?>
この関数は、SSL接続であれば true を返します。
$_SERVER[‘HTTPS’]の注意点
HTTPSでないときに $_SERVER[‘HTTPS’] が設定されないのであれば、わざわざ中身が on であるかを確認しなくても、以下のようにすれば良いのでは? と思われるかもしれません。
function isHttps() { // httpsで通信しているかどうか return (isset($_SERVER['HTTPS'])); }
しかし、HTTPS通信が行われていないときでも、例外的に $_SERVER[‘HTTPS’] が設定されてしまう場合があります。
注意: ISAPI を IIS で使用している場合は、HTTPS プロトコルを通さないでリクエストが行われたときの値は off となることに注意しましょう。
このように off が設定されてしまうことあるので、確実にHTTPS通信であるかどうかを判定するために、$_SERVER[‘HTTPS’]の中身が on であるかどうかをチェックしています。
以上、PHPでSSL通信が行われているかどうかを調べる方法でした。
Thank you for reading my blog.
The URL for RSS feed of this blog is https://joyplot.com/documents/feed/
I’d appreciate it if you would read more articles.