0

サイトの管理ページを作成中ですが、問題が見つかりました。私のコードは Wamp で完全に動作しました (Chrome では引き続き動作しますが、他の人や他のブラウザーでは動作しません)。したがって、問題は、私のサイトがヘッダーのリダイレクト後にセッション変数を保存しないことです。(私が理解できないもう1つのことは、ヘッダーの後にサイコロを置いたり終了したりすると、ページが空白になり、手動で更新する必要があるということです。それでも、それはWebサーバー上だけです。)

<?php
session_start();
$log = $_GET['logout'];
$error = false;
//logout
if($log==true){
    unset($_SESSION['user']);
    header('Location: '.$_SERVER['PHP_SELF']);
    //die;
}
//login
if (isset($_POST['submit']) && !isset($_SESSION['user']) ){
    $file="login.xml";
    $xml=simplexml_load_file($file) or die ("Unable to load XMl file!");
    $nope=true;
    $givenuser = $_POST['username'];
    $givenpass = md5($_POST['password']);
    foreach($xml->user as $user){
        $username = $user->username;
        $password = $user->password;
        if ($givenuser == $username && $givenpass == $password){
            $_SESSION['user'] = $givenuser;
            $nope =false;
            header('Location: '. $_SERVER['PHP_SELF']);
            //die();
        }
    }
    if($nope) $error = true;
}
//succesful login
if (isset($_SESSION['user'])){
    ?>
    <html>
    <header><link rel="stylesheet" href="style.css" type="text/css" /></header>
    <body>
    <h1>
    <?php echo "Welcome ".$_SESSION['user']; ?>
    </h1>
    <div> 
        <a href="?">New page</a> 
        <a href="?logout=true">Logout</a>
    </div>
    <div id="menus">
        Pages:</br>
        <?php
            $file="../pages.xml";
            $xml=simplexml_load_file($file) or die ("Unable to load XMl file!");
            $index = 0;
            foreach($xml->xpath('//oldalneve') as $pagename){
                echo '<a href="?id='.$index.'">'.$pagename.'</a></br>';
                $index=$index+1;
            }
        ?>
    </div>
    <?php
        if(!is_numeric($_GET['id'])){
            $id=-1;
        }else{
            $id=(int)$_GET['id'];
        }
        if($id!=-1){
            $id=(int)$_GET['id'];
            if(isset($_POST['name']) && isset($_POST['body'])){
                if($_REQUEST['name'] !="" && $_REQUEST['body']!=""){
                    $file="../pages.xml";
                    $xml= simplexml_load_file($file) or die ("Unable to load XML file!");
                    $name = $_POST['name'];
                    $body = $_POST['body'];
                    $xml->page[$id]->oldalneve = $name;
                    $xml->page[$id]->body = $body;
                    $xml->asXML('../pages.xml');
                    header('Location: '.$_SERVER['PHP_SELF'].'?id='.$id);
                    //die;
                    }
            }
            $file="../pages.xml";
            $xml= simplexml_load_file($file);
            $nam=$xml->page[$id]->oldalneve;
            $val=$xml->page[$id]->body;
            ?>
            <div style="float:left;">
                <form name="input" method="post" action="" >
                    <label>Name</label></br>
                    <input type="text" name="name" style="width:250px" value="<?php echo $nam;?>"></br>
                    <label>Body</label></br>
                    <textarea cols="28" rows="10" name="body"><?php echo $val;?></textarea></br>
                    <input type="submit" name="submit" value="Küldés">
                </form>
            </div>
            </body>
            </html>
            <?php
        }else{ 
    ?>
            <div style="float:left;">
                <form name="input" method="post" action="" >
                    <fieldset><legend>Add page</legend>
                        <label>Name</label></br>
                        <input type="text" name="name" style="width:250px"></br>
                        <label>Body</label></br>
                        <textarea cols="28" rows="10"v name="body"></textarea></br>
                        <input type="submit" name="submit" value="Küldés">
                    </fieldset> 
                </form>
            </div>
            </body>
            </html>
            <?php
            if(isset($_POST['submit'])){
                if($_REQUEST['name'] !="" && $_REQUEST['body']!=""){
                    $file="../pages.xml";
                    $xml= simplexml_load_file($file) or die ("Unable to load XML file!");
                    $page=$xml->addChild('page');
                    $name = $_POST['name'];
                    $body = $_POST['body'];
                    $page->addChild('oldalneve', $name);
                    $page->addChild('body', $body);

                    $xml->asXML('../pages.xml');
                    header('Location: '.$_SERVER['PHP_SELF']);
                    //die;
                }
            }
        }
}else
{
    showLogin($error);
}
function showLogin($error){?>

    <form action="" method='post'>
        <label for="username">username</label>
        <input type="text" name="username" id="username"></br>
        <label for="password">password</label>
        <input type="password" name="password" id="password"></br>
        <?php
            if($error){
            echo "Invalid username or password".'</br>';
            }
        ?>
        <input type="submit" name="submit" value="submit">
    </form> 

<?php }

?>

ユーザーはログインしてインターフェイスを表示できますが、リンクの 1 つを使用するとログイン画面にリダイレクトされます (セッション ユーザーは保存されません)。

phpinfo() は次のとおりです。

session.auto_start  Off Off
session.bug_compat_42   On  On
session.bug_compat_warn On  On
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly Off Off
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    no value    no value
session.entropy_length  0   0
session.gc_divisor  100 100
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 4   4
session.hash_function   0   0
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   /tmp    /tmp
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    Off Off
session.use_trans_sid   0   0
4

2 に答える 2

0

理由の1つは

  1. session_start(); を含めます。すべてのページの上部に $_SESSION['example'] を介して SESSION の変数 SET の値を取得します。そうしないと、セッション変数の値を取得できません。

    2. 別のアプローチは、session_start(); を使用することです。config.php ファイル内で、セッションが必要なすべてのページのコードの先頭にそのファイルをインクルードしないと、SESSION 変数の値を取得できません..!!

于 2013-11-28T10:45:59.030 に答える
0

Chafik は部分的に正しいと思います。

if($_GET['logout'] == true) 

これを行うには悪い方法です(多くのことがそのステートメントを真実にします)。===しかし、それで解決するという点で彼は間違っています。を設定?logout=trueしても、ブール値ではなく文字列$_GET['logout']が含まれるため、巻き上げられます(!== )。私は使うだろう true===false"true"true

if(isset($_GET['logout']))
于 2013-11-02T02:12:29.593 に答える