ログイン管理について

このQ&Aのポイント
  • ログイン管理についての質問について説明します。ログインページからセッション情報が消える問題が発生しており、Yahoo!のようにセッションとCookieを両立させる方法を知りたいです。サンプルや参考になるページがあれば教えてください。
  • phpで会員制のサイトを作成しようとしていますが、ログイン中に他のページに遷移し、「戻る」の操作を行うとセッション情報が消える問題があります。この問題を解決するためには、セッションとCookieを両立させる方法を知りたいです。Yahoo!のようにログイン情報を保持する方法についてのサンプルや参考になるページを教えてください。
  • 今、phpで会員制のサイトを作成していますが、ログイン中に他のページに遷移し「戻る」の操作を行うとセッション情報が消える問題が発生しています。この問題を解決するために、セッションとCookieを両立させる方法を知りたいです。具体的な方法やサンプル、参考になるページがあれば教えてください。
回答を見る
  • ベストアンサー

ログイン管理について

こんばんは。  phpを始めたばかりで分からないことがあり、細かく教えて くださる方がいましたらお願いします。  いまphpで会員制のサイトを作成しようと思っています。 分かりやすく言いますと「Yahoo!」さんのようなサイトを です。  そこで登録や修正・削除のページを作成しました。 次にユーザーIDとパスワードを入力してもらい、それによる 認証を実行し結果を出すページも作成しました。 ログイン情報の保持はセッションを利用しています。 そこまで作成し行き詰まりました。 参考にしたページは:http://php.dori-mu.net/session.htmlで このページに記されている「definition.php」ファイルに ログイン情報を格納しようと思いました。 問題となっているのは下記のとおりです。 ●まずユーザの想定するフローは  1.ログインページ(001.php)  2.認証および結果ページ(002.php)  3.会員制ページ(003.php~009.php)  4.ログアウトページ(010.php) でしたが ●想定外のフローは  1.ログインページ(001.php)  2.認証および結果ページ(002.php)  3.会員制ページ(003.php~009.php)   ※この会員制のサイトのログイン中に他のページ    (google等)に遷移する。  4.googleにて色々な操作し「戻る」の操作を行わないで   再度3.の会員制のサイトに遷移  5.会員制ページ(003.php~009.php) ●上記の想定外のフローを行うと、セッション情報が  空となってしまいます。  「戻る」による操作で会員制に戻ると、セッション情報は  保たれています。  「Yahoo!」さんのサイトでは「Yahoo!」にログイン中に 他のサイトに遷移し「戻る」の操作を行わないで「Yahoo!」に 戻ってもログイン情報を保たれています。  ネットで検索を行ったところ、「Yahoo!」さんでは セッションの他にCookieを利用していると拝見しました。 この二つを両立させるには、どのようにしたら 良いのでしょうか? また、もし「Yahoo!」さんが、この方法で無い場合は どうような方法なのでしょうか?  サンプルや参考になるページがありましたら よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • oscar3
  • ベストアンサー率100% (2/2)
回答No.2

ソースを見ましたが、セッションに格納している部分が見当たらないですね・・・ このソースからだと”セッション管理をしていない”ということになります。 もしかしてPOSTのデータ(print $_POST[tAAA];の部分)が消えてしまうって事を言っていますかね? であれば、戻るボタンで「見た目」動くのはキャッシュデータを表示しているだけです。 セッションでログイン情報を管理するのであれば、認証を正常通過したタイミングで S_SESSION['tAAA'] = $_POST['tAAA']; とし、以降は$_SESSION['tAAA']を参照するようにすれば良いでしょう。 #define(999.php)ですが、どういう意図でやっているのか見えないのですが・・・

tdohmoto
質問者

お礼

お返事ありごとうございました。  私の勉強不足でした。 書いていただいたとおり、セッションを格納していませんでした。 S_SESSION['tAAA'] = $_POST['tAAA']; の文のとおり修正しましたら、無事に入力値が取得できました。 感謝しています。 本当にありがとうございました。

その他の回答 (1)

  • oscar3
  • ベストアンサー率100% (2/2)
回答No.1

通常セッションは今回の想定外フローの動作では破棄されません。 破棄されるタイミングは ・セッションのmaxlifetime(php.iniに設定)に達した時 ・クッキーの有効期限に達したか、削除した時 phpの設定(maxlifetime)あたりが怪しいのでその確認をしてみてください。 (もしくはソース中でsession_destoryをしていないか) >ネットで検索を行ったところ、「Yahoo!」さんではセッションの他に >Cookieを利用していると拝見しました。この二つを両立させるには(略) ちょっと勘違いをしてますかね。 セッションデータはサーバに保存され、そしてそのセッションを識別 するセッションIDは通常cookieに保存されます。(URLにPHPSESSID=xxxxとGET渡しすることも可能) セッションIDを元にサーバは相手を特定しているわけです。 ですので、cookie無効にしていない場合はcookieを利用していることになります

tdohmoto
質問者

補足

ご回答ありがとうございます。 破棄されないのですか。 困りました。なぜ、表示されないのでしょうか? 念のためサンプルに作成したソースを記させていただきます。 誤っている点がありましたら、ご指摘ください。 操作としては「111.php」~「555.php」に流れていく感じです。 「999.php」は上記で書きました「definition.php」になります。 「111.php」で適当な値を入力し、「555.php」で再度、入力値を 表示します。 --------------------------111.php--------------------------- <?php session_start(); mb_language("Japanese"); mb_internal_encoding("Shift_JIS"); require_once "999.php"; print "<HTML>"; print "<HEAD>"; print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">"; print "<META http-equiv=\"Content-Style-Type\" content=\"text/css\">"; print "</HEAD>"; print "<BODY>"; print "<FORM ACTION=\"222.php\" METHOD=\"post\">"; print "<INPUT size=\"20\" type=\"text\" name=\"AAA\"><BR>"; print "<INPUT type=\"submit\" name=\"BBB\" value=\"送信\">"; print "</FORM>"; print "</BODY>"; print "</HTML>"; ?> ------------------------------------------------------------ --------------------------222.php--------------------------- <?php session_start(); mb_language("Japanese"); mb_internal_encoding("Shift_JIS"); require_once "999.php"; print "<HTML>"; print "<HEAD>"; print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">"; print "<META http-equiv=\"Content-Style-Type\" content=\"text/css\">"; print "</HEAD>"; print "<BODY>"; print "<B>"; print $_POST[tAAA]; print "</B><BR>"; print "<P><A href=\"333.html\">333へ</A></P>"; print "</BODY>"; print "</HTML>"; ?> ------------------------------------------------------------ --------------------------333.html-------------------------- <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> </HEAD> <BODY> <P><A href="444.html">444へ</A></P> </BODY> </HTML> ------------------------------------------------------------ --------------------------444.html-------------------------- <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> </HEAD> <BODY> <P><A href="555.php">555へ</A></P> </BODY> </HTML> ------------------------------------------------------------ --------------------------555.php--------------------------- <?php session_start(); mb_language("Japanese"); mb_internal_encoding("Shift_JIS"); require_once "999.php"; print "<HTML>"; print "<HEAD>"; print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">"; print "<META http-equiv=\"Content-Style-Type\" content=\"text/css\">"; print "</HEAD>"; print "<BODY>"; print "<B>"; print $_POST[tAAA]; print "</B><BR>"; print "</BODY>"; print "</HTML>"; ?> ------------------------------------------------------------ --------------------------999.php--------------------------- <?php mb_language("Japanese"); mb_internal_encoding("Shift_JIS"); define("tAAA", "AAA"); //入力値 ?> ------------------------------------------------------------ よろしくお願いします。

関連するQ&A

  • phpで操作中ログイン時間を延長させたい

    現在、会員ページを制作中なのですが、 SESSIONによるログイン認証で ログイン時にページ操作中にセッションが切れる事が度々あるため 操作中にログイン時間を延長したいと考えております。 php・mysqlで制作中なのですが、具体的な方法が 分からずに困っております。 どなたかご教授の程、よろしくお願いいたします。

    • 締切済み
    • PHP
  • phpのログイン後の画面遷移について

    現在、phpで会員制サイトを作成する勉強をしています。 開発環境はxamppでMySQLデータベースにPDOで接続しています。 よく、会員制サイトで、非会員又は未ログイン状態でも、ある程度までページが閲覧でき、 詳しいページを閲覧するにはログイン又は新規会員登録を促すといった仕組みを見かけます。 そのような場合、ログイン後、画面は元のページ(ログイン前に操作していたページ)に戻る必要があると思うのですが、 この場合のphpプログラムは、 ログイン画面に遷移する前のページで empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); でページのURLを取得し、 ログイン画面のページへ移動するためのボタンが押されたらinput-type="hidden"でログイン画面のページにURLを受け渡し、 ログインが成功したら取得したURLに遷移させる という流れで正しいでしょうか? また、非会員が会員登録する場合のページ遷移に関して少し疑問に思うことがあります。 大体非会員のユーザーが新規登録する場合、 新規登録フォームより会員登録後はログイン状態でTOPページに戻ることが多いですが、 それが一般的でしょうか? 会員登録後に登録前に閲覧していたページに遷移させられればユーザーにとっては一番親切だとは思いますが、 最近ではほとんどのサイトが『仮登録用に入力されたメールアドレス宛に本登録用のURLを記載して送信する』という会員登録方法を使用していますが、 前にいたページに遷移させるというのは物理的に難しいため、会員登録後はTOPページに戻しているのでしょうか? また、ログインが必要なページでは issetでセッション変数に情報が含まれているかどうかで、ログイン画面を表示するか 会員閲覧ページを表示するか分岐させると思いますが、 このプログラムはしょっちゅう使われると思うので 別ファイル化して呼び出すのが賢明でしょうか? ご回答、よろしくお願いします。

    • 締切済み
    • PHP
  • PHPのログイン認証管理について

    PHPのログインシステムを開発することになったのですが、一般的に どういった手法がとられているのかお伺いしたくこちらに書き込ませて いただきました。 私が現在実装しているものは、下記となります。 ■ログインフォームからの入力値と照合させ、通った場合、下記の   ようにsession_idをセッションに保存   $_SESSION['authentication'] = sha1(session_id()); ■ログイン後はDBとの通信はせず、上記で保存されたセッション   情報を照合させることにより、認証させる。 if($_SESSION['authentication'] == sha1(session_id())){   認証成功処理 } else{   認証エラー処理 } なにか足りない点や、セキュリティ等の考え方から根本的に誤りが ある場合は、ご指摘いただけますと幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ログインしたら他からログインできないようにしたい

    PHP+MySQLで会員サイトを作っています。 1. 誰か一人がログインしていたら、そのログイン会員と同じIDとパスワードでログインしようとするとログインできないようにするか、元のログインしていた人が強制的にログアウトするようにしたい。 2. 一人のユーザーが複数アカウントを作って会員サイトを使いたい放題にするのを阻止したい。 そのため、「PC1台からは必ず1ユーザーのみしかログインできないようにしたい」です。 (複数PCを使われたら仕方ないかもしれません・・・) よく銀行サイトのようにログイン中に他のブラウザや端末からログインしようとすると「すでにログイン中です。ログインし直しますか?」のようになりますが、1.はこんな感じを考えています。 仕組みとしてはどのようにするのが良いのでしょうか? 1. ログイン時にセッションIDを作り、データベースにそのセッションIDとIPアドレスを記憶しておいて、Web上で何か操作するたびにブラウザ側のセッションIDとデータベース側のセッションIDを比べて同じなら操作を実行し、違うなら操作できないようにする。 2. ログイン中に別のブラウザからログインしようとすると、データベース側に保存されているセッションIDが違うのでログインできないようにする。 3. 同じIPアドレスですでにログイン中の場合、同じPCからは他のアカウントでログインできないようにする。 こんな感じでしょうか? 何か問題点やそもそもこの仕組は間違っていて常套手段があるなどありましたらお教えください。 なんとなく、IPアドレスのチェックはWiMAXなどは時間とともに変わったりするのであまり良くはないかもしれません。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • ログインしたページで、ある処理を実行中に他のページへ飛ぼうとするとログアウトする

    タイトルの通り、ログインしないと表示できないページ間の遷移中に、他のページへのリンクをクリックするとログアウトされていしまいます。原因がわからず困っています。 要件的には、あるページへの遷移中に、他のページへのリンクをクリックすると、最初のページへの遷移を中止して、後からクリックしたページへ遷移する、もしくは、後からのクリックを無視して、最初のページへ遷移する、のどちらかです。 ソースは以下のような感じです。PHP5.2.4です。 session_start(); session_regenerate_id(TRUE); if (isset($_SESSION["isloggedin"]) && $_SESSION["isloggedin"]) { // ログインしていないと見られないページを表示 } else { header ("Location: login.php");// ログイン画面へ ※どうやらこっちの分岐に入るようです。 } ちなみに遷移終了後にさらに他ページへ遷移する場合は問題が発生しません。

    • 締切済み
    • PHP
  • ログインの保持

    このサイトのような、ページ移動に対するログインの保持はPHPのセッションの機能によるものがほとんどなのでしょうか? PHPのセッションだけを使うと、このサイトのようにルータでつながっているバソコンからのアクセスは同一とみなしてしまいますよね?

  • IEでログイン処理が動かない

    会員サイトを作っているのですが、IEではログイン処理が動きません。firefox、chromeでログイン処理がうまく動作しています。 IE7,8ではログイン処理が終了後にTOPページへ戻そうとすると 「Internet Explorer ではこのページは表示できません」と表示されてログイン処理が完了しません。どのように対処すればいいでしょうか? 1.フローはID,PWでDBに問い合わせ 2.合致すればセッションの有効期限の設定。 3.TOPページにheaderで飛ばす となります。 教えてください。 よろしくお願いします。

    • 締切済み
    • PHP
  • セッション管理について

    あけましておめでとうございます。 会員制のホームページを作りたいと思っていますが、認証後のページに 移動したとき、同じセッションであることを調べるにはどうしたらいいでしょうか?  たとえば、認証ページ「A」がhttp://URL/A.htmlそして、 認証後http://URL/B.phpへページが移動したときにこのアドレスを覚えられ直接入力されてもユーザ認証がされていない旨のメッセージを表示させたいのです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • セキュリティーを確保したセッション管理

    現在、javaにて開発を計画中です。 作成するアプリケーションは、 ログイン画面 ↓ ユーザ、パスワード入力 ↓ 認証(データベースに登録された内容チェック) ↓ ユーザごとに許可されたページへの遷移 といった流れを想定しています。 セッション管理を行なう上で、 Javaでは、「HttpSession」を利用して、   // セッション開始   HttpSession session = request.getSession(true);   // セッションに情報を設定   session.setAttribute("USER_ID" , xxxx);   session.setAttribute("PASSWORD" ,yyyy); といった情報をセッションに保存し、ページ移動時にチェック する事を考えました。 あとCookieを利用する方法も考えましたが、CookieにID、passwordを保存することは セキュリティー上問題あると思います。 セッション管理について説明しているページには、Cookieには、セッションIDを保存し・・・とった 記述があるのをよくみます。 セキュリティー上、Cookieを利用する意味もよく分かっていません。 みなさんは、どのようにセッション管理をされているのか教えてください。 出来るだけセキュリティーを確保したいと思っています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • SESSION機能を使ったログイン認証

    SESSION機能を使ってログイン認証をPHPで作りたいのですが・・・ いろいろなサイトを回ってみてもPEARを使ったものやBASIC認証のものばかりでどうも・・・うまくいかないのです。 何かやり方もしくはいいサイトご存知でしょうか? ・dbにあるパスワードとメールアドレスを入力したパスワードとメールアドレスに照合したもの ・パスワードとメールアドレスに合った会員の方の名前を「ようこそ○○さん」と表示したい

    • ベストアンサー
    • PHP

専門家に質問してみよう