2016-04-29 4 views
0

У меня есть следующий код PHP:Ссылаясь URL редирект после авторизации

<?php 

// let's add a ref url feature for quick guidance. 

$ref = $_SERVER['HTTP_REFERER']; 

$actual_link = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?ref=$ref"; 

header("Location: $actual_link"); 

if (empty($ref)) { 
    # do nothing... 
} else { 
    $redirect_to_ref = header("Location: $ref"); 
    header("Location: test.php"); 
} 

} 

?> 
<?php 

function checkRef() { 
    if (isset($redirect_to_ref)) { 
     $redirect_to_ref; 
    } else { 
     header("Location: index.php"); 
    } 
} 

$error = false; 
if(isset($_POST['login'])){ 
    $username = htmlspecialchars($_POST['username']); 
    $password = md5($_POST['password']); 
    if(file_exists('users/' . $username . '.xml')){ 
     $xml = new SimpleXMLElement('users/' . $username . '.xml', 0, true); 
     if($password == $xml->password){ 
      session_start(); 
      $_SESSION['username'] = $username; 
      checkRef(); 
      die; 
     } 
    } 
    $error = true; 
} 
?> 

Этот код предназначен для простого XML-сценария входа. Это будет просто зарегистрировать человека, и если человек пришел со страницы, для которой требуется войти в систему, но этого не было, я бы хотел, чтобы он добавлял реферер в строку url и после успешного входа в систему перенаправлял пользователя к указанному URL-адресу. Однако теперь это дает мне ошибку 500. Пожалуйста, помогите ...

+1

Использовать 'header (" Местоположение: $ ref ");'? Вы проверяете, успешно ли вход в систему? –

+0

Переадресованы ли они где-нибудь в настоящее время? –

+0

В настоящее время они будут перенаправлены после успешного входа в систему по адресу url – anonymous

ответ

1

Попробуйте это:

<?php 
//GLOBAL FUNCTION TO GET THE CURRENT URL: 
function curPageURL() { 
    $pageURL = 'http'; 
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} 
    $pageURL .= "://"; 
    if ($_SERVER["SERVER_PORT"] != "80") { 
     $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
    } else { 
     $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 
    } 
    return $pageURL; 
} 

// USE SESSION TO SET A VARIABLE FOR THE REF. URL: 
if (session_status() == PHP_SESSION_NONE || session_id() == '') { 
    session_start(); 
} 
if(isset($_SESSION['ref_url'])){ 
    header("Location: " . $_SESSION['ref_url']); 
    unset($_SESSION['ref_url']); 
} 



//IN ALL OTHER PAGES; SET THE URL OF THE CURRENT PAGE TO THE $_SESSION['ref_url'] VARIABLE LIKE SO 
if (session_status() == PHP_SESSION_NONE || session_id() == '') { 
    session_start(); 
} 
$_SESSION['ref_url'] = curPageURL(); 

Надеюсь, что это поможет ...

0

Я хочу, чтобы перенаправить пользователей на ссылающейся URL после входа в систему успешно

Предполагая, что пользователь уже вошел в систему успешно, вы можете проверить, если $_SERVER['HTTP_REFERER'] установлен и перенаправлять соответственно, то есть:

$ref = $_SERVER['HTTP_REFERER']; 
$actual_link = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?ref=$ref"; 

if(isset($ref)){ 
    header("Location: $ref"); 
}else{ 
    //this doesn't make sense since the redirection will be made to the same page and $ref is empty. 
    //Think about something else when HTTP_REFERER isn't set. 
    //header("Location: $actual_link"); 
} 
+0

Как бы проверить, выходит ли переменная или нет? if ... else ... elseif ... statements – anonymous

+0

код уже проверяет 'isset ($ ref)' –

Смежные вопросы