ログインできない

このQ&Aのポイント
  • ログインできない問題についての質問です。ページ移動や他のサイトからのリンクを辿ると、ログアウトされることがあります。
  • ログイン後にページ移動する際にも、すぐにログアウトされてしまう状況です。
  • セッションにidを保存してログイン状態を保っており、DB(MySQL)に問い合わせを行っていますが、問題が発生しています。どこを見直せば良いか分からず、ご意見をいただきたいです。
回答を見る
  • ベストアンサー

ログインできない

こんばんは。いつもお世話になっております。 些か抽象的な質問になってしまいますが、以下のような状況に困っております。 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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.1

前に自分が経験したのはhttpとhttpsを行き来するとセッションが切れるものでした。 もしそれが原因であれば最初からhttps接続にしてクッキーをセキュア属性で作成するようにしておけばよいかと思うのですが、参考URLのような可能性のほうが高いかもしれないですね。。

参考URL:
http://q.hatena.ne.jp/1171519711
sadacha
質問者

お礼

gogo-tea様 はじめまして、こんにちは。 ご挨拶が遅れて申し訳ありません。 お教えいただいたサイトを拝見し、色々と試してみたところ解決できたようです! 今回の場合、お恥ずかしいながら、単にheader関数において、絶対パスにしていなかった為のようです。 いずれにせよ似たようなセッションが切れる、という件に関して、非常に役立つ情報を得られた気がします。 gogo-teaさんのご経験も含め、貴重な情報を有難う御座いました。

関連するQ&A

  • ログイン認証のページの流れ

    こんばんは。お世話になっております。 初歩的な質問かとは思いますが、これまで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
  • ログインとログアウト

    Webページ作成の際に、ログイン、ログアウトの機能をつけたいです。 また、その際にボタンをつけたいのですが、 「ログイン後にはログアウト」のボタン、「ログアウトの状態ではログイン」のボタンをつけたいと考えています。 現在、 <form name="login {unauth}" action="{REQUEST_URI}" name="logout {auth}" action="{PHP_SELF}" method="post"> <!-- login button for {unauth} --> <input type="submit" name="login" value="Login"> <!-- logout button for {auth} --> <input type="submit" name="logout" value="Logout"> というところまではできたのですが、これだと、ログインしていてもログアウトの状態でも「ログイン」「ログアウト」2つのボタンが表示されてしまいます。 お力添えいただけないでしょうか?

  • ログインすると真っ白に

    タイトルの通りなんですが、テストIDとパスワードでログインしたら真っ白な画面になってしまいました。 その他の.phpになっているファイルも真っ白になってしまい、困っています。 以前、知り合いの人に作ってもらった時は正常に、ログインした後はトップページに戻り画面上にログアウトボタンと「こんにちは○○さん」と表示されていたのですが・・・・。どこかおかしいのでしょうか? わかる方お願いします。 <?php include_once "DB.php"; include_once "Auth/Auth.php"; $cookie=$_COOKIE; $from_address="info@xxx.jp"; ini_set("include_path", "/usr/share/pear" ); require_once 'DB.php';//PEAR $dsn = "mysql://xxxxxx"; $userid=NinsiyouKikou(); //--------------------------------------------- if (is_array($userid)){ $que = "SELECT * FROM $userid[kateg] WHERE ID=$userid[ID];"; $res = $conn->query( $que ); $row = $res->fetchRow(DB_FETCHMODE_ASSOC); $login_text='<a href="?action=logout">ログアウト</a>'; }else{ $login_text='<form name="form1" method="post" action="?action=login">ID<input name="username" type="text" size="12">PASS<input name="password" type="password" size="12"><input type="submit" name="Submit" value="Login"></form>'; } 長すぎるので、続きは補足で。

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

    PHPのログイン処理について教えてください。 「login_auth.phpファイル」 <?php //session開始 session_start(); session_regenerate_id(true); //エラーメッセージを格納する変数を初期化 $error_message=""; //ログインボタンが押されたかを確認 if(isset($_post["sub"])){ if($_post["auth_id"] == "auth" && $_post["auth_pass"] == "1234"){ //ログインが成功した証拠をセッションに保持する $_session["login_name"] = $_post["auth_id"]; //管理者トップへWebブラウザをリダイレクトさせる $login_url = "http://{$_server["http_host"]}/reservation/auth_top.php"; header("Location: {$login_url}"); exit; } $error_message = "IDかPASSが間違えています"; } ?> <html> <body> <?php if($error_message){ print '<font color="red">'.$error_message.'</font>'; } ?> <center> <hr size="2" color="blue" width="50%"><br><br> <font size="4"><b>管理者認証画面</b></font> <br><br><hr size="2" color="blue" width="50%"><br><br> ユーザID/パスワードを入力してください。 <form action="login_auth.php" method="post"> <table border="2"> <tr> <td bgcolor="cyan">ユーザID</td> <td><input type="text" name="auth_id" value=""></td> </tr> <tr> <td bgcolor="cyan">パスワード</td> <td><input type="password" name="auth_pass" value=""></td> </tr> </table> <input type="submit" name="sub" value="ログイン"> </form> <a href="javascript:window.close();" target=_parent>閉じる</a> </center> </body> </html> 「auth_top.phpファイル」 <?php //セッションを開始する session_start(); //ログインが成功した証拠である変数のチェックを行なう if (!isset($_SESSION["login_name"])) { //変数に値がセットされていない場合は不正な処理とみなし、ブラウザをログイン画面へリダイレクトさせます $no_login_url ="http://{$_server["http_host"]}/reservation/login_auth.php"; header("Location: {$no_login_url}"); exit; } ?> 管理者画面です。 この簡単なプログラムなんですが、IDとPASSを入力しても画面が切り替わりません。 今、そこで行き詰っています。 どなたか教えていただけないでしょうか??

    • 締切済み
    • PHP
  • セッションをログインについて

    はじめまして。 今、セッションを使ったログインのページを作っています。 流れは、 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を始めて1週間の初心者です。 現在、ホームページでログイン処理とログアウト処理をphpのセッションを使って作成しています。 今回質問させて頂くのはログアウト処理についてです。 ログアウト処理をでセッションを破棄する際に http://oshiete1.goo.ne.jp/qa3224862.html を参考にして下記の処理を行わせています。 -------------------- logout01.php -------------------- <?php session_start(); $_SESSION = array(); if(isset($_COOKIE[session_name()])){setcookie(session_name(),'',time()-4200,'/');} session_destroy(); header("location: http://~トップページのURL~/"); ?> -------------------- 確認をしたところ、ログインしたユーザの情報は削除されているようでした。 また、http://oshiete1.goo.ne.jp/qa3224862.htmlを参考に下記のようなログアウト処理も行わせてみました。 -------------------- logout02.php -------------------- <?php session_start(); unset($_SESSION['access']); header("location: http://~トップページのURL~/"); ?> -------------------- 同じく確認したところ、ログインしたユーザ情報は削除されているようでした。 -------------------- 環境 -------------------- <サーバ> 【OS】 windows XP(テスト環境)、CentOS 5.2(公開環境) 【PHP】 5.2.6 【Apache】 2.2 <クライアント> 【OS】 windows XP 【ブラウザ】 Firefox 3.0.8 IE 7 -------------------- -------------------- 質問 -------------------- (1)logout01.phpとlogout02.phpの違いは何でしょうか。 (2)「unset($_SESSION);」は使用すると「$_SESSION」が使えなくなるとのことですが、  それはphpを再インストールしない限りは使えなくなるということでしょうか。  それとも、ブラウザを再起動すれば使えるという意味でしょうか。 (3)「unset($_SESSION);」と「unset($_SESSION['access']);」では何が違うのでしょうか。 (3)セッションを使用するとサーバ側にセッションIDを保存したファイルが保存され、  クッキーがクライアント側に保存されるとのことですが、logout01.phpとlogout02.phpを  実行した場合、サーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 (4)セッションの有効期限を指定していないため、logout01.phpとlogout02.phpを実行せずに  ブラウザを終了させた時もログインしたユーザ情報は削除されているようでしたが、  この場合もサーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 初歩的な質問で申し訳御座いませんがよろしくお願いします。

    • ベストアンサー
    • PHP
  • ログイン管理について

    こんばんは。  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
  • ログインしたら他からログインできないようにしたい

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

    • ベストアンサー
    • PHP
  • 会員サイト内グループページのログイン中会員一覧表示について

    現在、会員制グループサイトを構築中です。 【サイト構成】 ●TOPページより新規会員登録 ●TOPページで個人ログイン→個人専用ページへ ●個人専用ページで新規グループ登録 ●個人専用ページでグループログイン→グループページへ ●グループページでグループログアウト→個人ページへ ●グループページOR個人ページで個人ログアウト→TOPページへ *****************************質問内容****************************** TOPページから個人ログイン後グループログインする際に、現在グループ ページに現在何人ログインしているかの情報を表示させたいのですが、上 手くいきません。何か良い方法はありませんか? ******************************************************************* 【表示例】 現在、○○(グループ名)には5人入っています! 【構築環境・言語】 ●Apache、MySQL、PHP、HTML、JavaScript 【現在の仕様】 ・テーブル ●会員用テーブル(個人ID、パスワード、個人情報・・・) ●グループ用テーブル(グループID、グループパスワード、グループ情報) ●メンバーテーブル(グループID、個人ID、Flag(0:In 1:Out))  *グループIDと個人IDが複合キー 【グループ仕様】 ●グループは複数作成、複数所属できる ●グループページにはログインした1つのグループのみの情報を保持 ●複数のグループページに入ることはできない 【プログラム】 ●グループログインした際に、メンバーテーブルの該当行のFlagを0にする ●グループページでグループログアウトOR個人ログアウト(ボタン)した際に、メンバーテーブルの該当行Flagを1にする ●ページ共通変数・・・$_SESSION['kojinId'] ●グループ共通変数・・・$_SESSION['groupId'] ●グループログイン・ログアウトの度に$_SESSION['groupId']を更新 ●個人ページにログイン後、自分が所属しているグループのメンバーテーブルを参照し、Flagが0の行をカウントする ・問題点 ●グループログインしている際に、ログアウト処理を行わないままブラウザを閉じると、メンバーテーブルのFlagが1に更新されない ●ブラウザを閉じたことがわかれば、自動ログアウトさせてDBを更新できるが、閉じたかどうかの情報を知ることができない 簡単な説明でわかりづらいかもしれませんが、ご回答を宜しくお願いします。  

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

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

専門家に質問してみよう