2009-07-23 5 views
4

J'utilise actuellement Intelligencia's URL Rewriter .NET HTTPModule pour réécrire des URL. J'utilise sa fonction de transformation personnalisée, qui me permet de fournir un assemblage contenant une méthode qui effectue la transformation d'URL réelle.La réécriture d'URL dans .NET se comporte mal avec des sessions sans cookie

J'ai des sessions sans cookie activées, et ceci cause une certaine interférence avec l'URL Rewriter.

Alors, disons que le chemin sur mon serveur est la suivante:
http://www.foobar.com/actualPath/index.aspx

Mais je veux utiliser url rewriting pour faire le chemin ressembler à ceci:
http://www.foobar.com/rewrittenPath/index.aspx

J'ai fait un script pour générer ce qui suit:
- Request.Url (à partir de mon codebehind)
- Request.RawUrl (à partir de mon codebehind)
- document.location (from javascript)

je tape ce qui suit dans ma barre d'adresse:
http://www.foobar.com/rewrittenPath/index.aspx

Quand j'ai sessions cookieless désactivé, tout fonctionne comme il se doit. Mon script affiche les valeurs suivantes:
- Request.Url apparaît comme http://www.foobar.com/actualPath/index.aspx
- Request.RawUrl apparaît comme /rewrittenPath/index.aspx
- document.location apparaît comme http://www.foobar.com/rewrittenPath/index.aspx
- L'URL dans l'adresse bar reste inchangé par rapport à ce que j'ai tapé à l'origine.

Cependant, lorsque les sessions sans cookie sont activées, les choses tournent mal. Mon script affiche les valeurs suivantes:
- Request.Url apparaît comme http://www.foobar.com/actualPath/index.aspx
- Request.RawUrl apparaît comme /actualPath/index.aspx
- document.location apparaît comme http://www.foobar.com/actualPath/index.aspx
- L'URL dans l'adresse bar devient en quelque sorte modifié, il apparaît comme:
http://www.foobar.com/(S(SESSIONID))/actualPath/index.aspx

Mais ceci est la chose étrange - l'événement OnLoad pour la page incendies ne jamais qu'une seule fois. Que se passe-t-il? Est-ce que .NET effectue une redirection de page, mais le fait avant que l'événement OnLoad ait une chance de se déclencher?

Ce que je voudrais faire est de garder le chemin réécrit dans la barre d'adresse. Je voudrais que document.location renvoie le chemin rewrittenPath. Je voudrais que Request.RawUrl retourne le rewrittenPath. Est-ce possible avec des sessions sans cookie? Ou est-ce que le mécanisme de session sans cookie de .NET rend ce comportement impossible?

Nous vous remercions de votre temps et de votre aide.

Répondre

1

Les sessions sans cookie placent simplement l'ID de session dans l'URL plutôt que dans un cookie de session. Par conséquent, vos mappages d'URL pour URLRewriter.NET doivent tenir compte de ce comportement. Est-ce que tu fais ça? Si vous voulez être en mesure de courir avec ou sans cookies, je m'attendrais à ce que vous ayez des règles pour correspondre à la fois les modèles d'URL cookie et cookie.

+1

Eh bien, mon mappage d'URL est vraiment accepté et ne devrait pas affecter la réécriture d'URL. Ce qui semble se produire est que .NET ne colle pas simplement l'identifiant de session dans l'URL.Il fait aussi une sorte de redirection de page vers le chemin 'réel' (pas le chemin réécrit ou 'brut'). Cela fait apparaître le chemin 'réel' dans la barre d'adresse, et cela fait que le chemin 'réel' à l'intérieur de document.location. Je voudrais que .NET juste coincé l'ID de session dans le chemin «brut» sans rediriger du chemin «brut» au chemin «réel». Savez-vous si c'est possible? – user44701

+0

oops - J'ai dit "Eh bien, mon mappage d'URL est vraiment accepté et ne devrait pas affecter la réécriture d'URL." Ce que je voulais dire, c'est que «ma cartographie d'URL est vraiment acceptée et devrait affecter les sessions sans cookie». Par souci d'exhaustivité, voici ma carte: < "([.^\] + \ ASPX *..)" Rewrite url = à = "$ {UrlRewriter (1 $)}" /> I J'utilise également ISAPI_Rewrite (lite) de Helicon pour rediriger les URLs sans extension, et mes directives de réécriture sont donc: RewriteRule^([^ \.] + [^ /]) $ $ 1/index.aspx [NC, L] RewriteRule^([^ \.] + /) $ $ 1/index.aspx [NC, L] – user44701

Questions connexes