2012-07-09 187 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