自分流

なんちゃってエンジニアによる自分用メモ

お題で開発

ログイン機能の実装【お題で開発:4】

投稿日:2019年10月24日 更新日:

前回ユーザーの新規登録を作りました。

今回は登録したユーザーでのログインを作ります。

 

 

もはやどんなサービスでも存在するログイン機能。

今更説明するまでもない機能ですが、どういう動作をしているか考えてみます。

 

ログイン機能とは?

ログインとは

そもそもログインとは?

ログインとは、スマートフォンやパソコンでインターネット上の様々なサービスを利用する際に、予め登録しておいたアカウント情報を用いて個々人のデータにアクセスする認証行為のことです。 例えば、オンラインゲームではユーザー名とパスワードを入力することにより自分で作成したキャラクターデータにログインすることができます。

とはサーチ – ログインより

 

Aさんがログインすると、Aさんの投稿内容やプロフィールが見え、

Bさんがログインすると、Bさんの投稿内容やプロフィールが見える。

ログインしたアカウントによって、そのアカウントに紐づいた情報を表示する。

当たり前のことですよね。

 

どうやって実現しているの?

「ユーザー:Aとしてログインした!」という情報を持ってページにアクセスすることで、ユーザーA向けの情報を表示。

これがログインの正体です。

 

ログインをする=ログイン情報の保存

会員向けページ=ログイン情報のチェック

内部的にはこれだけです。

 

どうやってPHPで実装するの?

答え:セッションです。

 

実はPHP(Webサービス)ってページをまたいでデータを保持するのが苦手なんですよね。

変数に値をセットしても、別のページに遷移したらなくなってしまいます。

他のページにデータを渡したい場合は、<input type=”hidden” name=”test” value=”内容”>

のようにして、postやgetで渡すか、今から説明するセッションで渡すわけです。

 

セッションとは

複数ページ間でデータを共有する仕組み


 

ログインしていない場合、プロフィールのページにアクセスすると、ログインをしていないので、ログインページに飛ばす(リダイレクト)を実施

ログインしている場合は、ログインしてる人のデータをDBから取得してプロフィールページを表示

のように、ログイン情報によって処理を振り分けてるのです。

 

ログインってこれだけです。

 

では実際のコードを見ていきましょう。

 

ログイン機能の実装

 

ファイル構成は以下の通り

 

処理の流れはこんな感じ

ログイン(入力) → チェック → ログイン後の画面

 

会員向けページは

ログイン情報の確認
→ OKならページ表示
→ NGならログインページの表示

という処理にします。

 

ログアウトするまではログインした状態を維持する(セッション)

ログアウトするとセッションを捨てる

 

この辺りを実装すればログインは完了です。

 

入力画面

ただの入力画面。

 

ログイン情報のチェック

postで受け取ったIDとパスワードをサニタイズ。

パスワードはmd5で暗号化してDBに保持しているので、同様に入力値をmd5で暗号化したものをDBと比較します。

 

入力したIDとパスワードがDBに存在しているか確認し、

存在していれば以下の情報をセッションに保存し、次のページに遷移

  • ログインした
  • ログインしたユーザーID
  • ログインしたユーザーの名前

存在していない場合はログインページに戻るよう促します。

 

セッション部分を詳しく見てみると

session_start();でセッション使用を宣言

$_SESSION[‘xx’] = hoge;   でセッションの中に保持したい情報を代入

ただそれだけですね。簡単ですね。

 

注意点として、session_start();はページに何か表示しているとエラーが起きます。

HTMLなどの表示をする前に実行する必要があります。

 

ログアウト

 

$_SESSION = array();  セッション変数を空にして

if(isset($_COOKIE[session_name()]) == true){
setcookie(session_name(), ”, time() – 42000, ‘/’);
}

パソコン側のセッションIDをクッキーから削除して

@session_destroy();  セッションを破棄

 

クッキーは・・・・まぁ、ググって・・・

この一連処理はセッション情報を破棄する際のセオリーのようです。

 

 

ログイン状態確認

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

isset($_SESSION[‘login’]) == false ログイン時に$_SESSION[‘login’]に値を入れているので、その存在確認によってログインか否かを判断しています。

この一連の処理を会員向けページの先頭に仕込めば、ログイン機能の完了です。

※セッションハイジャック
セッションが横取りさせれてなりすまされること。
詳しくは調べてください。
脆弱性・セキュリティ分野の話なので結構高度ですが、脆弱性を突かれると致命的な場合が多いためメジャーなところは必ず知っておく必要がある。

 

まとめ

ログイン機能は案外簡単に作れるんですね。

ログインチェックは会員向けページ全てで実行する必要があるので、呼び出しやすい形にしておくのがいいですね。

 

さぁ、次はプロフィール画面にいきましょうか。

 

今回の成果

github

 

機能一覧

  • ユーザー登録 済!
  • ログイン 済!
  • プロフィール編集
  • プロフィールに画像投稿
  • 一覧表示
  • 新規つぶやき
  • つぶやきへのコメント
  • コメントへのコメント
  • つぶやき、コメントに画像添付
  • いいね

 

つづく

-お題で開発
-, , , ,


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

ツイート一覧機能の実装【お題で開発:7】

前回ツイート機能を作りました。 今回はツイート一覧機能を作っていきます。   タイムライン を作ってみたいですが どういう仕組みかパッと浮かばないので、昔ながらの10件ずつ表示してページ送り …

ユーザーの新規登録機能の実装【お題で開発:3】

前回環境構築も済み、意気揚々と開発! あんまり頭の中で構築できておらず、 不安しかありませんがハマりながら作っていきます。 やればなんとかなるでしょうし、やらなければなんともならないですからね。 &n …

環境構築【お題で開発:2】

前回設計が終了したので、開発していき・・・たいところですが。 開発環境をきちんと準備しておかないと、のちのち死にます。 昔であれば、XAMPPやLAMPP、MAMPでテスト環境を開発機に直に構築してい …

まずは設計【お題で開発:1】

お題が決まりました!   何かしらの投稿サービス 期間一ヶ月   と言うわけで作っていくんですが、 いきなりプログラムを書き出すと漂流してしまうので道しるべを書きます。 開発の前段 …

ツイート詳細・コメント機能の実装【お題で開発:8】

前回ツイート一覧機能を作りました。 今回はツイート詳細・コメント機能を作っていきます。   以前作ったツイート機能の実装と同じように作っていきます。       …

Top