こんにちは、片山学園 鉄道研究会のstmkzaです。
今回は前回の続きです。前回:PHPでログインが必要なサイトを作る方法(第1回)
URLの拡張子を消す方法
それではログインページを作りましょう。
その前に、URLの.php
を消して、/login
でアクセスできるようにしましょう
今回はApacheを使っているので、.htaccess
かhttpd.conf
ファイルに設定を記述していきましょう。
/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
# URLがディレクトリでなくて
RewriteCond %{REQUEST_FILENAME} !-d
# URLのファイル名に「.php」をつけたファイルが存在するなら
RewriteCond %{REQUEST_FILENAME}\.php -f
# そのPHPファイルを代わりに表示する
RewriteRule ^(.*)$ $1.php
</IfModule>
PHPファイルからincludeされるファイルの直接アクセスを禁止する
内部で読み込まれるためのPHPファイルに直接アクセスされると不具合が出たり、セキュリティー上の問題が起こることがあります。
ですので、/inc/*
のファイルへのアクセスは禁止します。
/inc/.htaccess
deny from all
単純にすべてのアクセスを拒否する単純な設定です。
ログインページを作る
すみません、具体的なソースコードはセキュリティー上の理由で公開できません。ですので、大体の仕様をここに書きます
- ログインフォームは
/login
にPOSTする - ユーザー名は
[name="username"]
、パスワードは[name="password"]
とする - ログインチェック処理は
- セッションを開始(
session_start()
を実行) - ユーザー名とパスワードが送信されているかチェックする
- パスワードソルトとパスワードを連結して、ストレッチングしてDBから取得したパスワードハッシュと比較
- 成功したら
$_SESSION['user']
にユーザー名を格納する - エラーをを表示(失敗時) or
/index
にリダイレクト(成功時)
- セッションを開始(
こんな感じにしました。
注意点としては、絶対に/inc/auth.php
を読み込んではいけないということです。
前回も書いた通り、リダイレクトループになります。