2012-07-09 147 views
-1

我遇到了一個問題,我在主頁上,我登錄然後我去了一個不同的頁面,我沒有看到存儲的會話了,但當我點擊登錄它說我已經登錄。但是,如果我轉到不同的目錄,如/ admin/Session數據仍然存在。任何方案?頁面間會話數據丟失

的login.php

<?php 
session_start(); 
require_once('connections/Main.php'); 

if($_SESSION['username']) { 

    echo '<div class="error_message">Attention! '.$_SESSION['username'].'. You are already logged in.</div>'; 
    echo "<br />"; 
    echo "Go <a target='top' href='index.php'>back</a> to the page you were viewing before this.</li>"; 

    exit(); 
} 

// Has an error message been passed to login.php? 
$error = $_GET['e']; 

if($error == 1) { 
    $error = '<div class="error_message">Attention! You must be logged in to view this page.</div>'; 
} 

// Only process if the login form has been submitted. 

if(isset($_POST['login'])) { 

    $username = $_POST['username']; 
    $password = $_POST['password']; 

     if (empty($username) || empty($password)) { 
     $error = '<div class="error_message">Attention! Please enter your Username and Password.</div>'; 
    } else { 

    mysql_select_db($database_Main); 
    // Add slashes to the username and md5() the password 
    $user = mysql_real_escape_string(addslashes($_POST['username'])); 
    $pass = mysql_real_escape_string(md5($_POST['password'])); 


    $sql = "SELECT * FROM users WHERE username = '$user' AND password= '$pass' OR email = '$user' AND password= '$pass' "; 

    $result = mysql_query($sql); 

    // Check that at least one row was returned 
    $rowCheck = mysql_num_rows($result); 

    if($rowCheck > 0) { 
    while($row = mysql_fetch_array($result)) { 

     // Start the session and register a variable 
     if(isset($_POST['remmemberme'])){ 
      setcookie(kitbusername, $user, time()+(3600*24*30)); 
     } 
     $_SESSION['username'] = $user; 
     //session_register('username'); 

     echo '<script>parent.changeURL("index.php"); </script>'; 

     } 

     } else { 

     // If nothing is returned by the query, unsuccessful login code goes here... 

     $error = '<div class="error_message">Attention! Incorrect username or password.</div>'; 
     } 
    } 
} 
echo $error; ?> 

每一頁

<div id="loginoutbox"> 
<?php session_start(); 
    if($_SESSION["username"]) { ?> 
<div> 
    Hello <?php echo $_SESSION['username']; ?>! | </div> 
<a id="register" href="http://www.kdogisthebest.webege.com/admin/" class="button">Dashboard</a> | 
<a id="signin" href="#fallr-confirmlike" class="button">Logout</a>  
<?php }else{ ?> 
<div style="display: inline-block; font-size: 14px; padding-left: 20px;">Hello Guest!</div> 
<a id="register" href="#fallr-register" class="button">Register</a> | 
<a id="signin" href="#fallr-signin" class="button">Login</a> 
<?php } ?> 
</div> 

演示--->http://www.kdogisthebest.webege.com/index.php

用戶名= demouser

密碼上的header.php = demouser

+0

這需要先進行基本的調試 - 請做一個'error_reporting(〜0); ini_set('display_errors',1);'在腳本的開頭。此外,您應該[啓用錯誤記錄](http://www.cyberciti.biz/tips/php-howto-turn-on-error-log-file.html)並按照錯誤日誌。 – hakre 2012-07-09 15:46:53

+0

我認爲session_start()必須在任何html代碼之前調用。 – caRameL 2012-07-09 15:47:06

+0

在HTML之前調用它沒有做任何事 – kezi 2012-07-09 15:50:14

回答

0

用var_dump轉儲$ _SESSION變量後,我看到在更改頁面後變量顯示爲NULL。我瞪着眼睛做了一些研究,我認爲最好的結論是這是一個php服務器配置,導致它以這種方式行事。

1

<?php session_start();需要之前任何輸出。把它放在頁面的頂部。

+0

那麼在這種情況下,輸出緩衝也可以解決它。 – hakre 2012-07-09 15:47:34

+0

它不會有所作爲。但仍嘗試過,並沒有奏效。 – kezi 2012-07-09 15:49:56