Essentiellement, je veux être capable d'attraper quand un utilisateur laisse leur session expirer, puis clique sur quelque chose qui finit par provoquer une publication asynchrone. Je me suis dit que si je mets ce code dans mon Session_Start (en Global.asax) alors je peux attraper un postback qui a eu lieu pendant un délai d'attente de session:Gérer le délai d'attente de session dans asp.net en utilisant Javascript
With HttpContext.Current
If TypeOf .Handler Is Page Then
Dim page As Page = CType(.Handler, Page)
If page IsNot Nothing AndAlso page.IsPostBack Then
'Session timeout
End If
End If
End With
Cela fonctionne très bien. Ma question est, je voudrais être capable d'injecter du javascript dans la réponse, puis appeler Response.End() pour que le reste de l'application ne finisse pas l'exécution. Le problème est que lorsque j'essaye Response.Write("<script ... ")
suivi de Response.End()
alors javascript n'est pas écrit dans le flux de réponse. Je suis sûr qu'il y a d'autres endroits dans l'application où je peux écrire du Javascript en toute sécurité dans la réponse mais je ne peux pas laisser le reste de l'application s'exécuter car il va erreur quand il essayera d'accéder aux objets de session.
Pour résumer: je dois injecter javascript dans la réponse en cas Session_Start dans Global.asax
Note: Vous demandez peut-être pourquoi je ne fais pas ça dans Session_End ... nous ne sommes pas utilisez les sessions InProc et donc Session_End n'est pas appelé ... mais c'est à côté du point ... je voulais juste expliquer pourquoi je le fais dans Session_Start.
Merci pour le conseil. Connaissez-vous un moyen de rediriger en toute sécurité sans utiliser Response.Redirect()? La raison pour laquelle je pose la question est parce que nous rencontrons des erreurs chaque fois que nous essayons d'effectuer un Response.Redirect pendant un rappel AJAX (par exemple si Page.IsCallBack est vrai) et dans cette section du code, nous ne devons généralement prendre en charge que le timeout quand c'est un rappel. – Adam
Une approche est la réécriture d'URL, qui est effectuée en appelant context.RewritePath (newPath). Un autre est Server.Transfer (newPath). RewritePath() est le meilleur avant d'arriver à la page, Server.Transfer() est meilleur après cela. – RickNZ
Parfait merci! – Adam