2017-10-10 28 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 ['redirect'] '。それらを '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)の[prepared](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); 

は、以前に保存されたセッション変数を破壊していました。

関連する問題