これまででログインフォームとログイン機能ができたので、その他のページにもログインしているかどうかを判断するためのプログラムを書く必要があります。
しかし、これまで作ったプログラムにもその処理を書かなければいけないとなると大変面倒です。そこで、ログインのための処理を別プログラムにして各プログラムから呼び出すしたら楽ですね。index.phpと同じ階層にincludedというフォルダを作り、そこにlogin.phpというプログラムを作成していきます。
login.php
<?php session_start(); if(!isset($_SESSION[‘id’])){ header(‘Location:login.php’); exit(); } ?> | どのページからも最初に読み込むことを考え、session_start関数をプログラム冒頭で実行させることにする。内容はidが見つからず、ログインしてなければlogin.phpへ移動させます。 |
まずはindex.phpで読み込ませてみます。
index.php
<?php include ‘includes/login.php’; $fp = fopen(“info.txt”,”r”) ?> <!DOCTYPE html> <html lang=”ja”> <head> ~ | 読み込むにはinclude関数を使い、指定したファイルを読み込みます。include ‘includes/login.php’;を追記しました。 |
他に作ってきたファイルのalbum.php、bbs.php、info.php、upload.php、write.phpでも同様に、includeでログイン処理をしておきましょう。
ログアウト処理
navbar.php
ログアウト処理へのリンク追加をしましょう。
<nav class=”navbar navbar-expand-lg navbar-white bg-dark fixed-top”> <a class=”navbar-brand” href=”./index.php”>サークルサイト</a> <button class=”navbar-toggler” type=”button” data-toggle=”collapse” data-target=”#navbarExampleDefault” aria-controls=”navbarExampleDefault” aria-expanded=”false” aria-label=”Toggle navigation” > <span class=”navbar-toggle-icon”> </span> </button> <div class=”collapse navbar-collapse” id=”navbarExampleDefault”> <ul class=”navbar-nav mr-auto”> <li class=”nav-item”><a class=”nav-link” href=”info.php”>お知らせ</a></li> <li class=”nav-item”><a class=”nav-link” href=”upload.php”>画像アップロード</a></li> <li class=”nav-item”><a class=”nav-link” href=”./album.php”>アルバム</a></li> <li class=”nav-item”><a class=”nav-link” href=”bbs.php”>掲示板</a></li> <li class=”nav-item”><a class=”nav-link” href=”logout.php”>ログアウト</a></li> </ul> </div> </nav> | 太字の文字だけ追記 |
logout.php
<?php session_start(); if(isset($_SESSION[‘id’])){ unset($_SESSION[‘id’]); } header(‘Location:login.php’); ?> | セッションにユーザーIDが保存されていたとときに、unset関数を使って変数を削除します。unsetは、引数に指定された変数そのものを削除する関数です。変数にnullやゼロを代入した場合、変数自体を削除したわけではないのでisset関数の返り値はTRUEになります。ですが変数にunset関数を使った場合は変数自体が削除されるため、FALSEになります。 |