PHP vol.17

  • セッション

セッション

ログインが必要なものの場合、階層を進めてもログイン状態を維持する必要がある。
cookieを鍵としてセッションをあけることができる。
ただし、セッションとcookieは別のもの
使い方を誤るとセキュリティ上の問題になる。

セッションの有効期限を設定する
  • session_set_cokkie_params(クッキー名,クッキーの値,有効期限,URLパス,ドメイン,セキュア属性,);
    • ドメインはwww.example.comで書いた場合はexample.example.comでは使えない。
    • セキュア属性をtrueにした場合はhttps://以外で使えない。http://には送られない。
セッションの開始
  • session_start
セッションを破棄する
  • session_destroy

その前にセッションの有効期限を過去にすることが必要。

セッションを使ったアクセスカウンタ
<?php
// セッションの開始
session_start();

$access = 1;
if (isset ($_SESSION['access'])) {
    $access = (int) $_SESSION['access'] + 1;
}
$_SESSION['access'] = $access;

echo $access ."回目のアクセスです。";
問題

1,2,3,5,6,7,9,10,11,13,14,15,19,21という形で上がるカウンターを作れ

<?php

session_start();

$num = 1;
if (isset($_SESSION['num']) && $_SESSION['num'] < 21) {
    $_SESSION['num']++;
    if ($_SESSION['num']%4==0) {
        $_SESSION['num']++;
    } else {
       
    }
} else {
    $_SESSION['num'] = $num;
}
echo $_SESSION['num'];

問題

入力した値を2時間覚えておくものを作れ。

<?php
session_set_cookie_params(60*60*2);
session_start();

if ($_SERVER['REQUEST_METHOD'] =='POST') {
    $id = $_POST['id'];
    if (!empty($id)) {
        $_SESSION['id'] = $id;
    }
} else {
    
}
if (!isset($_SESSION['id'])) {
    $_SESSION['id'] ="";
}
if (!isset($_SESSION['id'])) {
    $msg = "";
} else {
    $msg = $_SESSION['id']."さん こんにちは!";
}
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<form action="" method="post">
<input type="text" size="20" name="id" value="<?php echo $_SESSION['id']; ?>" />
<input type="submit" name="btn_submit" value="ログイン" />
</form>
<hr />
<p><?php echo $msg; ?></p>
</body>
</html>
  • PHPとHTMLは分離させたほうがよい。