2011年2月18日金曜日

2/18覚書

1時間目は都道府県FizzBuzz。
時間外だけどやぎーにヒントもらって何とかクリア。
今日の問題は自力で解けなかった;
やり直すか・・・。

2時間目
cookieのこと。タイムアウト処理は省略。
sessionにも時間制限設定やりたかった(・・・と思ったら住所録拡張につながったよ↓)

cookieは値を直接ブラウザに入れる。
sessionはサーバー上に鍵(cookie)付の一時キャッシュで保管され、
ブラウザに鍵(cookie)が渡される。
アクセスのたびに鍵(cookie)を使い、サーバーにアクセスする。
そのままだと防御の手立てがないため、セットで覚える。
session_start()させたら、
攻撃を防ぐ関数:session_regenerate_id()を使う。

◆セッション開始とログイン処理の例。
//セッション機能を開始する=ロッカーを使用できるようにする=鍵を発行する
//セッションID(SESSID)=セッションの鍵は32ケタの英数字
session_start();

//セッションハイジャック対策
session_regenerate_id(true);

if ($_POST["id"] =="yamazaki" && $_POST["pass"] =="pass") {
 $_SESSION["loginname"]= $_POST["id"];
 print 'ログインしました<a href="./session2.php">マイページ</a>へ進む<br />';
 exit;
}
?>
<!DOCTYPE br PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
ログインしてください<br />
<form action = "session1.php" method = "POST" >
 ID:<br>
 <input type = "text" name = "id" value = "" /><br />
 Password:<br>
 <input type = "password" name = "pass" value = "" /><br />
 <input type = "submit" name = "login" value = "ログイン" />
</form>
</body>
</html>

◆セッション処理してマイページ表示
/*****************************************************************

■プログラム概要
【セッションIDが確認できる場合】
マイページを表示
【セッションIDが確認できない場合】
ログインページ(session1.php)に強制的に戻す
header("location: http://*****)
session2.php

*****************************************************************/

//既にセッションが開始=鍵が発行されているので、その鍵をブラウザから受け取って
//ロッカーの中身を確認しに行く
session_start();

//セッションハイジャック対策
session_regenerate_id(true);

if($_SESSION["loginname"]!="yamazaki"){
 //header("location: http://*****)で、*****へ強制ジャンプ。ローカルは省略可能。
 header("location: session1.php");
}
?>
<!DOCTYPE br PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
マイページです。
<a href = "session3.php" >ここをクリック</a>するとログアウトします。
</body>
</html>

3時間目

◆セッション削除

/*****************************************************************

■プログラム概要
ログアウトページ(セッションIDの破棄)

session3.php

セッションの破棄
・$_SESSION = array() ; //ロッカー自体を撤去
※array()は配列変数を初期化する記述
・session_destroy //ロッカーの中身だけを消去

*****************************************************************/
//セッション機能を開始する=ロッカーを使用できるようにする=鍵を発行する
//セッションID(SESSID)=セッションの鍵は32ケタの英数字
session_start();

//セッションハイジャック対策
session_regenerate_id(true);

//ロッカー自体を撤去
$_SESSION = array() ;

?>
<!DOCTYPE br PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
ログアウト(セッション変数を消去)しました。<br />
現在未ログイン状態です。<br />
このまま<a href = "session2.php" >マイページ</a>に遷移することはできません
</body>
</html>

MVCモデル Model View Controllerから、
controllerの概念と機能を勉強するよ!

WEBアプリ必須のログイン画面をcontrollerでつけていくよ。

◆address_bookにuserテーブル追加~
CREATE TABLE `address_book`.`user` (
`user_id` VARCHAR( 20 ) NOT NULL ,
`user_name` VARCHAR( 20 ) NOT NULL ,
`user_nickname` VARCHAR( 20 ) NOT NULL ,
`password` VARCHAR( 10 ) NOT NULL ,
`authority` TINYINT( 1 ) NOT NULL ,
`create_at` DATETIME NOT NULL ,
`update_at` DATETIME NULL ,
`del_flg` TINYINT( 1 ) NOT NULL ,
PRIMARY KEY ( `user_id` ) ;

すいません取り合えずinsertからやりました。
でもあり? 権限はどこで処理するんだ?
管理者パスワードとユーザーパスワードとほんとは判定別だよね;
細けぇ(ryでAdminでとりま変更。

sessionのincludeは、HTMLの宣言前に置かないとエラーになる、そうです。
これで40分ぐらい悩みました・・・。

自分用メモ。
びびえすみなおせ~