Question

Je l'ai fait quelque chose comme le code suivant:

protected void Page_Load(object sender, EventArgs e)
{
   Label1.Text = Session["loginid"].ToString();
}

protected void delete_click(object sender, EventArgs e)
{
    delete("mail1",Session["loginid"]);
}

private int delete(string mailid, string user)
{
 System.IO.Directory.Delete(Server.MapPath(@"~\files\" + user + @"\" + mailid), true);
}

Quand j'appuie sur le bouton de suppression, tout fonctionne bien et le dossier est supprimé. mais après que lorsque la page postbacks à nouveau, puis un NullRefrenceException est soulevée à  Label1.Text = Session [ "loginid"] de ToString ();.

pourquoi est-il passe ... ??

Quand je ne suis pas en utilisant cette méthode Directory.Delete () tout fonctionne bien et les variables de session ne sont pas à null.

Quand je traçais ma demande, je trouve que les variables de session après la méthode Directory.Delete () étaient intacts et j'ai pu utiliser ces variables de session dans le traitement après Directory.Delete ().

Mais dès que la page postbacks toutes les variables de session sont définies sur null. Et ce problème ne semble pas quand je ne suis pas en utilisant cette méthode delete ().

Le dossier que je suis suppression est dans le dossier de mon projet. Je suis en cours d'exécution de ce site Web en utilisant Visual Studio.

S'il vous plaît aider.

Était-ce utile?

La solution

Juste une autre supposition ici, mais peut-être il est parce que votre modification quelque chose dans votre répertoire des applications (une intuition depuis votre utilisation de Server.MapPath avec le ~). IIS pense peut-être l'application a changé et recycle l'application et par conséquent efface toutes les sessions.

Ceci est similaire à si vous modifiez votre fichier web.config que quelqu'un utilise l'application et il supprime toutes les sessions et recycle l'application. Est-ce que vous supprimez un répertoire qui peut contenir des informations que IIS utilise pour l'application?

Vous avez dit qu'il ne se produit que lorsque vous incluez cette ligne de code et une session va vraiment ne s'anéanties toujours (sauf si vous faites vous-même manuellement) lorsque l'application est recyclé par IIS ou temporairement. Il est évidemment pas hors délai afin que le recyclage doit être ce qui se passe.

Autres conseils

Votre dossier « fichiers » dans votre dossier d'applications Web? Peut-être redémarrer l'application elle-même lorsque vous la suppression des fichiers. Essayez d'utiliser sessionStateServer. Son donjon sessions en vie.

Web.config:

<configuration>
    <system.web>
        <sessionState mode="StateServer"></sessionState>
    </system.web>
</configuration>

Suppression d'un dossier dans votre répertoire virtuel peut entraîner l'application de re-démarrage, perdant ainsi toutes les données de session. Pour éviter cela, soit supprimer des fichiers individuels (pas de dossiers) ou utiliser le StateServer pour maintenir vos sessions.

Depuis la page correctement des charges avant d'appuyer sur le bouton de suppression, le problème est sans doute la référence Session["loginid"].ToString(). Avez-vous tout autre code qui fait référence Session["loginid"]? Le code que vous avez montré ici ne fera rien qui enlève loginid de la session.

Toutefois, si cette application est en cours d'exécution sur un cluster de serveurs et que vous utilisez le mode de session par défaut en cours, vous pouvez perdre l'accès à votre session entre les requêtes HTTP parce qu'ils sont gérés par différents serveurs. Voir ici pour plus d'informations.

  

Si je supprime le directory.delete ()   fonction du code, puis l'ensemble   l'application est en cours d'exécution si bien sans   toute exception

Ok, semble que nous avons trouvé votre problème. Votre projet n'a pas les privilèges nécessaires pour supprimer le direcotry (même si le répertoire est deleted.nevertheless: il y a des problèmes de privilège)

Je suppose que vous êtes l'application est de lancer une exception lors de cette opération de fichier et une nouvelle session commence. J'ai une situation sur un de similaire mes projets, mais je n'ai toujours pas compris comment le résoudre.

Je suis sûr que vous serez d'accord avec la description si vous créez Global.asax et points d'arrêt sur Application_OnError et Session_OnStart (ou cependant, ces méthodes sont correctement orthographiés). Vous verrez que l'erreur est soulevée et après une nouvelle session commence.

Tout d'abord, deux contrôles de santé d'esprit:

  1. Est-ce que le travail de la session comme prévu sur d'autres pages?
  2. Votre méthode Supprimer la suppression des fichiers dans un dossier ASP.NET spécial, comme App_Data ou App_Code, qui peuvent être à l'origine de l'application à redémarrer?

Voici ce que je voudrais essayer de déboguer ce problème, après avoir vérifié ci-dessus:

  1. Définir un point d'arrêt sur la méthode de suppression et avoir la variable de session dans une fenêtre de la montre. Voir ce que la valeur de la variable de session est avant l'appel à Directory.Delete est et ce qu'il est par la suite. Est-ce à ce moment-là quand vous perdre session, ou n'est pas jusqu'à la prochaine visite de la page?
  2. Utilisez un outil comme Fiddler pour examiner les biscuits échangés entre le navigateur et le serveur Web sur postbacks. Assurez-vous que lorsque le navigateur première visite d'un nouveau cookie de session est créé et stocké dans le navigateur. Puis, lors de la suppression du dossier, voir si le serveur Web envoie un nouveau cookie de session sur la réponse de cette publication. Cela indiquerait qu'une nouvelle session a été créée.

Merci

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top