2017-10-10 51 views
0

初学者在这里想知道我做错了什么。进入profile.php并重定向到login.php,然后登录后,用户总是被重定向到BASE URL。我希望用户被重定向到profile.php。PHP登录后重定向到BASE URL而不是前一页

profile.php

if (!isset($_SESSION['id'])) { 
    $_SESSION['redirect'] = $_SERVER['REQUEST_URI']; 
    $url = BASE_URL . 'login.php'; 
    ob_end_clean(); 
    header("Location: $url"); 
    exit(); 

} else { 
    echo 'Logged in' 
} 

的login.php

$q = "SELECT * FROM users WHERE (username='$username' AND password=SHA1('$password'))"; 
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br>MySQL Error: " . mysqli_error($dbc)); 

if (@mysqli_num_rows($r) == 1) { 
    $_SESSION = mysqli_fetch_array ($r, MYSQLI_ASSOC); 
    mysqli_free_result($r); 
    mysqli_close($dbc); 

    $url = BASE_URL . $_SESSION['redirect']; 
    ob_end_clean(); 
    header("Location: $url"); 
    exit(); 
} else { 
    echo 'Message'; 
} 

使用$ _ GET变量,但出现同样的问题也试过。非常困惑什么是错的。

+0

您的'$ url'(用于'header()')被设置为'BASE_URL。 $ _SESSION [ '重定向']'。如果你试图将它们重定向到'profile.php',它不应该被设置为'profile.php'吗? –

+0

@Obsidian年龄我希望登录表单可以用于多页重定向,而不仅仅是profile.php页面。因此,如果我有另一个页面需要登录,它将重定向到所述页面,而不是profile.php – Qwerty

+1

如果[Little Bobby](http://bobby-tables.com/)的密码是'pwn')) OR 1 = 1; - '在这种情况下[你的脚本存在SQL注入攻击的风险](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)。了解[MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)[准备](http://en.wikipedia.org/wiki/Prepared_statement)声明。即使[转义字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! –

回答

0
$_SESSION = mysqli_fetch_array ($r, MYSQLI_ASSOC); 

正在销毁以前存储的会话变量。