Demande.UrlReferrer null?
Dans un aspx C#.NET page (je suis en cours d'exécution cadre de la v3.5), j'ai besoin de savoir provenance de l'utilisateur, car ils ne peuvent pas afficher les pages sans se connecter. Si j'ai la page A
(la page que l'utilisateur veut voir) rediriger vers la page B
(la page de connexion), à la Demande.UrlReferrer objet est null.
De fond: Si un utilisateur n'est pas connecté, j'ai rediriger vers la page de Connexion (B
dans ce scénario). Après la connexion, je voudrais revenir à la page qu'ils demandent de l'avant, ils ont été forcés à se connecter.
Mise à JOUR:
Une belle solution rapide semble être:
//if user not logged in
Response.Redirect("..MyLoginPage.aspx?returnUrl=" + Request.ServerVariables["SCRIPT_NAME"]);
Ensuite, il suffit de regarder une chaîne de Requête sur la page de login qui vous a forcé à mettre à l'utilisateur où ils étaient une fois la connexion réussie.
OriginalL'auteur Mario | 2008-09-29
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez la norme de fournisseur d'appartenances, et donné l'Autorisation pour le répertoire/page, le code définit automatiquement un paramètre de requête de ReturnUrl et rediriger après une connexion réussie.
Si vous ne souhaitez pas utiliser le fournisseur d'appartenances modèle, je suggère de faire manuellement le paramètre de chaîne de requête chose. HTTP référents ne sont pas très fiables.
OriginalL'auteur Jon Adams
UrlReferrer est basée sur la HTTP_REFERER en-tête d'un navigateur devrait envoyer. Mais, comme avec toutes les choses laissées en place pour le client, c'est variable.
Je sais que certains "sécurité" suites (comme Norton Internet Security) bande d'en-tête, dans la croyance qu'il facilite le suivi du comportement de l'utilisateur. Aussi, je suis sûr qu'il ya quelques extensions Firefox pour faire la même chose.
Ligne de fond est que vous ne devriez pas faire confiance. Ajoutez simplement l'url à la chaîne et de les rediriger en fonction de ça.
Mise à JOUR: Comme mentionné dans les commentaires, c'est probablement une bonne idée de limiter la redirection à partir de l'OBTENIR paramètre ne fonctionne que pour un domaine de moins en moins de liens relatifs, de refuser répertoire de modèles (../), etc. Donc, toujours à la vérification générale de la redirection; si vous suivez la norme "de ne pas utiliser toute entrée fourni par l'utilisateur à l'aveugle" de la règle, vous devriez être en sécurité.
Certainement une préoccupation légitime, mais cela peut être facilement traitée par le refus de returnUrl valeurs avec des domaines.
UrlHelper.IsLocalUrl est utilisé par défaut dans les modèles MVC afin de se prémunir contre cette ouverture de redirection. Cela a été ajouté quelque temps après MVC2, je crois. FWIW - à l'aide de UrlReferrer a la même question, parce qu'il est aussi client fourni.
OriginalL'auteur Mark Brackett
Le problème pourrait être lié à la façon dont vous rediriger l'utilisateur vers une autre page. De toute façon, le referer url n'en est rien, vous devriez le prendre comme règle absolue - un client peut simuler facilement.
OriginalL'auteur hangy
Ce que vous cherchez est mieux de le faire avec une variable de chaîne de requête (par exemple, returnURL ou originURL). Le référent est le mieux utilisé pour l'exploration de données des opérations, car il est très peu fiable.
De voir la façon dont ASP.Net ne redirection avec des connexions pour un exemple.
OriginalL'auteur Orion Adrian