Je souhaite effectuer une redirection après l'action de connexion à l'URL précédente. S'il vous plaît dites-moi comment faire cela?Comment rediriger vers l'URL précédente après la connexion
Répondre
Stockez la page avant de vous connecter à une session, après vous être connecté, lisez l'URL de la page précédente et redirigez l'utilisation vers cette page.
Vous pouvez transmettre l'URL "return" en tant que paramètre à la page de connexion. c'est-à-dire http://yourserver.com/login/?return=http%3a%2f%2fyourserver.com%2fsomedir%2fsomething%2f
. Après une connexion réussie, vous utilisez le paramètre get pour rediriger en utilisant un simple en-tête HTTP location:http://yourserver.com/somedir/something/
.
Ceci est, par exemple, pratiqué dans différents services Google et Microsoft où il y a une seule page pour la signature de services et différents qui obligent l'utilisateur à loogged dans.
Ceci est (imho) dangereux car l'URL peut être modifiée. C'est à dire. un utilisateur obtient un lien vers une URL apparemment MS (contient www.microsoft.com), se connecte et est redirigé vers une URL malveillante qui ressemble à une page Microsoft. Rediriger au referer est presque aussi dangereux, la seule façon sûre (pour l'utilisateur) est de stocker l'URL appelé à l'origine une redirection vers elle: Tous Page: si {StoreUrl (CURRENTURL (user.IsLoggedIn!)) RedirectTo ("connexion"); } Connexion: if (LoginSuccessfull()) {RedirectTo (GetStoredUrl()); } – dbemerlin
D'accord avec cela. En fait, la page de connexion devrait valider le chemin "retour" s'il s'agit d'une origine connue. – naivists
Vous pouvez cette utilisation aide d'action, j'ai écrit il y a quelque temps. À votre santé!
class Your_Controller_Action_Helper_GoBack
extends Zend_Controller_Action_Helper_Abstract
{
/**
* @todo Check if redirecting to the same domain
* @param bool $required Throw exception?
* @param bool $validateDomain
* @param bool $allowSubdomain
* @param string $alternative URL to redirect to when validation fails and required = true
* @param string $anchorParam Request parameter name which holds anchor name (#). Redirect to page fragment is not allowed according to HTTP protocol specification, but browsers do support it
* @throws Zend_Controller_Action_Exception if no referer is specified and $required == false or $checkdomain is true and domains do not match
*/
public function direct($required = true, $anchorParam = null, $validateDomain = true, $allowSubdomain = false, $alternative = null)
{
$front = Zend_Controller_Front::getInstance();
$request = $front->getRequest();
$referer = $request->getPost('http_referer');
if (empty($referer)) {
$referer = $request->getServer('HTTP_REFERER');
if (empty($referer)) {
$referer = $request->getParam('http_referer');
}
}
if (null === $alternative) {
$alternative = $request->getPost('http_referer');
if (null === $alternative) {
$alternative = $request->getParam('http_referer');
}
}
if ($referer) {
if ($validateDomain) {
if (!$this->validateDomain($referer, $allowSubdomain)) {
$this->_exception($alternative);
}
}
if (null != $anchorParam) {
$referer .= '#' . $request->getParam($anchorParam);
}
$redirector = new Zend_Controller_Action_Helper_Redirector();
$redirector->gotoUrl($referer);
} elseif($required) {
$this->_exception($alternative);
}
}
/**
* @throws Zend_Controller_Action_Exception With specified message
* @param string $message Exception message
* @param string $alternative
*/
private function _exception($alternative = null, $message = 'HTTP_REFERER is required.')
{
if ($alternative) {
if (Zend_Uri::check($alternative)) {
$redirector = new Zend_Controller_Action_Helper_Redirector();
$redirector->gotoUrl($alternative);
}
}
throw new Zend_Controller_Action_Exception($message);
}
/**
* Check if domain from current url and domain from specified url are the same
* @param string $url Target url
* @param string $allowSubdomain false
*/
public function validateDomain($url, $allowSubdomain = false)
{
if (!Zend_Uri::check($url)) {
return false;
}
$currentUri = $this->getCurrentUri();
$uri = Zend_Uri_Http::fromString($currentUri);
$currentDomain = $uri->getHost();
$uri = Zend_Uri_Http::fromString($url);
$target = $uri->getHost();
if ($allowSubdomain) {
// Find second dot from the end
$pos = strrpos($target, '.');
if (false !== $pos) {
$pos = strrpos(substr($target, 0, $pos), '.');
if (false !== $pos) {
$target = substr($target, $pos+1);
}
}
}
if ($target === $currentDomain) {
return true;
}
return false;
}
/**
* @return string Current URL
*/
public function getCurrentUri()
{
$request = $this->getRequest();
$path = $request->getRequestUri();
$server = $request->getServer();
$host = $request->getServer('HTTP_HOST');
$protocol = $request->getServer('SERVER_PROTOCOL');
if (!empty($protocol)) {
$protocol = explode('/', $protocol);
$protocol = strtolower($protocol[0]);
}
if (empty($protocol)) {
$protocol = 'http';
}
$baseUrl = $protocol . '://' . $host . '/';
$path = trim($path, '/\\');
$url = $baseUrl . $path;
return $url;
}
/**
* Like str_replace, but only once
* @param string $search
* @param string $replace
* @param string $subject
*/
public function replaceOnce($search, $replace, $subject)
{
$firstChar = strpos($subject, $search);
if($firstChar !== false) {
$beforeStr = substr($subject, 0, $firstChar);
$afterStr = substr($subject, $firstChar + strlen($search));
return $beforeStr . $replace . $afterStr;
} else {
return $subject;
}
}
}
- 1. Django redirige vers la page précédente après connexion OAuth externe
- 2. Navigation JSF rediriger vers la page précédente
- 3. Rediriger après la connexion?
- 4. Zend Framework: Comment rediriger vers l'URL d'origine après la connexion?
- 5. Comment rediriger après la connexion en PHP
- 6. Rediriger vers une page spécifique après la connexion
- 7. Flask/Werkzeug, comment retourner la page précédente après la connexion
- 8. asp.net: rediriger vers la page après confirmation?
- 9. Silverlight rediriger vers la page de connexion
- 10. asp.net rediriger vers la page de connexion
- 11. Rediriger vers la page de connexion https
- 12. Code Igniter - comment rediriger l'utilisateur après la connexion?
- 13. Renvoyer l'utilisateur à la page précédente après la connexion
- 14. comment rediriger vers différentes pages de l'utilisateur après la connexion dans Codeigniter
- 15. Zend Auth et Rediriger un utilisateur après la connexion
- 16. ASP.NET - FormsAuthentication - impossible de rediriger après la connexion
- 17. Rediriger l'utilisateur après la première connexion dans wordpress?
- 18. Rediriger à la vue précédente, ajoutez une note javascript alerte
- 19. Après avoir lancé une exception de sécurité, rediriger vers la page de connexion
- 20. Rediriger vers une page après la publication depuis l'intérieur ajax
- 21. Comment retourner à la page précédente qui a fait l'objet d'une demande par formulaire de soumission Soumettre après la connexion?
- 22. rediriger les utilisateurs vers la page de connexion
- 23. Comment rediriger vers (ou appliquer) une connexion SSL?
- 24. Comment rediriger vers l'URI demandé après l'authentification en utilisant Zend_Auth?
- 25. Rediriger à l'action précédente après la soumission du formulaire en asp.net mvc
- 26. Rediriger vers une URL spécifique après s'être connecté
- 27. Comment rediriger default.php vers/
- 28. Publier/Rediriger/Obtenir: Rediriger vers l'itinéraire spécifique
- 29. Rediriger l'utilisateur vers Captcha après que X a échoué tentatives de connexion
- 30. Rediriger la page Connexion/Inscription de Wordpress vers une page de connexion/d'enregistrement personnalisée
Il peut être utile de tester si vous placez une condition quelque part pour empêcher votre code d'essayer de rediriger vers la page d'où vous venez. Si vous voyez une erreur de redirection dans votre navigateur, la condition peut le corriger. – berty