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'); }
$_SESSION['token'] = $_POST['token'];
によってセッションにトークンを指定し、session_regenerate_id();
によってセッションIDを変更してセキュリティ対策(セッションハイジャック)としている。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>