Хорошо, скажем, например, пользователь посещает:

mysite.com/user/profile/demo, 

И они выполняют действие, чтобы подписаться на указанного пользователя и перейти к:

mysite.com/user/follow/demo, 

И они должны быть авторизованы, поэтому он перенаправляет их в форму входа, и они пытаются войти один раз, но это не удается, а затем они успешно входят в систему в секундах, если я использую:

history.go(-1) 

Это вернется на страницу входа, потому что они однажды не смогли войти. Что можно сделать? Используя

?referrer=user/profile/demo then if that's set go back to that page?

Я открыт для идей, так что было бы здорово, если бы вы мне их поделили.

php
-1
Clitoriss Phlicoris 7 Мар 2015 в 16:21

2 ответа

Лучший ответ

В mysite.com/user/follow/demo перед перенаправлением на страницу входа вы можете сохранить текущий URL в сеансе. Затем, как только они успешно вошли в систему, вы можете проверить наличие этой переменной сеанса и перенаправить на нее.

Примере:

mysite.com/user/follow/demo

<?php
session_start();
if (not logged in) {
  $_SESSION['redirect_after_login'] = $_SERVER['REQUEST_URI'];
  header('Location: /login');
  exit;
}
...

mysite.com/login

<?php
session_start();
...
login code
...
if (user has logged in) {
  if (isset($_SESSION['redirect_after_login'])) {
    $url = $_SESSION['redirect_after_login'];
    unset($_SESSION['redirect_after_login']);
    header('Location: ' . $url);
    exit;
  }
}

Примечание: непроверенный псевдокод

2
rjdown 7 Мар 2015 в 13:31

Я бы порекомендовал вам сохранить местоположение для перенаправления, скажем, GET, поскольку использование history.go, естественно, вернется в историю, а не обновит кнопку входа в систему и т. Д.

Когда пользователь вошел в систему, установите header('Location: ' . $_GET["r"]);, чтобы перенаправить пользователя обратно.

0
miestasmia 7 Мар 2015 в 13:29