1

良い一日、

管理コントロール パネルの PHP ページでコード エラーに直面しています。

job_title= admin でない限り、他のユーザーがこのページにアクセスできないようにしたい。

それは機能しますが、管理者のhisslefでさえログインページに再びリダイレクトされます!!

ここにコードがあります

<?php
include('db.php');
?>
<?php
// Inialize session
@session_start();
ob_start();
// Check, if username session is NOT set then this page will jump to login page
if (!isset($_SESSION['name']) || ($_SESSION['job_title'] != "admin")) {
header('Location: index.php');
}
ob_flush();
?>
>?

<!-- STARTING HTML FORMAT !-->


?>

助けはありますか?

4

2 に答える 2

0

あなたの問題はfubar改行だと思います:)ログインページの参照を追加しました。これは、ログインが失敗した場合にチェックするセッション変数の設定を解除しています。

タグを配置する場所には十分注意してください。また<?php ?>、db.php インクルードなどの .inc ファイルでは、?>最終行の終了タグを省略して、誤って ENTER を押してから CTRL + S を押して、不要な改行文字が入り込むのを防ぐことができます。出力バッファ (ob) に。ob_start がアクティブ化されている場合、選択またはスクリプトの終了前にサーバーから何も書き込まれません。そうでない場合は ELSE です。デフォルトでは、\n ごとに出力がフラッシュされ、ペイロードのコンテンツ部分が開始されます。

login.php:

<?php
session_start(); // put this on top-most line in your script
$ok = check($_POST['user'], $_POST['pass']);
if($ok) {
 $user = db_get_user_creds($_POST['user']);
 $_SESSION['name'] = $user['name'];
 $_SESSION['job_title'] = $user['job_title'];
} else {
 // session_unset();
 unset($_SESSION['name']);
 unset($_SESSION['job_title']);
}
?>

admin.php

<?php
session_start(); // put this on top-most line in your script
// or, use ob_start at the very first line
// (with no widespace what so ever written out before it)

include('db.php');
?> I am writing out a newline here, session / header section is going to become unstable
<?php
// Inialize session
// @session_start(); moved up top
ob_start();
// Check, if username session is NOT set then this page will jump to login page
if (!isset($_SESSION['name']) || ($_SESSION['job_title'] != "admin")) {
header('Location: index.php');
}
ob_flush();
?>

「ここに改行を書き込んでいます」ビットを参照してください

うさぎの穴はもう少し深くなります。通信の流れは次のようになります。

1) HEADERS such as
Connection: keep-alive\r\n
Content-Type: text/html\r\n    (etc)
2) DOUBLE NEWLINE (one newline with no previous chars on that line)
\r\n
3) CONTENTS
Body
Of Page
于 2012-05-02T22:16:00.297 に答える
0

これを試してみてください。それでも問題が解決しない場合はお知らせください。

$_SESSION['name'] = 'dennis';
$_SESSION['job_title'] = 'admin';
if (!isset($_SESSION['name']) || (!isset($_SESSION['job_title']) ? false: ($_SESSION['job_title'] !== 'admin'))) {
    echo 'Redirecting';
} else {
    echo 'You\'re good! Not redirecting!';
}

これは、関数に入れるだけで理解するのが簡単な方法かもしれません。

$_SESSION['name'] = 'dennis';
$_SESSION['job_title'] = 'admin';

if (!isset($_SESSION['name']) || !isBoss()) {
    echo 'Redirecting';
} else {
    echo 'You\'re good! Not redirecting!';
}

function isBoss() {
    if (isset($_SESSION['job_title']))
        if ($_SESSION['job_title'] === 'admin')
            return true;
    return false;
}
于 2012-05-02T17:39:04.330 に答える