ログイン機能を実装してみる
今回はdotinstallのPHPでログイン機能を実装するの項目についてのまとめ
気になったこと、引っかかってもたついた点を重点的に
MVC設計
ユーザーインターフェースを持つアプリケーションソフトウェアを実装するためのデザインパターン
- Model → データベースの参照などのアプリケーション固有の処理部分や状態遷移部分を記述(ビジネスロジック部分)
- View → 表示画面に関する部分
- Controller → ModelとViewの制御をする部分
- validation(検証)やsessionの管理、エラーハンドリング、リクエスト処理など
- ユーザーインターフェース(UI) → 機械↔人間でやり取り(入力や出力)を実現させる方法(仕組み)
オートロード
- spl_autoload_register → 指定の関数をautoload()の実装として使う
- substr→文字列の一部を返す
- str_replace→文字列の置換をする
- strpos→文字列内の部分文字列が最初に現れる場所を見つける
- 名前空間→定義することで、そのファイルが同じ空間に属していることを示す
phpは同じ関数名が違うファイル内でも定義ができない(エラーになる)が、名前空間が違うと同じ関数名の定義が可能になる - サブ名前空間→ディレクトリの構造のように階層を持たせた記述の仕方(「 \ 」で区切る)
ページのリダイレクト
- URLを定数で管理するメリット
- 複数回使用するときなどの打ち間違いの防止
- アドレス変更があった際の時間を短縮する
formタグ(html)のオプション
- action→送信先のURLを指定、一番優先される
- method→送信方法の指定
- get→URLとして送信する、URLの後ろ?以降に表示される
- post→本文として送信する、URLには表示されない
データのフィルタリング
- filter_var → 指定したフィルタでデータをフィルタリングする
- FILETER_VALIDATE → 検証フィルタ
javascript(onclick)
- onclick → javascriptのイベントハンドラでHTML要素をクリックした際の動きを指定する
- イベントハンドラ → イベントを検出し指定の処理を実行する
- document.getElementById → ドキュメント内のIDから要素を取得する
stdClass、get_object_vars
- stdClass→クラスを定義していないデータ(配列)について、オブジェクト形式での保存を行う、内部定義関数
- get_object_vars → 指定したオブジェクトのプロパティを取得する
(スコープ内でアクセス可能なこと、非staticプロパティであることが条件)
prepareステートメントにおける名前付きパラメータと疑問符パラメータ
- 名前付きパラメータ → 名前を指定した値を使用してプリペアステートメントを準備し、実行する。名前付きパラメータの前には「 : 」がつく
/ 値の配列を渡してプリペアドステートメントを実行する /
$sql = 'SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
引用元PHP公式マニュアル
- 疑問符パラメータ → 名前付きパラメータの「:変数」の部分を「?」に置き換えたもの、名前を指定していないので実行前(もしくは実行時)にわざわざ連想配列を作らなくてもいい
$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
引用元PHP公式マニュアル
セッションハイジャック
- いわゆる「なりすまし行為」で被害が大きくなりやすい(管理者権限を奪われたりなど)
- 対策
- フォームデータ上のhiddenフィールドでやりとりする
- ワンタイムセッションID(都度IDが変わる)を発行する
- 対策
PDO(fetch)とパスワードハッシュ
fetch_class → クラスの新規インスタンスを返す
password_hash → パスワードのハッシュを作成する
- ハッシュ → 固定長のランダムに見える値に不可逆変換する
password_verify → パスワードがハッシュに適合するかを調べる