質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • PHP

    20326questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • セッション

    95questions

    Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

会員サイトをphpで作り構成し会員がログインした後$_SESSIONで情報を持つことについて

受付中

回答 1

投稿

  • 評価
  • クリップ 3
  • VIEW 204

konpei_konpei

score 14

ログインをした後にページを切り替える度に
$_SESSIONにお客様の名前を入れてそれを所持していれば会員ページを開けるようになっております。

if($_SESSION["name"]){
    session_regenerate_id(true);
//それ以降の処理
}else{
    header("Location: url");
    exit();
}

ここでふと疑問を思いました。
この際にあくまで$_SESSION["name"]があるかのチェックをしています。
これだけでいいのでしょうか?

それとも$_SESSION["name"]がデータベースにしっかり一致しているものがあるかどうかのチェックあるいは$_SESSION["name"]と$_SESSION["account_id"]みたいなデータベースに保存しているもので一致しているものがあるか毎回確認するべきなのでしょうか?

あくまで予想なのですがもし$_SESSION["name"]があるかどうかのチェックのみでしたら何かしらかの手段で$_SESSION["name"]にデータを持たせることができたら問題が生じるのではないか?と思っております。

宜しくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

 質問への回答

何を持って「ログインしている」とするかで、認証済みかを判断するべきでしょう
sessionに"name"が登録されている事が「ログインしている」とするのであれば、"name"の存在チェックでも問題ありません
※ sessionへのnameのセット処理が不正に呼び出されないことを前提としています

あくまで予想なのですがもし$_SESSION["name"]があるかどうかのチェックのみでしたら何かしらかの手段で$_SESSION["name"]にデータを持たせることができたら問題が生じるのではないか?と思っております。

クライアント側からsessionに自由に値をもたせることは、通常考えられないので、上記の可能性は低いと考えられます

 現状の処理で考えられる問題点

・会員がログイン中に削除や停止となる可能性
ある会員を削除する場合、その会員がログイン中であっても、その後の操作は行わないようにしたいのではないでしょうか
その場合、セッションの中身だけでの判断だとログインが保持され続けることになります
毎回データベース等の最新の情報にアクセスするほうが良いでしょう

・開発者のプログラミング理論的なもの
一般的には"name"の存在が「ログインしている」とは直接結び付けられません。
sessionには「ログインしている」というステータスを持たせる等して、それをチェックするほうが、多の開発者から見て分かりやすいものになります。
また、認証の処理を全ページにifで記載するのではなく、Authenticationクラスを作るなどして、認証処理の責任は一箇所にまとめる方が本来的でしょう

 最後に

会員ページがあるようなシステムで、認証、認可のセッション周りの処理を自作で書くことは思わぬ脆弱性を生む可能性が高いと言えます
フレームワークを利用し、セッションの管理はフレームワークの機能に任せるほうが無難でしょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    自動ログインについて

    Cookieがあれば自動ログインさせるために色々試しているのですが、 ブラウザを閉じて再度login.phpにアクセスするとちゃんと <input type="email" n

  • 解決済

    php側からphpmyadminにinsertできない

    前提・実現したいこと 現在、ユーザがフォームに入力した情報(ID,name,Email,password)をDB(mysql)を登録するようなサンプルを作成しています。(フォーム

  • 解決済

    PHP掲示板

    やりたいこと 1 名前をNAMEにして投稿できるようにする。 2 タイトルをつける 3 画像も送れるようにする ソースコード <?php session_star

  • 解決済

    PHP文字の代入

    したいこと ログインしてるかしてないかで、表示させる文字列を変える。 コード <?php session_start(); // ログイン状態チェック if (!iss

  • 解決済

    ヒアドキュメント

    PHPでサイトの作成での勉強で、ログインのモーダルウインドウを表示するようにしたんですが、全ページにつけるとなると結構たいへんで、後にデザイン変更する時も大変になるのでと思い。管理

  • 解決済

    PHPセッションCookie

    いつもお世話になっています。 数ある投稿の中ありがとうございます。 さて、早速本題に入らせていただきますが、私はPHP初心者でまだサンプルコードなどを参考にしながら勉強をしているも

  • 解決済

    Fatal error: Uncaught exception 'PDOException'

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity co

  • 解決済

    PHP 例外処理任意の例外検知

    例外処理についてです。 データベースなどを扱う際tryでデータベースの部分を囲みエラーを検知するなどの使い方があると思いますが、catchの部分で任意のエラーを検知する方法ってあり

同じタグがついた質問を見る

  • PHP

    20326questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • セッション

    95questions

    Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。