none
Probleme beim Session beenden RRS feed

  • Frage

  • Hi,

    ich habe folgendes Problem.

    Ich lösche in meiner Global.asax im Session_End das Verzeichnis meiner laufenden Session.

    Allerdings löscht er im Verzeichnis auch die anderen Verzeichnisse komplett.

    string documentDirectory = outputPath + Session.SessionID;

                if (Directory.Exists(documentDirectory))
                {
                    try
                    {
                        Directory.Delete(documentDirectory, true);
                    }
                    catch
                    { }
                }         

    angenommen meine SessionID ist 10, dann speichert er alle geöffneten files von mir unter Ordner 10.

    Wenn ich von einem anderen PC auf den gleichen WebClient zugreife bekomm ich SessionID = 11 zb. Da drunter speichert er alle files. Das stimmt auch soweit.

    Beende ich jetzt eine Session löscht er das Verzeichnis. Allerdings löscht er auch das andere Verzeichnis.

    Kann mir da jemand helfen? Gibt es da eine bestimmte einstellung im Config oder IIS die ich beachten muss?

    Donnerstag, 3. Dezember 2015 14:42

Antworten

  • Hallo Alex,

    dann wird aus irgendeinem Grund die Anwendung beendet.

    Ich nehme an, dass der Ordner, den Du löschst, innerhalb deiner Webanwendung liegt? Falls ja, nimm den mal dort raus oder erstell ihn unterhalb des App_Data Ordners deiner Anwendung.

    Durch das Löschen anderer Ordner kann es vorkommen, dass die Anwendung neu kompiliert wird und hierbei wird die Anwendung und damit auch alle Sitzungen beendet.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert alex_1978 Montag, 7. Dezember 2015 08:22
    Freitag, 4. Dezember 2015 11:59
    Moderator

Alle Antworten

  • Hallo Alex,

    ich wundere mich über deine Art den Pfad zu kombinieren.

    Welche Ordnerstruktur hast du den jetzt:

    Outputpath

        \SessionA

        \SessionB

        ....

    oder

    OutputpathSessionA

    OutputpathSessionB

    ...


    © 2015 Thomas Roskop
    Germany //  Deutschland

    Donnerstag, 3. Dezember 2015 15:12
  • Hi,

    Wie beendest Du die Sitzung?

    Was steht in OutputPath bzw. wie wird dieser Variablen ihr Wert zugewiesen?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 3. Dezember 2015 22:14
    Moderator
  • outputpath\SessionID

    Filedirectory sieht so aus:

    \Temp\bkctvxp50pklspnd4q1uopu0\DocumentFiles__[EI_US-1.1.d91fa73a-3926-4801-84f5-c4725ca7bed7]


    Freitag, 4. Dezember 2015 09:08
  • Hi Stefan,

    outputpath\SessionID

    Filedirectory sieht so aus:

    \Temp\bkctvxp50pklspnd4q1uopu0\DocumentFiles__[EI_US-1.1.d91fa73a-3926-4801-84f5-c4725ca7bed7]

    unter dem Verzeichnis DocumentFiles.... \ stehen die Files dann

    Ich entnehme den Pfad aus dem Web.config und baue dann die SessionId und den DocumentKey(EI_US-1.1.d91fa73a-3926-4801.....) hinzu

    Egal ob die Sitzung durch einen Timeout nach 2 min sich von selbst beendet oder ich mich abmelde, werden immer alle Sessions beendet.

    Das ist der outputpath beim löschen

    \Temp\       

    +      Session.SessionID =      bkctvxp50pklspnd4q1uopu0

    er löscht dieses Verzeichnis. Dann bleibt er im SessionEnd drin und löscht auch das Verzeichnis der anderen Session

    Freitag, 4. Dezember 2015 09:15
  • Kann das sein das die 2 Sessions irgendwie als 1 objekt laufen? Muss ich da was bestimmtes beachten bei Sessions?

    Freitag, 4. Dezember 2015 09:46
  • Hi,

    häng dich mal in Application_End und protokollier dort, ob evtl. der ganze Anwendungspool und nicht nur die Session beendet wird.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 4. Dezember 2015 10:01
    Moderator
  • Hi Stefan,

    er beendet die 2 sessions und anschließend die Anwendung. Obwohl ich eine Session offiziell beendet habe.

    Habe mal ein Testprogramm gemacht,da starte ich 2 Sessions und beende eine mit Session.Abandon.

    Das tut super. Da meldet sich nur die Session ab von der ich mich auch abgemeldet habe

    void Session_Start(object sender, EventArgs e)
            {
                string documentDirectory = GetApplicationSetting_String("outputPath", "") + Session.SessionID;
            }

            void Session_End(object sender, EventArgs e)
            {
               
                string documentDirectory = GetApplicationSetting_String("outputPath", "") + Session.SessionID;       

            }

    Freitag, 4. Dezember 2015 10:30
  • Was ich noch mache zum schluss beim Abmelden ist folgendes:

    Ich bin auf PDF_Viewer.aspx Seite drauf und drücke auf link Abmelden

    <div>
    <a runat="server" id="logoff" href="Main.aspx?usr=logoff">Abmelden</a>      
       </div>

    Main ist meine Haupt bzw start und Anmeldeseite auf die ich zurück gehe.

    Dort frage ich dann im Page_Init folgendes ab:

    string usr = Request.QueryString["usr"];
                userTxt.Focus();

                if (usr == "logoff")
                {
                    Session.Abandon();
                    Response.Redirect("Main.aspx", false);
                }

    Dann meldet er sich von Sessions und Anwendung ab

    Freitag, 4. Dezember 2015 11:13
  • Hallo Alex,

    dann wird aus irgendeinem Grund die Anwendung beendet.

    Ich nehme an, dass der Ordner, den Du löschst, innerhalb deiner Webanwendung liegt? Falls ja, nimm den mal dort raus oder erstell ihn unterhalb des App_Data Ordners deiner Anwendung.

    Durch das Löschen anderer Ordner kann es vorkommen, dass die Anwendung neu kompiliert wird und hierbei wird die Anwendung und damit auch alle Sitzungen beendet.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert alex_1978 Montag, 7. Dezember 2015 08:22
    Freitag, 4. Dezember 2015 11:59
    Moderator
  • Hi Stefan,

    also ich hab mal auf der D: Platte ein Verzeichnis angelegt in dem ich die Files ablege und da tut es.

    Er löscht nur die eine Session ;)

    Freitag, 4. Dezember 2015 14:00
  • Gibt es keine Möglichkeit das Temp Verzeichnis innerhalb der Anwendung trotzdem zu benutzen und das es ignoriert wird?

    Auf das App_Data weiß ich nicht wie ich kommen kann. Ich fülle die Daten über unseren WebService, da greif ich per API drauf zu.

    Freitag, 4. Dezember 2015 14:13
  • Hi,

    Du musst einfach innerhalb deiner Webanwendung im Root einen Order mit dem Namen "App_Data" anlegen, dort ggfs. noch deinen "Temp" Ordner einfügen und den Rest kannst Du so belassen.

    Ich würde aber dennoch empfehlen, den Ordner außerhalb der Webanwendung anzulegen. Im IIS Manager kannst Du ja problemlos ein virtuelles Verzeichnis für diesen Ordner einfügen, so dass Du über http://servername/VirtuellesVerzeichnis/... trotzdem an deine Dateien rankommst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 4. Dezember 2015 15:35
    Moderator
  • Ok super danke dir
    Montag, 7. Dezember 2015 08:21