2014-02-07 110 views
0

我正在尝试使用header("location")的公式。PHP数据会话重定向破坏

除了一件事情它工作得很好。当即时通讯尝试设置持有该消息的会话它设置会话,但当我试图写出来,问题开始..

它像他走进去,如果然后删除cookie,跳出当且改掉再次那里..

这里是我的代码:

if (isset($_SESSION['sess_error'])) { 
    echo '<div class="alert alert-danger">'; 
    foreach ($_SESSION['sess_error'] as $val) { 
     echo $val.'<br>'; 
    } 
    unset($_SESSION['sess_error']); 
} 

if (empty($_POST['username'])) { $error[] = 'Du måste fylla i ett användarnamn...'; }  
if (empty($_POST['password'])) { $error[] = 'Du måste fylla i ett lösenord...'; } 
elseif ($sql->num_rows == 0) { $error[] = 'Något fel uppstog, du kunde inte bli inloggad...'; } 
if (count($error) > 0) { 
    $_SESSION['sess_error'] = $error; 
} 

任何人有任何想法,为什么发生这种情况,我可以做些什么来阻止它呢?

整个脚本:

<?php 
SESSION_START(); 
    if (isset($_POST['login'])) { 
      $error = null; 
      $username = $_POST['username']; 
      $password = $_POST['password']; 
      $sql = $mysqli->query("SELECT * FROM users WHERE username='".$username."' AND password='".$password."' LIMIT 1"); 
      if (empty($_POST['username'])) { $error[] = 'Du måste fylla i ett användarnamn...'; } 
      if (empty($_POST['password'])) { $error[] = 'Du måste fylla i ett lösenord...'; } 
      elseif ($sql->num_rows == 0) { $error[] = 'Något fel uppstog, du kunde inte bli inloggad...'; } 
       if (count($error) > 0) { 
        $_SESSION['sess_error'] = $error; 
       } 
       else { 
        while ($r = $sql->fetch_array()) { 
         $_SESSION['sess_username'] = $r['username']; 
         $_SESSION['sess_userID'] = $r['userID']; 
         $_SESSION['sess_admin'] = $r['admin']; 
         $_SESSION['sess_logg'] = 1; 
        } 
       } 
       header("Location: ./"); 
      } 
?> 
+0

你什么时候使用重定向?请添加重定向部分 –

+0

我认为您在重定向之前显示错误。当页面重定向时,会话将被取消设置,并且消息不会显示在重定向页面中 – shanavascet

+0

您是否在构建表单验证?如果是这样,请保持在同一页面上并将这些错误添加到表单域。 – Ruben

回答

0

我解决了整个问题,我不得不添加一个退出;在标题(“”)之后;它工作得很好!

-1

有可能是要设置窗体的错误页面上的缺失start_session(),重定向后。

文件: “login.php中”:

<?php 
    session_start(); 
    var_dump($_SESSION); 

    if(isset($_SESSION['session_logg']) && $_SESSION['session_logg'] === '1') { 
     echo 'Logged in :' . $_SESSION['session_username']; 
    } elseif (isset($_SESSION['sess_error'])) { 
     var_dump($_SESSION['sess_error']); 
     echo '<div class="alert alert-danger">'; 
     foreach ($_SESSION['sess_error'] as $val) { 
      echo $val.'<br>'; 
     } 
     echo '</div>'; 

     unset($_SESSION['sess_error']); 
    } 

    if (isset($_POST['login'])) { 
       $error = array(); 
       $username = isset($_POST['username']) ? $_POST['username'] : false; 
       $password = isset($_POST['password']) ? $_POST['password'] : false; 

       // no username or password given 
       if ($username === false or $password === false) 
       { 
        $_SESSION['sess_error'][] = 'Login Error.'; 
        header("Location: login.php"); 
        exit(); 
       } 

       // username, pw given, lets ask db for that guy 
       $sql = $mysqli->query("SELECT * FROM users WHERE username='".$username."' AND password='".$password."' LIMIT 1"); 

       // user not found in db, goodbye 
       if ($sql->num_rows == 0) { 
        $_SESSION['sess_error'][] = 'Något fel uppstog, du kunde inte bli inloggad...';  
        header("Location: login.php"); 
        exit(); 
       } 

       // user found 
       else { 
        $r = $sql->fetch_array()) { 
        $_SESSION['sess_username'] = $r['username']; 
        $_SESSION['sess_userID'] = $r['userID']; 
        $_SESSION['sess_admin'] = $r['admin']; 
        $_SESSION['sess_logg'] = 1; 
        header("Location: index.php"); 
        exit();        
       }      

    } 
    ?> 

侧面说明:没有相关型号您的问题:永远不会显示在登录正确的错误。 说:“登录失败”,而不是“用户名xy”未找到。

+0

它是session_start() –

+0

session_start位于页面的顶部。我应该也可以发布吗? – Tommy

+0

是的!这是你问题的关键部分。 –