スレッド表示 | フラット表示〕 全トピック 923 件中 253 番目 次≫ ≪前

正しく条件分岐されない?

created: 2006-04-26 13:34 | modified: 2006-04-28 00:14 | reply: 6

[3048] 正しく条件分岐されない?

user: DR | created: 2006-04-26 13:34
現在以下のようなコードでセッション処理を行っているのですが、
正しく条件分岐がされないという現象が起こっており、
なにがなにやらわかりません。

<?php
// セッション開始
session_start();

// セッションのチェック
$session_status = session_check();

// ログアウトモードの場合
if($session_status[0] && $mode == "logout") {
logout();
$session_status[0] = false;
$session_status[1] = "正常にログアウト処理が完了しました。\n";
}
// ログインモードの場合
elseif(!$session_status[0] && $mode == "login") {
if($_POST['password'] == PASSWORD) {
// ログイン成功
$_SESSION['ip_address'] = $_SERVER['REMOTE_ADDR'];
header("Location: $_SERVER[SCRIPT_NAME]?mode=page");
exit();
}
// ログイン失敗
else $session_status[1] = "ログインに失敗しました。<br>パスワードをもう一度ご確認下さい。\n";
}

if($session_status[0]) {
?ログイン後の処理?
}
else {
?ログイン失敗時の処理?
}

// サブルーチン

function session_check() {
if(!$_SESSION['ip_address']) {
// セッション変数にIPアドレスが存在しない
logout(); // ■問題の箇所
return array(false,"不正なアクセスです。<br>正しくログインをしてください。\n");
}
elseif($_SESSION['ip_address'] != $_SERVER['REMOTE_ADDR']) {
// セッション変数のIPと現在のIPが違う
logout(); // ■問題の箇所
return array(false,"ユーザー認証に失敗しました。<br>申し訳ありませんが、再度ログインしてください。\n");
}
else return array(true,"");
}

function logout() {
$_SESSION = array();
if(isset($_COOKIE[session_name()])) setcookie(session_name(),'',time()-42000,'/');
session_destroy();
}

上記のコードで■問題の箇所と記してある行です。
セッションを開始後に呼んでいるセッションチェックの関数内で、
指定したセッション変数が存在しない場合にログアウト処理をかけているんですが、
この場合、セッション変数が正しく格納されている場合にもログアウト処理が入ってしまい、
ログインができなくなってしまっています。

上記の■問題の箇所となっている行をコメントアウトすると、
正しくログイン処理が動くのですが、上記コードでは何か問題があるのでしょうか?

宜しくお願い致します。
reply: 3049 返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 923 件中 253 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑