パスワードによる認証とクッキーによる認証をご紹介します。
■一般的なパスワード認証プログラム例
<?php
$conn = mysqli_connect(); //DB接続 パラメータを記載のこと
$fnc = $_POST["fnc"];
$input_id = $_POST["input_id"];
$input_pass = $_POST["input_pass"];
if($fnc == 1){
if(empty($input_id){
$mess1 = 'IDが未入力です。';
}
if(empty($input_id){
$mess2 = 'パスワードが未入力です。';
}
$mess = $mess1.$mess2;
if(empty()){
$input_id = mysqli_real_escape_string($conn,$input_id); //不正文字にエスケープ
$input_pass = mysqli_real_escape_string($conn,$input_pass); //不正文字にエスケープ
$sql = "select 担当者ID from 担当者マスター
where 担当者ID = '$input_id'
and パスワード = '$input_pass';";
$res = mysqli_query($conn,$sql);
$row = mysqli_fetch_array($res);
$tanto_chk = $row["担当者ID"];
if(empty($tanto_chk)){
$mess = 'IDもしくがパスワードが違います。';
}else{
$url = 'https://****.****:.jp/******.php'; //認証後転送させるURL
header("Location: {$url}");
}
}
}
echo <<<EOF
<table>
<form method="POST" action="{$_SERVER["PHP_SELF"]}">
<input type="hidden" name="fnc" value="1">
<tr>
<td width=200">ID
<td width=300">
<input type="text" name="input_id">
</td>
<td width=200">Password
<td>
<input type="text" name="input_pass">
</td>
</tr>
</form>
</table>
EOF;
?>
■クッキ認証設定例
<?php
##session
session_start(); //セッション、クッキーを使うときは必ず最初にこの関数を記載のこと
$accessID = $_cookie['accessID']; //クッキーaccessIDの読み込み
$conn = mysqli_connect(); //DB接続 パラメータを記載のこと
$fnc = $_POST["fnc"];
$input_id = $_POST["input_id"];
$input_pass = $_POST["input_pass"];
if(empty($accessID)){ //アクセス初回
//データチェック、エスケープ処理は省略
$sql = "select 担当者ID from 担当者マスター
where 担当者ID = '$input_id'
and パスワード = '$input_pass';";
$res = mysqli_query($conn,$sql);
$row = mysqli_fetch_array($res);
$id = $row["担当者ID"];
if(empty($id)){
echo '権限がありません';
}else{
$url = 'サイトのドメイン名'; //例)www.sample.jp
setcookie("accessID","$id",time() + 86400,"/","$url"); //クッキーの登録
}
}
以下省略
?>
<解説>
まず、アクセス時にaccessIDとして登録されているクッキーを呼び出します。
クッキーが登録されていれば、認証を通します。この登録されたaccessIDが本当に認証対象かの確認のため
データベースでチェックするのが望ましいです。サンプルはこれを省略してます。
次に、$_cookie['accessID']がない場合、新規登録として判定し、ID、パスワードにチェックでOKなら
setcookie()にてaccessIDとしてクッキーに登録します。クッキーの登録時間は設定できサンプルのケースはでは86400秒つまり1日です。要件に合わせ時間を設定下さい。
■滞在時間設定
抜粋
//$_SESSION['time']の読み込み
$lasttime = $_SESSION['time']; //前回のアクセス時間
//有効期限
$expire = 1200; //1200秒
//期限切れ判定
$timestamp = time(); //現在の時間
$chktime = $timestamp - $lasttime;
if(!empty($lasttime) and $chktime > $expire){ //20分以上経過時は期限切れのページへ遷移
$re_url = 'https://ドメイン名/ディレクトリー/******.php'; //期限切れ表示ページ
header("Location: $re_url");
exit;
}
//$_SESSION['time']へのアクセス時間の書き込み
$_SESSION['time'] = time(); //今回アクセスした時間を登録
<解説>
まず、アクセス時にtimeとして登録されているセッションを呼び出します。
$_SESSION['time']が登録されていれば、判定を通します。この登録された時間と今読み込んだ現在の時間との差が
1200秒以上であれば期限切れのページに転送されます。$_SESSION['time']が登録されていなければこの判定処理はされません。
尚、SESSIONの有効時間は24分です。よって次回アクセス時に判定されることはほぼありません。この設定はphp.iniで設定できます。
有効時間を20分に設定しておけば間違いなくきっちりと判定されます。