1

私はPHPの初心者で、MAC OSを使用しています。最近、Web サイトをセットアップし、localhost でテストしました。ある日、ホームフォルダーの名前を変更しようとするまでは問題なく動作し、ルートから名前を変更したフォルダーに戻すときに途中で終了しました。次に、root ユーザーからログアウトし、名前を変更したユーザーにログインしました。その後、すべてをリセットする必要があることがわかりました。アプリケーション フォルダーは、ユーザーのホーム ディレクトリの外にあり、ユーザー フォルダーと同じレベルに移動されました。

ここに問題があります(上記のアクションが原因かどうかはわかりません。)ユーザーにユーザー名とパスワードでログインさせ、セッション変数を使用してユーザー名を保存します。私はチェックします:

echo $_SESSION['name'];    

echo session_status();   

最初のものは私が入力したユーザー名を示し、2番目のものは2を出力するので、ユーザー名はそのセッション変数に保存されたと思います。ただし、ユーザーが別のページに入るたびに、セッション変数は破棄されます。

何が問題ですか?

これは、ページヘッダーとしてすべてのページに記述するコードです。ログインボックスが含まれています。以前は問題なく動作していました。

    <?php
    echo '<div id="pageheader">
            <div class="wrap">
                <div class="logo">
                    <a href="index.php"><img src="pics/1.gif" height="45px"></a>
                 </div>
                  <ul id="nav">
                    <li><a href="">New Arrival&nbsp&nbsp&nbsp/</a></li>
                    <li><a href="">Hot&nbsp&nbsp&nbsp/</a></li>
                    <li><a href="#">By School&nbsp&nbsp&nbsp/</a>
                        <ul >
                            <li><a href="">ADM</a></li>
                            <li><a href="">CEE</a></li>
                            <li><a href="">EEE</a></li>
                            <li><a href="">HSS</a></li>
                            <li><a href="">MAE</a></li>
                            <li><a href="">MSE</a></li>
                            <li><a href="">NBS</a></li>
                            <li><a href="">SBS</a></li>
                            <li><a href="">SCBE</a></li>
                            <li><a href="">SCI</a></li>
                            <li><a href="">SPMS</a></li>
                            <li><a href="">SCE</a></li>
                        </ul>           
                    </li>
                    <li><a href="#">By Course&nbsp&nbsp&nbsp/</a>
                        <ul>
                            <li><a href="book.php?q=Mathematics">Mathematics</a></li>
                            <li><a href="book.php?q=Computer">Computing</a></li>
                            <li><a href="book.php?q=Accounting">Accounting</a></li>
                            <li><a href="book.php?q=Business">Business Law</a></li>
                            <li><a href="book.php?q=Physics">Physics</a></li>
                            <li><a href="book.php?q=Chemistry">Chemistry</a></li>
                            <li><a href="book.php?q=Biology">Biology</a></li>
                        </ul>
                    </li>
                    <li><a href="#">By Kind&nbsp&nbsp&nbsp/</a></li>
                  </ul>
                <ul id="log">';

    function generateLogin(){
        echo '      <li id="login">
                        <a id="login-trigger" href="#">login&nbsp<span>&#x25BC</span></a>
                            <div id="login-content">
                                <form action="'.$_SERVER['PHP_SELF'].'" method="post" enctype="multipart/form-data">
                                    <fieldset class="inputs">
                                        <input name="user" type="text" placeholder="Username" class="reqd" />
                                        <input name="loginpw" type="password" placeholder="Password" class="reqd" />
                                    </fieldset>
                                    <fieldset class="actions">
                                        <input type="submit" class="button1" value="Log in" />
                                        <label><input name="keep" type="checkbox" value="yes" />Keep me signed in</label>
                                    </fieldset>
                                </form>
                            </div>
                    </li>
                    <li id="signup">
                        <a id="signup-trigger" href="#">signup&nbsp<span>&#x25BC</span></a>
                            <div id="signup-content">
                                <form action="signup.php" method="post" enctype="multipart/form-data">
                                    <fieldset class="inputs">
                                        <input name="username" id="username" type="text"  placeholder="Username (at least 6 characters)" class="reqd user" />
                                        <input name="email" id="email" type="email"  placeholder="john@example.com" class="reqd email" />
                                        <input id="passwd1" type="password" placeholder="Password (at least 6 characters)" class="reqd pd" />
                                        <input name="pswd" id="passwd2" type="password"  placeholder="Confirm your password" class="reqd passwd1" />
                                    </fieldset>
                                    <fieldset class="actions">
                                        <input type="submit" class="button1" value="Sign up" />&nbsp;&nbsp;&nbsp;<input type="reset" class="button1" />
                                    </fieldset>
                                </form>
                            </div>
                    </li>
    ';
    }

    session_start();

    if(!isset($_SESSION['name']) or $_GET['logout'] == 1){
        if($_GET['logout'] == 1){unset($_SESSION['name']);}
        if(isset($_POST['user'])){
            $link = mysqli_connect('localhost','root','root','bookstore'); 
            if (!$link){
              die('Could not connect: ' . mysqli_error());
            }
            try {
                $sql = "SELECT username FROM user
                    WHERE username='$_POST[user]' AND
                    pswd=MD5('$_POST[loginpw]')";

                $sqlUser = "SELECT username FROM user
                WHERE username='$_POST[user]'";

                $result1 = mysqli_query($link, $sql);
                $result2 = mysqli_query($link, $sqlUser);
                if (!mysqli_fetch_row($result1)){
                    if(!mysqli_fetch_row($result2)){
                        throw new Exception("User ".$_POST['user']." does not exist!");
                    }
                    else{
                        throw new Exception("Incorrect password!");
                    }
                }
                else{
                    $_SESSION['name'] = $_POST['user'];
                    echo '
                        <ul id="log">
                            <li><a href="index.php?logout=1">Logout</a></li>
                            <li><a href="cart.php">Hi, '.$_POST['user'].'</a></li>
                        </ul>';
                }
            }catch(Exception $e){
                echo "<script type='text/javascript'>alert('".$e->getMessage()."');</script>";
                generateLogin();
            }       
            mysqli_close($link);
        }
        else{
            generateLogin();
        }
    }
    else{
        $name = $_SESSION['name'];
        echo '
            <ul id="log">
                <li><a href="index.php?logout=1">Logout</a></li>
                <li><a href="cart.php">Hi, '.$_SESSION['name'].'</a></li>
            </ul>';
    }
    echo '          </ul>
                <div id="search">
                  <form action="book.php" name="search" method="get" enctype="multipart/form-data">
                      <input name="q" id="q" autocomplete="off" onkeyup="showHint(this.value)" type="text" size="100" placeholder="Search..." />
                      <input type="submit" class="button1" value="Search" />
                  </form>
                </div>
                <div id="suggestBox">
                  <ul>
                    <div id="txtHint">
                    </div>
                  </ul>
                </div>
            </div>
        </div>';
    ?>
4

2 に答える 2

5

セッションを使用するすべてのページでセッションを開始する必要があります

<?php
    session_start();

    // now I can use my sessions in this page and 
    // I should start the session on each page I use them
?>

session_start()HTML出力の前に使用する必要があるため、この場合session_start()は最初のエコーの前に移動してください!

<?php
    // move session_start here

    session_start();

    echo '<div id="pageheader">
              <div class="wrap">';
?>
于 2012-10-30T16:21:03.677 に答える
1

$_SESSION データを使用する予定のすべてのページで session_start() を実行する必要があります...このページの上部に session_start を追加する必要があるようです。何かが出力される前に含める必要があります。

于 2012-10-30T16:20:57.377 に答える