2013-06-23 5 views
2

Я пытаюсь найти способ перенаправить пользователя на выбранную страницу, если они были вынуждены снова войти в систему после таймаута сеанса.Перенаправление PHP на выбранную страницу После входа в систему

Прямо сейчас, после входа пользователя в систему, они перенаправляются на index.php. Но если пользователь получил ссылку в электронном письме на другой раздел моего сайта, и они не вошли в систему весь день, их, очевидно, просят войти в систему, но в конечном итоге на index.php вместо страницы, для которой была ссылка. ,

Вот отрывок из моего кода на странице входа в систему:

if (mysql_num_rows($result_set) == 1) { 
      // username/password authenticated 
      // and only 1 match 
      $found_user = mysql_fetch_array($result_set); 
      $_SESSION['user_id'] = $found_user['id']; 
      $_SESSION['username'] = $found_user['username']; 
      $_SESSION['last_activity'] = time(); 
      $_SESSION['time_out'] = 7200; // 2 hours 
      redirect_to("index.php"); 

Любые идеи, было бы полезно.

Я хочу поблагодарить всех, кто ответил на мой вопрос. Решение было комбинацией нескольких предложений, которые я получил здесь. Я хотел бы поделиться с вами тем, как я решил это:

Часть причины, по которой у меня возникли проблемы с сохранением URL-адреса, к которому пользователь попытался перейти, прежде чем принудительно войти в систему, было то, что мои сеансы обрабатываются внешний php-файл, который заботится о подтверждении входа и истечении текущего сеанса. Этот файл требуется для всех страниц моего сайта. HTTP_REFERER не будет работать, потому что он всегда будет установлен на login.php. Вот что я сделал на моем session.php файле:

session_start(); 

$protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') 
      === FALSE ? 'http' : 'https'; 
$host = $_SERVER['HTTP_HOST']; 
$script = $_SERVER['SCRIPT_NAME']; 
$params = $_SERVER['QUERY_STRING']; 
$currentUrl = $protocol . '://' . $host . $script . '?' . $params; 

if ($currentUrl != "http://domain.com/login.php?") { 
    $expiryTime = time()+(60*5); // 5 mins 
    setcookie('referer',$currentUrl,$expiryTime,'/'); 
} 

По существу, я сохранил ссылающаяся URL в куки, что истекает через 5 минут, давая достаточно времени пользователя для входа в систему. Затем, на login.php, я сделал это:

if(isset($_COOKIE['referer'])) { 
       redirect_to($_COOKIE['referer']); 
      } else { 
       redirect_to('index.php'); 
      } 

И, БИНГО! Работает каждый раз.

+4

Просто сохраните страницу, с которой они первоначально пытались перейти, и перенаправляя ее. – Brad

+0

Предложение Брэда - стандартная практика. –

+1

Добавьте скрытый ввод в форму входа со значением $ _SERVER ['HTTP_REFERER'], добавьте параметр GET в URL-адрес входа с URL-адресом страницы, из которого они пришли, добавьте URL-адрес переменной $ _SESSION ... Затем перенаправляйтесь на этот URL-адрес. .. Некоторые идеи ... – kgarrigan

ответ

1

Попытка сохранить URL в сессии, когда пользователь ударил любой URL, как http://www.abc.com/profile.php как только пользователь успешно вошел в перенаправлять пользователя к сохраненному URL (which is in session)

+0

Это похоже на то, что предложил Брэд. Помогает прояснить этот процесс. Спасибо, Мид! – Mike

2

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

$actual_link = "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; 
    if($actual_link == 'the email link'){ 
     header('Location: '. $actual_link); 
    }else{ 
     header('Location: index.php'); 
    } 
+0

Голосов: 0. Где-то должен быть тролль. – user2067005

+0

Почему был голосующий голос? Люди должны объяснять. Ваше предложение выглядит логичным. – Mike

0

это предыдущая страница находится в том же каталоге, а затем вы можете попробовать header('Location : .'), или если вам нужно переадресовать где-то в другом месте. Сохраните путь до этой ситуации и в $ url, затем uc переадресация с использованием header('Location: $url') или заголовка ('Местоположение $ url? values')