• ベストアンサー
  • すぐに回答を!

会員ページ SESSIONについて

  • 質問No.6990304
  • 閲覧数294
  • ありがとう数0
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 24% (37/149)

レンタルサーバはさくらインターネット、プランはプレミアムです。
PHPは5.2.171、MySQLは5.1です。

login.phpから各メンバーのIDとPWを入力してデータベース内ののデータと一致したら、main.phpにLocationでとぶようにしています。

2日前ほどからログインができなくなり、大変困っています。(それまでは問題なくログインができた。)
原因はわからないのですが、色々検証したところ、
login.phpでログインしたときにmain.phpでIDが取得できていないということがわかりました。

コードは下記のようになります。
login.php
if ($uid != "" || $upass != "") {
$link = mysql_connect($DB_HOST,$DB_USER,$DB_PASS);
mysql_select_db($DB_NAME,$link);
$uid = mysql_real_escape_string($uid, $link);
$upass = mysql_real_escape_string($upass, $link);

$userQuery = sprintf("SELECT count(*) as `cnt` FROM `member` WHERE `id`='%s' AND `password`='%s'",$uid,$upass);
$userResult = mysql_query($userQuery, $link) or die(mysql_error());
if ($row = mysql_fetch_assoc($userResult)) {
$count = $row['cnt'];
if ($count == 1) {
session_start();

$_SESSION['ok_flg'] = 1;
$_SESSION['uid'] = $_REQUEST['id'];

header("Location: main.php");
exit;
} else {
$msg = '<p class="error">ユーザーIDまたはパスワードが違います。</p>'."\n";
}
} else {
$msg = '<p class="error">ユーザーIDまたはパスワードが違います。</p>'."\n";
}
}
省略部分が少しありますが、特に問題ないと思います。

main.php
session_start();
if ($_SESSION['ok_flg'] != 1) {
header("Location: /");
exit;
}
if (!isset($_SESSION['uid'])) {
header("Location: /");
exit;
}
$uid = mysql_real_escape_string($_SESSION['uid'], $link);
$userQuery = sprintf("SELECT * FROM `member` WHERE id='%s' ",$uid);
$userResult = mysql_query($userQuery, $link) or die(mysql_error());

if ($row = mysql_fetch_assoc($userResult)) {
$user_name = $row['user_name'];
}

echo $user_name;
としています。

ここからが問題なのですが、
1.ログインするとSESSIONファイルが2つ発行されてしまう。
 1つ目は空のファイル。2つ目がIDなどが記載されているファイル。
main.phpのsession_start()を取ると1つのみの発行。(IDなどが記載されている方。)
2.main.phpに切り替わったときに$_SESSION['ok_flg']と$_SESSION['uid']の値が取得できないためlogin.phpに戻される。
3.main.phpのsession_start()を取ればページは表示されるが、session_id()も$_SESSION['ok_flg']と$_SESSION['uid']の2つも取得できない。
3.main.phpでsession_start()を取れば他のページはsession_idは取得できるが$_SESSION['ok_flg']と$_SESSION['uid']が取得できない。
4.session_start()と併用で$_GETも使用しているページがあるが$_GETを使用しているページも2と同じ現象になる。

以上ですが、お分かりになる方がいらっしゃいましたら、教えていただけないでしょうか。
宜しくお願い致します。

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

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

ベストアンサー率 66% (6/9)

細かい所は面倒臭いんで見てませんが;
おおざっぱには大きな問題はなさそうです。

なんとなくですが、IDが被っているデータがあるんじゃないでしょうか。

DBはどんな構造になっており、
IDはどんなカンジのIDで…
そもそも登録周りがどうなっているのか、
この辺ワカラナイとなんとも言えませんが、
このテの問題は、往々にして入ってるデータまたはその呼び出し方に問題があります。

一度、いれた値が正しく出力できているのか?
その判定(マッチングというか?)は、ただしく行われているのか?

if ($row = mysql_fetch_assoc($userResult)) {
$count = $row['cnt'];
if ($count == 1) {

この辺…をチェックしてみてください。


余談ですが、
$userQuery = sprintf("SELECT count(*) as `cnt` FROM `member` WHERE `id`='%s' AND `password`='%s'",$uid,$upass);
余分な`が多すぎるような。

$userQuery = sprintf("SELECT count(*) as cnt FROM member WHERE id='%s' AND password='%s'",$uid,$upass);

コレでいけんじゃね?
とか

ここでcount(*) as cnt
としている意味がよくワカラナイ。

$userQuery = sprintf("SELECT id,user_name FROM member WHERE id='%s' AND password='%s'",$uid,$upass);

とかでも良いんじゃね?そうすれば、後でもう一回DBにアクセスする必要もなくなりますが。。。

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 74% (170/228)

session_id が渡ってないようだし、
ブラウザのcookieがオフになってるだけじゃないの?
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ