[ASP] Redirection coté serveur.

Redirection coté serveur. [ASP] - ASP - Programmation

Marsh Posté le 11-12-2002 à 14:45:28    

Salut,  
Je cherche à faire une redirection coté serveur en ASP.
 
C'est à dire que dans la page1.asp je fais un test, qui s'il est positif continue l'éxécution de la page1.asp, sinon, file directement vers la page2.asp
 
J'ai bien un truc en JS qui me fait ça :

Code :
  1. <%
  2. if (test = 1) then
  3. %>
  4. <script language="javascript">
  5. window.navigate("page2.asp" );
  6. </script>
  7. <%
  8. end if
  9. %>


 
Mais évidemment ça n'agit que coté client, donc envoi de la page, execution du JS sur le poste client, puis redirection.
 
Cela pose des pbs en termes de flux réseau qu'il faut minimiser et aussi parce que le début la page1.asp a le temps d'apparaitre juste avant le redirect, c'est un peu crade. :/
 
Merci de votre aide :hello:


Message édité par Leg9 le 11-12-2002 à 14:48:45

---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 11-12-2002 à 14:45:28   

Reply

Marsh Posté le 11-12-2002 à 15:26:08    

<%response.buffer = TRUE
URL="page2.asp"
response.redirect URL%>


Message édité par snake-bis le 11-12-2002 à 15:27:23
Reply

Marsh Posté le 11-12-2002 à 15:51:00    

snake-bis a écrit :

<%response.buffer = TRUE
URL="page2.asp"
response.redirect URL%>


Ok je teste merci :hello:
 
Le Response.Redirect("page2.asp" ) seul ne marchait pas, quelle est l'action du Response.Buffer=TRUE stp? :)


---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 11-12-2002 à 15:53:22    

Marche pas. :/


---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 11-12-2002 à 15:53:57    

Leg9 a écrit :


Ok je teste merci :hello:
 
Le Response.Redirect("page2.asp" ) seul ne marchait pas, quelle est l'action du Response.Buffer=TRUE stp? :)


c'est pour dire au seveur d'executer la commande tout de suite

Reply

Marsh Posté le 11-12-2002 à 15:54:31    

Leg9 a écrit :

Marche pas. :/


ah...ben sur mon serveur ca fonctionne...je vais kan même regarder...deux secondes

Reply

Marsh Posté le 11-12-2002 à 15:55:41    

et comme ça :
<%response.buffer=true
URL="page2.asp"
Response.Redirect URL%>
 
c'est exactement ce que j'ai et je viens de tester, ca marche

Reply

Marsh Posté le 11-12-2002 à 16:15:30    

Rhaaaa.... marche pas. :(

Code :
  1. <%
  2. if (nboccurs = 1) then
  3. response.buffer=true
  4. URL="../test/essai.asp"
  5. Response.Redirect URL
  6. end if
  7. %>


 
A savoir (aurais je oublié de le signaler?:whistle: )les pages Asp origine et destination (1 et 2 quoi) sont dans une frame...


Message édité par Leg9 le 11-12-2002 à 16:15:54

---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 11-12-2002 à 16:58:37    

moi ca reste dans le frame.
Sinon, le response.buffer, tu le mets au tout debut du code de ta page, la première ligne.
T'as koi comme OS ?

Reply

Marsh Posté le 11-12-2002 à 17:04:21    

snake-bis a écrit :

moi ca reste dans le frame.
Sinon, le response.buffer, tu le mets au tout debut du code de ta page, la première ligne.
T'as koi comme OS ?


Ok j'essaie.
 
Win2k.


---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 11-12-2002 à 17:04:21   

Reply

Marsh Posté le 11-12-2002 à 17:05:35    

Rien à faire... ça veut pas. [:w3c compliant]


---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 11-12-2002 à 17:23:16    

Leg9 a écrit :

Rien à faire... ça veut pas. [:w3c compliant]


putain, chelou, j'ai IIS sur XP Pro, et ca marche.
il t'affiche une erreur, il fait quelque chose ? ou il attends betement ?
tapes ça
<%  
response.buffer=true  
if (nboccurs = 1) then  
reponse.write "ok<br>"
URL="../test/essai.asp"  
response.write "URL"
Response.Redirect URL  
end if  
%>  
 
 
et dis moi s'il affiche bien sur ta page :
 
Ok
../test/essai.asp

Reply

Marsh Posté le 11-12-2002 à 17:28:59    

Il affiche la page1.asp, pas de redirect en fait, pas d'erreur non plus...
 
Mon test fonctionne à priori puisqu'en mettant du JS au millieu de l'ASP, ça redirigeait... :/
 
Je teste ta version, je reviens.


---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 11-12-2002 à 17:31:23    

Arff... alors, response.write "URL" ca affiche... URL! :D
 
Normal. ;)
 
Donc il passe bien dans le test. MAIS... il n'affiche pas "ok".. [:w3c compliant]


---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 11-12-2002 à 17:32:10    

Après correction, il m'affiche bien ../test/essai.asp, mais toujours pas de "ok"...
 
edit : reSponse.write "Ok</br>", corrigé, ça marche...
Mais ça ne redirige toujours pas...
 
edit2 : *TILT!*
Ton serveur est ta machine? Celle sur laquelle tu effectues le test?


Message édité par Leg9 le 11-12-2002 à 17:40:39

---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 11-12-2002 à 17:48:25    

Leg9 a écrit :

Après correction, il m'affiche bien ../test/essai.asp, mais toujours pas de "ok"...
 
edit : reSponse.write "Ok</br>", corrigé, ça marche...
Mais ça ne redirige toujours pas...
 
edit2 : *TILT!*
Ton serveur est ta machine? Celle sur laquelle tu effectues le test?


bon, on resume (excuse pour les erreurs de syntaxe ;) ) :
la page source, celle ou il y a le redirect = test.asp
la page destination (dans le cas ou elle est dans le sous repertoire /test) = essai.asp
 
je viens de créer le même truc que toi et ça marche chez moi.
voila ce que j'ai :
repertoire de base : fichier test.asp
repertoire /test : fichier essai.asp
 
contenu de test.asp :
<%  
response.buffer=true  
nboccurs = 1
if (nboccurs = 1) then  
response.write "ok<br>"  
URL="../test/essai.asp"  
response.write URL
Response.Redirect URL  
end if  
%>  
 
contenu de essai.asp :
<%response.write "ok ca marche"%>
 
 
resultat, il affiche "ok ca marche"

Reply

Marsh Posté le 11-12-2002 à 17:49:51    

pour le tilt, oui, mais je peux faire le test sur une autre mais je suis sur à 100% que ca marchera...je fais le test

Reply

Marsh Posté le 11-12-2002 à 17:58:05    

Je confirme, ca marche sur un autre poste

Reply

Marsh Posté le 11-12-2002 à 18:00:52    

Je confirme... je viens de trouver une autre page de mon appli, juste dans un autre rep, ou le Response.Redirect marche!!! [:w3c compliant]
 
Là, impossible...
 
Hum... peut être l'utilisation de fonctions extérieures qui interfèrent...


---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 11-12-2002 à 18:02:08    

Leg9 a écrit :

Je confirme... je viens de trouver une autre page de mon appli, juste dans un autre rep, ou le Response.Redirect marche!!! [:w3c compliant]
 
Là, impossible...
 
Hum... peut être l'utilisation de fonctions extérieures qui interfèrent...


je pense plutôt a des droits. Va voir du coté des droits d'executions des pages dans le service web.
Fo que je te laisse. @ demain  :hello:

Reply

Marsh Posté le 11-12-2002 à 18:05:07    

snake-bis a écrit :


je pense plutôt a des droits. Va voir du coté des droits d'executions des pages dans le service web.
Fo que je te laisse. @ demain  :hello:  


Merci pour tout, je continue de chercher ;)


---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 11-12-2002 à 18:09:26    

Ok... pb cerné...
 
Il faut effectivemmnt faire le redirect dans le premier <% ... %>. :jap:
 
Là pb... le nb d'occurences que je récupère, il me faut saucissoner le code avnt. Bon, pb cerné, c'est déjà ça, merci. :hello:


---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 11-12-2002 à 19:27:20    

je comprends pas trop ce que tu me dis là  :sweat:  
je vois pas pk ca marche pas
t'as du nouveau ?


Message édité par snake-bis le 12-12-2002 à 11:24:43
Reply

Marsh Posté le 07-01-2003 à 11:17:49    

il ne faut pas éviter de faire le response.redirect dans le body de la page html?
il me semble qu'on devait le faire dans le head ou meme avant, mais c'est à confirmer

Reply

Marsh Posté le 07-01-2003 à 14:26:06    

Urd-sama a écrit :

il ne faut pas éviter de faire le response.redirect dans le body de la page html?
il me semble qu'on devait le faire dans le head ou meme avant, mais c'est à confirmer


ben en tout cas ca marche un peu partout. Par contre il faut bien s'assuré qu'il n'y a pas de recordset d'ouvert....

Reply

Marsh Posté le 07-01-2003 à 15:59:39    

Si je ne m'abuse, on peut faire des response.redirect n'importe où si serveur en W2K.
 
Par contre, sur NT, faut jouer du Buffer si on est pas dans l'en-tête.
 
C'est d'une clarté, je suis fier de moi :sweat:

Reply

Marsh Posté le 07-01-2003 à 16:09:30    

DeliriumTremens a écrit :

Si je ne m'abuse, on peut faire des response.redirect n'importe où si serveur en W2K.
 
Par contre, sur NT, faut jouer du Buffer si on est pas dans l'en-tête.
 
C'est d'une clarté, je suis fier de moi :sweat:  


non non, C très clair  :sol: . Par contre même sous Win2k c'est fortement conseillé de mettre un "response.buffer = true"

Reply

Marsh Posté le 08-01-2003 à 08:24:44    

pour moi aussi  :jap:  
faites comme si je n'avais rien dit alors

Reply

Marsh Posté le 03-06-2003 à 20:08:43    

snake-bis a écrit :

je comprends pas trop ce que tu me dis là  :sweat:  
je vois pas pk ca marche pas
t'as du nouveau ?


Remontée d'outre tombe. :D
 
Oui je m'explique : mon code asp est saucissoné en plusieurs blocs <% ...du code asp ... %> [...du html...] <% ...encore du code asp... %> etc...
 
Si le response.redirect est fait ailleurs que dans le premier <%...%> ça ne fonctionne pas. :)


Message édité par Leg9 le 03-06-2003 à 20:08:58

---------------
If I could start again, a million miles away, I would keep myself, I would find a way... "Loreleï's dead ; Heaven is about to fuzz."
Reply

Marsh Posté le 03-06-2003 à 20:53:12    

Juste comme ça.
Le "response.buffer = true" ne veut pas du tout dire qu'il faut éxécuter le code tout de suite.
 
Ca sert uniquement à mettre en buffer la page, et l'envoyer d'un coup une fois compilée, au lieu de l'envoyer au fur et à mesure.
 
Avantages :
-> La page se charge d'un coup côté client
-> Ca économise la BP sur le serveur
 
Désavantages :
-> Si la page est longue à se compiler (grosse boucle avec beaucoup de traîtements par exemple), l'abscence de résultat côté client risque de provoquer une 404, ou simplement faire partir d'utilisateur.
-> Si les pages sont très volumineuses, tu bouffes de la RAM inutilement sur le serveur.
 
Le Response.Buffer = true est nécessaire dans le cadre d'un redirect, car sans lui, IIS commence à envoyer la page dès le départ, y compris les headers. Hors le redirect est un header, donc ça plantera si IIS a déjà envoyé les headers.
 
C'est aussi obligatoire si tu veux paramètrer manuellement les headers de la page, pour la même raison.
 
Dans le cadre d'une page volumineuse, tu peux faire régulièrement des Response.Flush dans le code, ce qui va forcer le buffer à être envoyé au client, évitant ainsi un timeout.


Message édité par MagicBuzz le 03-06-2003 à 20:53:24
Reply

Marsh Posté le 03-06-2003 à 20:54:29    

leg9 a écrit :


Remontée d'outre tombe. :D
 
Oui je m'explique : mon code asp est saucissoné en plusieurs blocs <% ...du code asp ... %> [...du html...] <% ...encore du code asp... %> etc...
 
Si le response.redirect est fait ailleurs que dans le premier <%...%> ça ne fonctionne pas. :)


 
Donc, après ce que je viens d'écrire : Response.Buffer = true DES LA PREMIERE LIGNE de ton script :)

Reply

Marsh Posté le 03-06-2003 à 20:57:42    

PS : ceci n'a rien à voir avec le ASP Cache et le IIS cache, qui servent, pour le premier, à conserver la version compilée de la page en mémoire afin d'avoir une compilation plus rapide (IIS 5 et plus) et le second à conserver une copie en mémoire des pages déjà éxécutées (le HTML généré) afin de ne pas ré-éxécuter les pages lorsque leur contenu ne change pas d'une fois sur l'autre.
 
Le second peut-être embêtant si une page est différente d'une fois sur l'autre alors que ses paramètres en entrée restent les mêmes (variables en request.form, request.querystring, request.cookie) et que le script n'a pas changé car dans certains cas, il ne détectera pas que d'une fois sur l'autre le contenu doit changer. Ceci s'applique deplus non seulement aux pages ASP, mais aussi aux fichiers HTML et les images.
 
ASP cache :
 
http://www.manga-torii.com/files/iis_asp_cache.png
 
IIS Cache :
 
http://www.manga-torii.com/files/iis_cache.png
 
Pour le second, certes, c'est un header, donc c'est normalement le proxy/firewall qui conserve une copie cachée, mais en plus, pour les navigateurs ne supportant pas le cache, ou sur lesquels c'est désactivé, une copie est conservée en mémoire sur le serveur.
C'est TRES risque de l'activer, et encore plus de mettre "expire immediately", car TOUT, y compris les images sera recherché depuis le disque à chaque accès (y compris si une image est présente deux fois de suite dans la même page !!!), le proxy et le firewall ayant pour instruction de ne pas conserver de copie en local. Ca va donc bouffer toute la BP en un rien de temps


Message édité par MagicBuzz le 03-06-2003 à 21:07:22
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed