Perte de session après suppression de répertoire

Perte de session après suppression de répertoire - C#/.NET managed - Programmation

Marsh Posté le 23-10-2006 à 16:49:28    

Bonjour,
 
J'ai depuis quelques temps un problème de perte des informations de session avec un site en asp.net.
 
C'est un site de gestion de fichiers, donc ajout, suppression de repertoires, upload de fichiers, etc, etc...
 
J'ai donc la page principale, ou les fichiers et dossiers sont affichés. Un lien "supprimer un répertoire" avec une listbox de choix du répertoire qui redirige vers une page de confirmation (je voulais faire un confirm() javascript sur l'asp.net, mais j'ai pas réussi, trop le bordel).
 
Cette page de confirmation, deux boutons, Oui et Non. Non fait une redirection (les variables de session sont conservées sans souci), et le bouton Oui fait la suppression du répertoire demandé, et perd, à la suite de cette action, toutes les variables de session.
 
Le Code de la suppression du répertoire :

Code :
  1. Sub Ok_Click(obj As Object, e As EventArgs)
  2. Dim MainDir As DirectoryInfo = New DirectoryInfo(Chemin)
  3. MainDir.Delete(True)
  4. Response.Redirect(Back)
  5. End Sub


 
Si on met en commentaires la lige MainDir.Delete(True), alors les variables de session ne sont pas perdues.
C'est donc cette action qui modifie la session, et je ne vois pas pourquoi.
 
Il y a quatre modes de session en asp.net
 
Par défaut, c'est le mode InProc. J'ai voulu passer au mode ServerState, mais j'obtiens l'erreur suivante :  
 
Unable to make the session state request to the session state server. Please ensure that the ASP.NET State service is started and that the client and server ports are the same.  If the server is on a remote machine, please ensure that it accepts remote requests by checking the value of HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection.  If the server is on the local machine, and if the before mentioned registry value does not exist or is set to 0, then the state server connection string must use either 'localhost' or '127.0.0.1' as the server name.  
 
J'ai essayé plein de trucs dans la base de registre et dans le web.config, mais rien ne marche.
 
Au passage, je n'utilise pas visual studio, je fais avec un éditeur de texte.
 
Voilà, il faut que je trouve rapidement une solution pour ce problème, puisque je dois bientôt livrer le site aux clients (ce site doit remplacer le FTP chez nous...)
 
Merci d'avance pour votre aide.

Reply

Marsh Posté le 23-10-2006 à 16:49:28   

Reply

Marsh Posté le 24-10-2006 à 08:37:34    

bon ben up....

Reply

Marsh Posté le 25-10-2006 à 11:58:05    

Personne ?

Reply

Marsh Posté le 25-10-2006 à 12:19:44    

t'es sur xp pro ?
au passage, pourquoi t'utilises pas visual web developer express ?

Reply

Marsh Posté le 25-10-2006 à 16:45:04    

Le site est pas hébergé en local. Il est sur un serveur avec Windows Server 2003, IIS 6.
 
Et pourquoi pas visual web dev ? Parce que j'ai toujours utilisé un éditeur de texte pour tous mes devs en fait... Voilà, pas l'habitude quoi.

Reply

Marsh Posté le 25-10-2006 à 21:10:29    

visual web dev, tu peux l'utiliser comme éditeur de texte :D
et utiliser juste le fait d'avoir l'intellisense, et rien que pour ça, ca déchire le reste. Ca détecte automatiquement tes classes, et ca te propose les méthodes de tes classes par intellisense [:huit]
 
bon sinon pour ton problème, j'en ai aucune idée [:cupra]
tu dis qu'il y a 4 modes de session, t'as essayé les 2 autres ?


---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 26-10-2006 à 09:15:43    

Le troisième mode c'est sqlServer, et ça me plait moyen, j'avais pas trop le temps de le tester, et comme c'est un site plutot costaud avec déjà pas mal d'accès à la bdd, je voulais pas en rajouter.
 
Le 4ème, c'est le mode customisé, et là j'ai pas tout compris encore...
 
J'ai essayé un truc un peu barbare :  
 

Code :
  1. Sub Ok_Click(obj As Object, e As EventArgs)
  2.     Dim MainDir As DirectoryInfo = New DirectoryInfo(Chemin)
  3.     Dim SessionVar1 as string
  4.     Dim SessionVar2 as string
  5.     Dim SessionVar3 as string
  6.    
  7.     SessionVar1 = Session("var1" )
  8.     SessionVar2 = Session("var2" )
  9.     SessionVar3 = Session("var3" )
  10.     MainDir.Delete(True)
  11.     Session("var1" ) = SessionVar1
  12.     Session("var2" ) = SessionVar2
  13.     Session("var3" ) = SessionVar3
  14.     Response.Redirect(Back)
  15. End Sub


 
Mais ça ne marche pas... Je ne comprends pas...

Reply

Marsh Posté le 26-10-2006 à 12:10:18    

et avec response.session et request.session, plutot, dans ton dernier exemple ?
genre :
 

Code :
  1. Sub Ok_Click(obj As Object, e As EventArgs)
  2.    Dim MainDir As DirectoryInfo = New DirectoryInfo(Chemin)
  3.  
  4.    Dim SessionVar1 as string = Request.Session("var1" )
  5.    Dim SessionVar2 as string = Request.Session("var2" )
  6.    Dim SessionVar3 as string = Request.Session("var3" )
  7.  
  8.    MainDir.Delete(True)
  9.  
  10.    Response.Session("var1" ) = SessionVar1
  11.    Response.Session("var2" ) = SessionVar2
  12.    Response.Session("var3" ) = SessionVar3
  13.  
  14.    Response.Redirect(Back)
  15. End Sub


 
D'ailleurs si c'est du code behind, par défaut tu peux pas utiliser les objets request et response.
Tu devrais vraiment utiliser visual web dev, ca te dirait ce qui est faux dans ton code :D

Reply

Marsh Posté le 27-10-2006 à 11:27:39    

J'ai jamais utilisé les objets response et request pour les sessions en fait :D
 
Oui je sais, visual web dev, c'est bieng, mais le truc c'est qu'on utilise autant d'asp que d'asp.net, on est en pleine migration pour l'instant.
 
Quand on fera plus que de l'asp.net, on y passera sûrement...
 
J'essaiera ta solution.
 
PS : Je sais c'est sale, mais j'ai pas de codebehind, j'ai tout dans ma page :D

Reply

Marsh Posté le 27-10-2006 à 12:10:54    

T'es pas obligé d'utiliser visual web dev pour tous tes développements :p
 
pour le codebehind, moi non plus je l'utilise pas, sinon mon patron est perdu et comprend plus rien :o

Reply

Marsh Posté le 27-10-2006 à 12:10:54   

Reply

Marsh Posté le 06-11-2006 à 10:13:49    

Bon, j'ai installé le site sur un autre serveur, en l'occurence mon serveur perso, et du coup, pas de perte de session lors de la suppression de répertoire.
 
Donc c'est un problème de configuration IIS... mais d'où, je ne sais pas...
 
Si vous avez des idées sur la gestion des sessions dans IIS, n'hésitez pas

Reply

Marsh Posté le 06-12-2006 à 16:31:18    

si tu utilises ServerState, il faut lancer le service  
ASP.NET State Service et mettre son type de démarrage  
(Startup Type) pour qu'il démarre de façon automatique.
 
Par contre sais tu comment faire pour rediriger le user vers une page apres le timeout des variables de session. par défaut il est à 20mn et j'aimerais apres expiration redirigé vers une page de login !
 
j'ai essayé ceci mais sans succès :
 

Code :
  1. <authentication mode="Forms">
  2. <forms name="nom_de_la_form" loginUrl="sw_admin_start_TestPlan.aspx" timeout="1" />
  3. </authentication>

Message cité 1 fois
Message édité par losloshigh le 06-12-2006 à 16:32:22
Reply

Marsh Posté le 11-12-2006 à 15:17:29    

losloshigh a écrit :

si tu utilises ServerState, il faut lancer le service  
ASP.NET State Service et mettre son type de démarrage  
(Startup Type) pour qu'il démarre de façon automatique.
 
Par contre sais tu comment faire pour rediriger le user vers une page apres le timeout des variables de session. par défaut il est à 20mn et j'aimerais apres expiration redirigé vers une page de login !
 
j'ai essayé ceci mais sans succès :
 

Code :
  1. <authentication mode="Forms">
  2. <forms name="nom_de_la_form" loginUrl="sw_admin_start_TestPlan.aspx" timeout="1" />
  3. </authentication>



 
Ben j'avais essayé serverstate, mais ça marchait pas... J'ai pas trop fouillé non plus.
J'ai trouvé la solution à mon problème. En fait, il faut utiliser le framework 1.1. Avec le 2, ya perte de session, alors qu'avec le 1.1, non.  Bizarre hein ? Oui, je sais, mais je comprends pas pourquoi...
 
Sinon pour ton souci, moi je fais une fonction ASP qui vérifie si une des variables de session existe, je mets cette fonction en haut de chaque page, et si la variable n'existe pas, alors je redirige vers une page de login...

Reply

Marsh Posté le 07-03-2008 à 19:25:59    

Même problème en C#...
 
Peux-tu développer la façon avec laquelle tu as résolu le problème ? Changement de framework ? D'autres solutions vu que je ne suis pas administrateur ?
 
Merci d'avance.


Message édité par patemino le 07-03-2008 à 19:27:27
Reply

Marsh Posté le 07-03-2008 à 21:07:05    

non absolument pas changé de framework.  
 
La raison pour laquelle ASP.NET peut perdre la session, est que le processus asp réorganise en interne sa mémoire.
C'est aléatoire et le seul moyen de ne pas les perdre est de soit passer en STATESERVER, soit en mode SQL SERVER pour la gestion des sessions.  
 
Il ne faut surtout pas rester dans le mode standards.  
La plus simple et la plus efficace, est le mode STATESERVER, mais il faut que le service de gestion des sessions asp.net soit lancé dans Windows.  
De plus, il faut pour les deux mots STATESERVER et SQL SERVER que tout les objets qu'on met en session soit SERIALIZABLE.  
 
hope this help


Message édité par moi23372 le 07-03-2008 à 21:07:21
Reply

Sujets relatifs:

Leave a Replay

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