【ログイン情報を作ろう】phpでセッションを使ってみる

PHP PHP

webシステムで、ログイン情報を使って処理をしたい時があります。
例えば、パスワード入力後、ログインしたよ!という状態を作って、会員サービスを使用してもらう等。
そんなときは、セッション情報を作成し、そこにログインしたという情報を残しておくことで実現できます。

セッション情報とは

サーバ上に一時的に作成したファイルです。
xamppを使用している場合、xamppコントロールパネルのApache→Config→PHP(php.ini)を開くと、session.save_path = “C:\xampp\tmp” と記載されている箇所があります。
このsession.save_pathがセッション情報を保存しておくパスになります。
iniファイルを編集する場合は注意!

余談ですが、以前webシステムを組んだ際に、ファイルアプロード機能を実装したのですが、レンタルサーバのGMO iCLUSTA+で動作するようにしなければなりませんでした。

標準で、ファイルアプロードサイズが2MBでした。
それ以上に大きくする場合は、GMO iCLUSTA+の場合、php.iniを自作する必要がありました。

システムテスト時に、php.iniを自作した場合、セッション情報の保存パスが必要だ!(他にも色々必要で苦労しました。)ということが分かり、今回の保存パスをphp.iniに追記したことがありました。

サンプルコード

<?php
    session_start();
    if(isset($_POST['login'])==true){
        $_SESSION['login']=true;
    }
    if(isset($_POST['logout'])==true){
        $_SESSION=[];
    }
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>セッション情報の作成・削除</title>
</head>
<body>
    <?php
        if(isset($_SESSION['login'])==false){
            print 'ログインされていません。';
        }else{
            print 'ログイン中。';
        }
    ?>
    <form name="myForm" method="post" action="study_session.php">
        <input type="submit" name="login"  value="ログイン">
        <input type="submit" name="logout" value="ログアウト">
    </form>
</body>
</html>

上記コードをC:\xampp\htdocs\testに保存し、http://localhost/test/study_session.phpにアクセスしてみましょう。

ログインをクリックすると、、、

ログイン中になりました。

コード解説

2行目のsession_start();で、セッション情報を使う準備をします。

session_start()を行うことによって、$_SESSION変数が使えるようになります。

18行目のif(isset($_SESSION[‘login’])==false){で、セッション情報のloginがあるかを判定しています。
ここでセッション情報がない場合は、true側のログインされていません。が画面に表示されます。

ログインボタンを押すと、study_session.phpにloginがpostされ、4行目の$_SESSION[‘login’]=true;が処理されます。
18行目のif(isset($_SESSION[‘login’])==false){で、else側となりログイン中。が画面に表示されます。

ログイン状態で、一度別なページを表示(googleとか)して、study_session.phpに再度アクセスしてみてください。(戻るボタンでは無く、URLに直接入力してください。)
ログイン中。と表示されるはずです。

 以降は、必ずxampp環境やテスト環境で試してください。他のシステムに影響が出る可能性がありますので、実行する場合は、自己責任でお願いいたします。

ここで少し実験をしてみたいと思います。
C:\xampp\tmpの中に、sess_○○というファイルがあります。

このファイルを削除し、 一度別なページを表示(googleとか)して、study_session.phpに再度アクセスしてみてください。(戻るボタンでは無く、URLに直接入力してください。)

ログインされていません。と表示されます。

注意点

今のままのコードだと、このページにアクセスした人全員のセッション情報を作成してしまいます。
通常は、会員番号とパスワードを入力してもらい、チェックOKのときにはじめてセッション情報を作成します。

また、ログアウトの際には、セッション情報を削除しましょう。