パブリックタグ登録申請サンプルサイト ソース解説

トークン入力ページ・申請選択ページ

概要

このファイルでは、以下の2つの機能を実現する。
  1. トークン受付
  2. トークン破棄
また、表示としては、以下の2種類となる。
  1. トークン入力画面
  2. 機能選択(登録申請/修正申請/ログアウト)
上記の機能・画面は以下のパラメータおよびセッションにトークンが保存されているか否かにより制御される。
token
トークン受付 機能選択
token_reset
トークン破棄 トークン入力画面
パラメータなし・トークンなし
機能なし トークン入力画面
パラメータなし・トークンあり
機能なし 機能選択

解説

このファイルで行われる機能は、冒頭の次の部分で実現される。
if(isset($_POST['token']) && strlen($_POST['token'])==16){
    $_SESSION['token'] = $_POST['token'];
    session_regenerate_id();
}elseif(isset($_REQUEST['token_reset'])){
    session_destroy();
    header('Location: token.php');
}
  1. パラメータtokenが指定された場合は$_SESSION['token'] = $_POST['token'];によってセッションにトークンを指定し、session_regenerate_id();によってセッションIDを変更してセキュリティ対策(セッションハイジャック)としている。
  2. パラメータtoken_resetが指定された場合は、session_destroy();によりセッションの内容をすべて破棄している。

表示内容の切り替えは、

<?php if(!empty($_SESSION['token'])): ?>
略1
<?php else:?>
略2
<?php endif;?>
によって行われる。すなわち、セッションにトークンが保存されていれば略1の機能選択画面となり、保存されていなければ略2のトークン入力画面となる。

ソースコード

<?php
include 'lib.php';
deny_path_info();
if(isset($_POST['token']) && strlen($_POST['token'])==16){
    $_SESSION['token'] = $_POST['token'];
    session_regenerate_id();
}elseif(isset($_REQUEST['token_reset'])){
    session_destroy();
    header('Location: token.php');
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style=Type" content="text/css" />
<meta name="viewport" content="width=device-width" >
<title><?php h(SITE_NAME);?></title>
<link rel="stylesheet" href="base.css" />
</head>
<style>
</style>
<body>

<div id="contents">
<h2><?php h(SITE_NAME);?></h2>
<?php if(!empty($_SESSION['token'])): ?>
    <a href="pubtag.php?action=add" class="button">登録申請</a><br>
    <a href="pubtag.php?action=mod" class="button">修正申請</a><br>
    <br>
    <a href="token.php?token_reset" class="button">ログアウト</a>
<?php else:?>
    <?php if(isset($_POST['token']) && strlen($_POST['token'])!=16):  ?>
    <span class="error">トークンが誤っています</span>
    <?php endif;?>
    <form method="POST">
        <dl>
            <dt>トークンを入力してください</dt>
            <dd><input type="text" name="token"></dd>
        </dl>
        <input type="submit" value="送信">
    </form>
<?php endif;?>
</div>

</body>
</html>