ログイン状態の確認方法について

このQ&Aのポイント
  • ログイン状態の確認方法のセキュリティを高めるには、何をチェックしないといけないのでしょうか?
  • PHP初心者の方へ、ログイン機能を備えたウェブサイトでログイン状態を確認する方法について教えます。
  • ログイン機能を備えたウェブサイトのログイン状態を確認するには、$_SESSION変数にウェブサイトの名前やユーザー固有の文字列を格納してチェックすることが一般的です。安全で負担のかからない方法です。
回答を見る
  • ベストアンサー

ログイン状態の確認方法について

PHP初心者です。 ログイン機能を備えているウェブサイトを制作していますが、ログイン状態の確認のセキュリティを高めるための方法で迷っています。 今作成したアプリでは、$_SESSION['username']の値を確認してログインであるかどうかを判断している設定ですが、ローカルPHPサーバーでテストを行っている際、この方法では、あるPHPアプリでログインしたら、サーバーの別のフォルダにあるアプリも「ログインしている」と判断してしまいます。 ログイン状態の確認方法のセキュリティを高めるには、何をチェックしないといけないのでしょうか? $_SESSION変数にウェブサイトの名前、ユーザー固有の無作為された文字列などを格納してチェックすることがふさわしいでしょうか? ご存知の方がいらっしゃいましたら、実装があまり負担がかからなくて、安全な方法を教えていただきたいのですが。

  • 2B2B
  • お礼率100% (60/60)
  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

単純に、$_SESSIONの内容が、 $_SESSION['username'] = "userの名前"; と、一次元の配列で格納し、別のアプリケーションでも、同じ配列名でソレを扱うから混ざってしまうということですので、 $_SESSION['application_name']['username'] = "userの名前"; というように二次元配列にして、 application_nameの部分は、そのセッションを利用する各アプリケーションの名前をつけてやれば、良いのではないでしょうか。 例えば、 ブログアプリケーションがあったとして、それのログイン情報を格納する先を $_SESSION['blog']['username'] = "userの名前"; スケジュール管理帳アプリケーションであれば $_SESSION['schedule']['username'] = "userの名前"; と格納してやるとか。 という方法では問題がありますか?

2B2B
質問者

お礼

ありがとうございます。混ざらなくなりました。本当に助かりました。 今後とも宜しくお願いします。

その他の回答 (2)

回答No.2

単純に、 $_SESSION['username']; としている部分を、 $_SESSION['application_name']['username']; とすれば良いのではないでしょうか。 また、それが面倒ということであれば、 http://php.net/manual/ja/function.session-set-cookie-params.php こちらで、セッションIDを格納するcookieの制御をスレば良いのではないかと思います。

2B2B
質問者

お礼

ご回答ありがとうございます。 返事が遅くなりすみませんでした。 $_SESSION['application_name']['username']は具体的に何を含んで、指定の時はどうやってするんですか? $_SESSION['application_name']= (アプリの名前) ; $_SESSION['username']= (ユーザ名); のように値を割り当てますか?それとも直接 $_SESSION['application_name']['username']= (アプリの名前), (ユーザ名); ですか グーグルで探してみたんですが、$_SESSION['application_name']['username']という形が見つかりませんでした。 お手間をおかけしますが、また宜しくお願いします。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>サーバーの別のフォルダにあるアプリも「ログインしている」と判断し ユーザー管理の方法によるのでは? データベースで管理していれば、アクセス権限に柔軟な幅をもたせることが できると思いますが $_SESSION['username']の値があるかどうかではなく、$_SESSION['username']の 値に応じたアクセス範囲など設定する感じでしょうか・・・

2B2B
質問者

お礼

回答ありがとうございます。 はい、データベースでユーザーを管理しています。 しかし、やはり $_SESSION['username']がデータベースにあるほか、ほかの値に頼る必要があると思います。たとえば、セッション番号とか、ユーザーがログインしている時に無作為の値をデータベースに格納して、ログアウトするまで、ページを移動するごとにユーザー名とその値が合っていることを確認したほうがいいんじゃないかと思います。 具体的にほかに簡単かつ安全な管理方法があれば、ご意見をまた聞かせてください。 おっしゃるアクセス権限は具体的にどうやって確認し、ユーザーがユーザーである、つまりセッション乗っ取りを防げるのでしょうか?

関連するQ&A

  • 題:[Windowsネットワークの現在のログイン状態の確認]

    題:[Windowsネットワークの現在のログイン状態の確認] あるネットワークサーバーにアクセス制限が設けられているフォルダがあり、そこにログインを行っているのですが、現在、何のIDを使用してログインしているのか(guestなのか権限付きアカウントなのか)判断する方法はありませんでしょうか。 というのも、ネットワークサーバーを開いたときに、ID,Passの確認ウィンドウが一切出ないのです。

  • セッションをログインについて

    はじめまして。 今、セッションを使ったログインのページを作っています。 流れは、 1.ログインページでIDとパスワードを入力。 2.入力したID・パスワードがあらかじめMysqlに保存してあったのと一致していたら会員ページに移動。 3.セッションにID・パスワードを保存してブラウザを閉じない限り、次回はログイン無しで会員ページに直接いけるようにする。セッションに保存されてないときはログインページにもどす。 以上の流れにそってプログラムを作りました しかし1・2は上手くいったのですが3の部分がうまくいきません。セッションにIDとパスワードを保存することができてるようなのですが、ブラウザを閉じずに、いったん別にページに行き、もう一度会員ページにもどろうとすると、ログインページ戻されてしまい、もう一度ログインしなければいけません。 以下に今回のプログラムを書きました。このプログラムのどこを直せば、いいのかお分かりになる方いらっしゃいましたらアドバイスのほうよろしくお願いします。 使用環境は PHP 5.2.5(xampp使用) MySQL 5.0.51a register_globals = Onになっています。 /*ログインページは省略しました。パスワードとユーザーIDを入力してこのページに飛びます。*/ <?php function redirect($url) { header("Location: ".$url); exit; } session_start(); /*保存していたセッションが存在するか確認なければログインのページにもどす。$_SESSION['username']) の部分を$_POST…にしたのですがそれでも結果は同じでした。*/ if(empty($_SESSION['username']) || empty($_SESSION['password'])) redirect("loginpage.php"); $user = $_POST['username']; $pass = md5($_POST['password']); /*Mysqlへ接続。セッションの問題が解決したらMysql用のクラスを作る予定です。*/ $dbHost = "localhost"; $dbUser = "*****"; $dbPass = "******"; $dbDatabase = "mysql"; $db = mysql_connect("$dbHost", "$dbUser", "$dbPass") or die ("Error connecting to database."); mysql_select_db("$dbDatabase", $db) or die ("Couldn't select the database."); $result=mysql_query("select * from users where username='$user' AND password='$pass'", $db); $rowCheck = mysql_num_rows($result); /*ID・パスワードが間違ってたら、ログインページに戻す。*/ if(empty($rowCheck)) redirect("loginpage.php"); $row = mysql_fetch_array($result); /*IDとパスワードをセッションに保存*/ $_SESSION['username'] = $user; $_SESSION['password'] = $pass; if($rowCheck > 0) { while($row = mysql_fetch_array($result)) { } /*ログイン成功したら会員ページを表示。*/ echo "Login Succeeded!".$_SESSION['username'];/*←セッションに保存されてるかのテスト。ちゃんと表示されました*/ include("C:/xampp/htdocs/cvptoylibrary.com.au/assets/includes/link1.php"); include("C:/xampp/htdocs/cvptoylibrary.com.au/assets/includes/link3.php"); } else { /*ID・パスワードを間違えてたらログインページに戻す。*/ echo 'Incorrect login name or password. Please try again.'; redirect("loginPage.php" ); } ?>

    • ベストアンサー
    • PHP
  • 【php】ログイン後、元いたページにリダイレクト

    こんばんは。phpを勉強し始めたばかりの者です。宜しくお願いします。 会員制サイトを作っています。 そこで、 ページにログインなしで来ると、ログインページにリダイレクト、ログインすると、元いた場所にリダイレクトされるようにしたいです。 以下のような方法はセキュリティ的に問題ありますでしょうか? セッションに戻るページを覚えさせて、 if (!isset($_SESSION["name"])) { $_SESSION['return'] = $_SERVER["REQUEST_URI"]; header("Location: login.php"); exit; } ログイン処理を終えた後、 if(!empty($_SESSION['return'])){ $url = $_SESSION['return']; header("Location: $url"); exit; } else { header("Location: top.php");// 戻るページがない場合、トップページへ exit; } のようにして、戻ります。 が、期待した通りの動きはできたのですが、セキュリティ的に問題がないかどうか不安です。 もし、やめた方が良いのでしたら、どのような方法が考えられますでしょうか。 ご指導ください。宜しくお願いします。

    • ベストアンサー
    • PHP
  • ログインできない

    こんばんは。いつもお世話になっております。 些か抽象的な質問になってしまいますが、以下のような状況に困っております。 1.ページを移動したりすると、時に勝手に’ログアウトしてしまう事がある’。 2.ログイン状態で、他のサイト(違うサーバ)からリンクを辿って訪問すると、’ログアウトしてしまう事がある’。 以上のような感じなのですが、勝手にログアウトした時は、なかなかログイン出来ず、またログイン出来ても、ページ移動の際、直ぐにログアウトしてしまうといった状況です。 尚、ログインする際は、DB(MySQL)に問い合わせ、ログイン状態を保つため、登録データのidなどを、$_SESSION["id"]=$id; としてセッションに代入しており、ページ移動の際(ログインのみ閲覧可能なときは)、auth.php(ログイン画面、DB問い合わせページ)に移動するよう、 <?php session_start(); require_once("./auth.php"); としたり、 if($_SESSION["id"]==""){ header("Location: http://○○○.com/"); } のようにしています。 些か抽象的で、かつお恥ずかしい質問かと重々承知しているつもりですが、レンタルサーバを借り、実際にアップロードしたところ、開発環境では問題なかった状況で、非常に困っております。 DBの設計が可笑しいのか?PHPのソースが可笑しいのか?色々考えられる点はあるかと思いますが、何処を見直せばいいのか分からず、考えられる点などご意見を伺えれば幸いに思っております。 お忙しい中恐縮ですが、ご指導のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • ■(ログイン)セッションの有効期限の設定法について

    いつも、お世話になっております。(PHP5.2.5) セッションの有効期限の設定方法について色々調べましたが、 解決できなかったため、質問いたします。 --- 例えば、 a.phpと、b.php、2つのスクリプトファイルからなるサイトにおいて、 a.php、b.phpどちらにおいても、スクリプトソース冒頭で、 //(1)サーバ側のセッションファイルの有効期限を(少なくとも)24時間に設定 //有効期限が過ぎた後は、ある一定の確率でGCが起動しファイルを削除 ini_set('session.gc_maxlifetime', 86400); //(2)クライアント側のクッキーファイルの有効期限を24時間に設定 session_set_cookie_params(86400,"/"); //(3)セッションIDを生成、付与 session_start(); とし、 さらに、その上で、 IDとパスワードの入力に成功した場合に、 ログインさせ、その状態をセッション値に入れます $_SESSION['login'] = 'login'; --- 以上の経路をたどった場合の「ログイン持続期間」は、 24時間となると私は考えていますが、違いますでしょうか? しかし、実際には、1時間も持ちません。 (ちょくちょくサイトにアクセスしていると、1時間以上持つようなのですが。 ※つまり、期限が更新(延長)されているんでしょうかね。) で、どうして意図した通りに動かないのかを調べようと、 firefoxにて、クッキーの有効期限を確認すると、 (2)の処理がうまくいっているせいか、 こちらの有効期限は意図通りに設定されています。 よって、意図通りに機能しない原因は、 サーバ側のセッションファイルの有効期限が うまく設定されていないからなのでは、と思っています。 つまり、(1)の処理がうまく出来ていないことが予想されます。 はてさて、どこに問題があるのか…。 また、このサイトの例において、 もし仮に私の意図した通りの設計となった場合には、 アクセスの度に、その有効期限を24時間延長するような処理になるのでしょうか? 以上、どなたかどうかアドバイスを宜しくお願い致します。 --- なお、 セッション値に「time()」を格納し、 その時間をもとに、ログイン期限を設定し、 ログイン時からの経過時間と、その期限とを比較して、 ログイン状態を継続(延長更新?)させるか、切断するかを毎回判断させる、 なんていう方法もありそうですが、 その場合にしても、 結局は、サーバ側のセッションファイルの有効期限の持ちが悪ければ、 同様に、うまくいかないはずだと私は考えています。

    • 締切済み
    • PHP
  • サイトのログイン状態が維持できない。

    Internet ExplorerやMicrosoft EdgeでGoogleやtwitter等の各種ウェブサイトにログインしてもすぐにログイン状態が解除されます。 例として、 Googleでログインしてから、何かを検索したらログインしていない状態に戻ったり、 twitterでログインした後、数十秒後にまた、ログイン画面になったりします。 このほかのウェブサイトでも同様の症状がおこります。 だれかこの状態を治す方法を知っている方いませんか? ※OKWaveより補足:「富士通FMV」についての質問です。

  • ログイン中のフォーム確認画面でのsession管理について。

    例えば、ログインの認証機能をPHPのセッションを利用して作るとします。かつ、ログイン中にユーザのプロフィール変更画面等で、入力後、確認画面を出す際、formのhiddenでなく、これもセッションを利用するとします。 このように、一回のリクエスト/レスポンスに二つ以上のセッションが同時に走る場合、どのように管理するのが効率よいでしょうか?

    • ベストアンサー
    • PHP
  • セッションIDとブックマーク登録

    PHPについての質問です。よろしくお願いします。 ユーザ認証を作っています。 ログインしたときに、セッションを使うのですが、クッキーを使用していないユーザが、ログインしたとします。 そのユーザが、ログインされている状態のときに”ブックマークへ登録(お気に入りに登録)”をすると、セッションIDごと登録されてしまい、ブックマークからウェブサイトにくると、常にログインされている状態でウェブサイトにくるようになってしまいます。 どうすればログイン状態ではなく出来ますか。

    • ベストアンサー
    • PHP
  • 会員ログイン認証について

    仕事でログインの会員認証を作成する事になり セキュリティの件でよかったらアドバイス下さい。 これまでは趣味でログイン認証を作った事があるんですが その時の手順は初めログインページでIDとパスワードの入力させ、 データベースにアクセスし該当のIDとパスワードがあるか確認、 OKの場合はsessionにIDを記録させ 以後ログイン中か否かの判断はsessionのIDを保持してるかどうかで 判別させてました。 例 if($_SESSION["id"]){ ....ok }else{ ....no } 今回実務でログイン判定を作る事になりこのやり方では セキュリティが大丈夫か心配です。 このやり方ならセキュリティもある程度大丈夫だというやり方を 教えていただけませんか? すいませんがよろしくお願いします。

    • ベストアンサー
    • PHP
  • ログイン認証のページの流れ

    こんばんは。お世話になっております。 初歩的な質問かとは思いますが、これまでlocal上、およびあるレンタルサーバ上では問題のなかったものが、今回別のサーバーをお借りしたら、以下のような不具合が出てきてしまいまいました。 タイトルのようにログインに関するもので、ロープに陥ってると・・。 メインページ(ログイン済みのみ閲覧可能) index.php <?php session_start(); if(!isset($_SESSION["id"]){ header("Location: http://***.com/login/"); }   ・   ・ /login/index.php <?php session_start(); require_once("./auth.php"); //以下、ログインが必要なページは全てここのファイルを経過させ、元のページに戻るソースを記述。 if(isset($_GET["url"])){   ・   ・ /login/auth.php <?php //ログイン入力フォームおよびDB問合せスクリプト 以上のようなファイル構成なのですが、最上位のindex.phpを訪問した際、ログインしていなかったら http://***.com/login/ に移動し、ログイン画面を表示する・・という流れを想定しておしましたが、あるサーバでは以上のようなものだとループに陥ってしまうとの障害が確認出来ました。 ローカル上、別サーバでは問題ない(目視で確認出来る障害が無いという意味)ことだったので、流れを見直そうにも的が見えてきません。 相応しくない点、可笑しな点、どんな些細な事でも結構です。お忙しい中恐縮ですが、アドバイスいただけたら幸いです。宜しくお願い申し上げます。

    • 締切済み
    • PHP