0

私は今、頭を壁にぶつけています。私はこれを何時間もいじっていますが、理解できないようです。

あるページから別のページに移動すると、セッション データが保存されません。私はこれを WAMP で設定しました。

Cookie は保存されており、セッション データは、EVERY スクリプトの開始時にリセットした場合にのみ機能します。ここで何をすべきかよくわかりません。それはおそらくばかげたばかげたことですが、どんな意見でも大歓迎です。

私のログインスクリプト:

<?php 


include('../partials/_header.php');
include('includes/connectvars.php');


if(!isset($_SESSION['id'])) { //logged in?

if(isset($_POST['submit'])) {       // form submitted?

if(!empty($_POST['email']) && !empty($_POST['password'])) { /* Check to make sure post isn't empty in case of JS override/disable */

        $email = mysqli_real_escape_string($dbc, trim($_POST['email']));
        $password = sha1(mysqli_real_escape_string($dbc, trim($_POST['password'])));
        /* query DB */
        $query = "SELECT * FROM users WHERE email = '$email' AND password = '$password'";
        $result = mysqli_query($dbc, $query) or die ("There was an error with your mySQL query:" . mysqli_error($dbc));

        if(mysqli_num_rows($result)==1) { /* Check that matching row exists in users for login */

                $row = mysqli_fetch_array($result);
                $_SESSION['id'] = $row['id']; // set the session info
                $_SESSION['type'] = $row['type'];
                $_SESSION['name'] = $row['f_name'];

                setcookie('id', $row['id'], time()+ (60*60*24*30));
                setcookie('type', $row['type'], time()+ (60*60*24*30));
                setcookie('name', $row['f_name'], time()+ (60*60*24*30));
                $home_url = '/'; //redirect not working with $_SERVER variable in WAMP. keep an eye for the future
                header('Location: '.$home_url);
                mysqli_close($dbc);

        } else { /* if no match in database ask to resubmit login info or register */?> 
                <script type="text/javascript" src="../js/jquery.validate.js"></script>
                        <script>
                            $(document).ready(function(){
                                  $("#login_form").validate();
                                 });
                        </script>
                        <div class="span-24 colborder">
                            <form id="login_form" action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
                                <label class="error">Your email and/or password are incorrect. </label><br />
                                <label class="error">If you haven't already signed up, feel free to <a href="user_registration.php" > register</a> </label><br /> 
                                <input type="text" name="email" id="email" value="" class="email required" placeholder="example@example.com"/> <br />
                                <input type="password" name="password" id="password" class="required" value="" /> <br />
                                <input type="submit" name="submit" value="Login" /> 
                            </form>
                        </div>

    <?php


        }/* end conditional to check $rows array for username pw match */
    } /* end conditional to check that form isn't blank */ 
    else { /* If form is blank ask to resubmit or register */?> 
                        <script type="text/javascript" src="../js/jquery.validate.js"></script>
                        <script>
                            $(document).ready(function(){
                                  $("#login_form").validate();
                                 });
                        </script>
        <div class="span-24 colborder">
            <form id="login_form" action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
                <label class="error">You must enter your email and password if you wish to continue.</label><br />
                <input type="text" name="email" id="email" value="" class="email required" placeholder="example@example.com"/> <br />
                <input type="password" name="password" id="password" class="required" value="" /> <br />
                <input type="submit" name="submit" value="Login" /> 
            </form>
        </div>

    <?php

    } // end else to resubmit in case of blank form
    } /* end check if form has been submitted */ else{ /* prompt for login if page visited but login form not submitted */ ?>
        <script type="text/javascript" src="../js/jquery.validate.js"></script>
                        <script>
                            $(document).ready(function(){
                                  $("#login_form").validate();
                                 });
                        </script>
        <div class="span-24 colborder">
            <form id="login_form" action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
                <label class="error">You must be logged in to do that!.</label><br />
                <input type="text" name="email" id="email" value="" class="email required" placeholder="example@example.com"/> <br />
                <input type="password" name="password" id="password" class="required" value="" /> <br />
                <input type="submit" name="submit" value="Login" /> 
            </form>
        </div>  

                                                                    <?php

                                                                    }

    } /* end check if cookie isset */ else { //redirect if cookies & session is already set
                                                    $home_url = '/'; 
                                                    header('Location: '.$home_url);
                                                        }


?>


<?php include('partials/_footer.php'); ?>

これは私のヘッダーです(Cookieが設定されている場合、設定されたセッション変数が含まれます)

<?php //set session if isset cookie but not session
                session_start();
if(!isset($_SESSION['id'])) {

        if(isset($_COOKIE['id']) && isset($_COOKIE['name']) && isset($_COOKIE['type'])) {
                $_SESSION['id'] = $_COOKIE['id'];
                $_SESSION['name'] = $_COOKIE['name'];
                $_SESSION['type'] = $_COOKIE['type'];
            }       
    }   //end if !isset session verify


?>

セッション ID に応じたメニュー出力の例:

            <?php 
        if(isset($_SESSION['type']) && $_SESSION['type'] == "rnr") { //start special runner menu options
    ?> 
            <ul class="main_menu">
            <li id="how_it_works" class="main_menu"><a class="main_menu" href="/user/bid_task.php">Bid on a task</a></li>
            <li id="our_runners" class="main_menu"><a class="main_menu" href="/our_runners.php">Our Runners</a></li>
            <li id="login" class="main_menu"><a class="main_menu" href="/user/my_account.php">My account</a></li>
            <li id="register" class="main_menu"><a class="main_menu" href="/user/logout.php">Logout</a></li>
        </ul>       


    <?php } /* end runner menu */ ?>

前もって感謝します。

4

1 に答える 1

0

ヘッダー ファイルは、setcookie 関数がログイン スクリプトで呼び出される前にインクルードされます。私が見たところによると、この条件チェックを行った時点では Cookie は設定されていません。

if(isset($_COOKIE['id']) && isset($_COOKIE['name']) && isset($_COOKIE['type']))

そのため、条件ステートメント内に入ることがなく、ヘッダー ファイルで次の行が実行されません。

$_SESSION['id'] = $_COOKIE['id'];
$_SESSION['name'] = $_COOKIE['name'];
$_SESSION['type'] = $_COOKIE['type'];
于 2012-08-10T03:56:08.003 に答える