2010-09-17 2 views
12

Je me sens comme je l'ai fait une tonne de fois, mais je ne peux pas pour la vie de moi comprendre ce qui ne va pas.ASP.NET - Response.Redirect pas de remplissage Url Referrer

Default.aspx:

protected void Page_Load(object sender, EventArgs e) 
{ 
    var r1 = Request.UrlReferrer; // null 
    var r2 = Request.ServerVariables["HTTP_REFERRER"]; // null 
} 

SingleSignOn.aspx:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Redirect("/"); 
} 

Si je tape "/SingleSignOn.aspx" dans l'URL, il redirige vers Default.aspx, mais le référent est nul.

Que manque-t-il ici?

Que im essayant de faire (ce qui est un exemple simplifié), est sur une page, je vais avoir un peu de JavaScript pour effectuer les opérations suivantes:

window.location.replace('~/SingleSignOn.aspx'); 

Ce qui, vous l'aurez deviné, signe l'utilisateur, et redirige vers la page d'accueil.

Mais j'ai besoin de construire la logique dans ce JavaScript pour ne pas rediriger vers la page SingleSignOn.aspx si nous venons juste de là.

Le référent est-il uniquement rempli par des clics réels de l'utilisateur de lien?

Comment puis-je faire cela? Je ne veux pas utiliser QueryString car je ne veux pas le voir dans l'URL.

La seule autre option que je peux penser est Session.

Aidez-nous s'il vous plaît. = (

+0

Curieux de savoir pourquoi vous redirigez java-script Le scénario que vous décrivez, je l'aurais vérifié côté serveur (probablement sur OnInit de la page de base) si l'utilisateur est authentifié ou non. page qui le fait. – VinayC

+0

@VinayC - c'est compliqué.Fondamentalement, je travaille sur une application Facebook Connect - après le chargement de la page, javascript me permet de savoir que je suis en mesure de les signer, d'où je redirige. Je ne sais pas si je peux les signer jusqu'à ce que les API côté client soient exécutées. – RPM1984

+0

Eh bien, vous pouvez ajouter votre propre cookie lorsque l'utilisateur est authentifié, puis à partir de javacript, vous pouvez voir si le cookie existe ou non pour décider de rediriger ou non. Si vous ne souhaitez pas utiliser de cookie, alors vos pages (ce qui devrait être fait dans la page de base) doivent définir une variable JS si l'utilisateur est authentifié. La différence entre les cookies est que le cookie ne doit être défini qu'une seule fois (dans SingleSignOn.aspx) alors que la variable js doit être définie dans chaque page (la logique doit donc être placée dans une page de base commune). – VinayC

Répondre

9

Alors, je l'ai fait un peu Google'ing pour trouver ma réponse

Non merci à Stack Overflow -. Plaisantez =)

Ainsi, le Référent URL est peuplé que par un client réel -clic (balise d'ancrage, bouton).

Pas lorsque vous le mettez manuellement dans l'URL (ce que fait mon JavaScript).

La solution que je suis obligé de faire est de créer un cookie sur la page SingleSignOn.aspx, et lire ce cookie à partir du JavaScript avant de rediriger à nouveau.

Juste ce dont j'ai besoin, plus de cookies. = (

A moins que quelqu'un ici a une meilleure idée, c'est ce malade va avec

+1

Merci beaucoup, j'avais besoin d'une solution très similaire parce que je modifiais un magicien Hodgepodge où vous pourriez sauter des étapes parce qu'ils ne vérifiaient pas le référent. J'ai essayé le 'UrlReferrer' aussi et cela a fonctionné dans le développement et échoué quand déployé à IIS. Une solution de cookie était parfaite! –

0

juste une intuition, mais essayez d'utiliser une URL absolue à la place/y compris même le http:.. // partie

Cela dit, vous ne devriez pas compter sur UrlReferrer car il peut être retiré du côté client (par addins, pas sûr si même par des configs de navigateur)

+0

Oui, j'ai essayé, voir ma réponse ci-dessus - seul un clic client (bouton, ancre) provoquera le remplissage de l'en-tête http du référent. – RPM1984

+0

@ RPM1984 k, mais Redirect ("/") n'est pas exactement ce que j'ai mentionné, ce serait comme Redirect ("http://myserver.com/"). – eglasius

+0

Oui - essayé cela, également essayé dans un tout nouveau projet web (donc pas d'autres facteurs - c'est-à-dire que la réécriture d'URL serait gênant). Ne pas aller. Quoi qu'il en soit la solution cookie fonctionne, et le fait que je doive "vérifier" la page précédente du côté client, rend facile le fait qu'il s'agisse d'un cookie. Merci pour votre aide. – RPM1984

Questions connexes