pole zmienia swoją wartość na domyślną po opuszczeniu try

0

Witam,
Kiedy wykonuje się poniższy kod:

           StreamWriter sw1;
                try
                {
                    zm.idUser = dekoduj(Request["id"]);
                    zm.haslo = Request["haslo"];
                    sw1 = new StreamWriter(pathMain + "try.txt");
                    sw1.WriteLine(zm.haslo);
                    sw1.Close();

                }
                catch (Exception ex)
                {
                    Response.Redirect("error.aspx");
                }
            

            if (zm.idUser == 0)
            {  sw1 = new StreamWriter(pathMain + "catch2.txt");
                sw1.WriteLine(zm.haslo);
                sw1.Close();
                Response.Redirect("error.aspx");
            }

No i teraz dlaczego te pliki tekstowe które mi się stworzyły to:
W try.txt mam zm.haslo z jakas konkretna wartoscia natomiast w catch2.txt mam zm.haslo i w srodku .txt jest pusto.

Czyli tak jakby w try mam przypisane wartosci a po opuszczeniu try nagle one się czyszczą... dlaczego tak się dzieje?

Ten kod działa prawidłowo a jest na tej samej zasadzie napisany:

 class zmienne
    {
        public int a;
        public string b;
    }
    class Program
    {
        static void Main(string[] args)
        {
            zmienne zm = new zmienne();
            if (zm.a == 0)
            {
                try
                {
                    zm.a = 10;
                    Console.WriteLine(zm.a);
                    zm.b = "lala";
                    Console.WriteLine(zm.b);

                }
                catch { }
                Console.WriteLine(zm.a);
                Console.WriteLine(zm.b);
            }
            Console.WriteLine(zm.a);
            Console.WriteLine(zm.b);

            Console.ReadKey();
        }
    } 

Tutaj zwraca mi za każdym razem 10 i "lala".

0

A usuwasz za każdym razem te pliki i masz pewność, że za każdym razem tobie je tworzy. Możliwe że leci wyjątek

0

Mam pewność.

Natomiast gdy zm.idUser oraz zm.haslo usunę i stworzę lokalne zmienne statyczne to wszystko działa... tylko, że nie mogą one być statyczne bo to web service i może być konflikt:

 StreamWriter sw1;
public static int idUser;
public static string haslo;
                try
                {
                    idUser = dekoduj(Request["id"]);
                    haslo = Request["haslo"];
                    sw1 = new StreamWriter(pathMain + "try.txt");
                    sw1.WriteLine(haslo);
                    sw1.Close();
 
                }
                catch (Exception ex)
                {
                    Response.Redirect("error.aspx");
                }
 
 
            if (zm.idUser == 0)
            {  sw1 = new StreamWriter(pathMain + "catch2.txt");
                sw1.WriteLine(haslo);
                sw1.Close();
                Response.Redirect("error.aspx");
            }

To dziala...

0

Daj więcej kodu wokół tego fragmentu. Nie widać deklaracji haslo chociażby

0

Dowiedziałem się, że jakby ten webservice jest na nowo odpalany i w tym momencie tworzy się nowa instancja klasy zm.

Po prostu strona na nowo jest uruchamiana i to właśnie z tego powodu zwykłe zmienne są zerowane a statyczne dalej istnieją.

Moje pytanie jest takie, jak skorzystać ze zmiennej sesyjnej w C# ASP.NET? Czy jest coś takiego? Bo w Google coś znaleźć nie potrafię.

Ewentualnie jakieś inne propozycje.

0

Poczytaj o ViewState.

EDIT:
To dotyczy WebForms. W MVC nie robiłem.
http://stackoverflow.com/questions/23623229/what-is-the-equivalent-of-viewstate-in-asp-net-mvc

0
Grzegorion napisał(a):

Moje pytanie jest takie, jak skorzystać ze zmiennej sesyjnej w C# ASP.NET? Czy jest coś takiego?

Jest i dla zmyłki nazywa się Session.

Tylko Ty w końcu piszesz w ASP.NET aplikację czy WebService? A jeśli tak, to w jakiej technologii, bo między WebForms, MVC, ASMX i WCF są jednak różnice.

0

Session zadziałało! Super dziękuje za pomoc.

To Web Service nie znam się na tych technologiach za bardzo gdyż na razie znam WPF na desktopa i windows phone tylko a tutaj na praktykach dostałem Web Service :)
Rozszerzenia plików to .aspx, .asmx, .asmx.cs i jest web.config :P

0

Tylko jedno pytanie jeszcze.

Teraz gdy jakiś dłuższy czas nie ma aktywności to ta zmienna sesyjna się kasuje no i kiedy wykonuje polecenie, w którym jest sprawdzana autoryzacja to teraz mi wywala błąd a powinien wywalić obrazek i informację dla użytkownika.

Jaki warunek musi być spełniany jeśli sesja wygaśnie i chce aby przeniósł użytkownika na Redircet("error.aspx"); ?

0

warunek, ze sesja dla danego uzytkownika musi istniec, wiec sprawdzasz czy istnieje i robisz przekierowanie jak nie istnieje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1