[C#/ASP] Przechowywanie danych

0

Chcę zrobić stronę, której celem będzie stworzenie obiektu zawierającego około sto obiektów typu string (1 rekordu w tabeli bazy danych).
Do przejścia będzie wiele formatek, około 5-6, które będą łączyć się z serwerem w celu zapisania/pobrania danych.
Jak zaimplementować mechanizm przechowywania danych, tak aby wszystkie formatki mogło swobodnie korzystać z tych danych, bez żadnych utrudnień?

  1. Myślałem nad rozwiązaniem problemu przez dane sesyjne, lecz pojawiały się problemy, kiedy zamykałem kartę przeglądarki, a nie okno przeglądarki i otwierałem witrynę ponownie.

Jeśli sesje są optymalną drogą, jaka metoda jest wywoływania po stronie serwera w chwili zamknięcia karty z aplikacją? (Zależy mi na czyszczeniu danych sesyjnych nie tylko w chwili zamykania okna przeglądarki, ale też karty)

  1. Myślałem również o ciasteczkach. Czyściłbym je w chwili zamknięcia karty/przeglądarki.
    Czy bardziej doświadczony user może mieć wpływ na zawartość danych w ciasteczkach podczas działania aplikacji webowej? Jeśli mógłby zmieniać zawarte w nich dane, trochę by mi to komplikowało sprawę.
    A może istnieje możliwość zaimplementowania ciasteczek przechowywanych na serverze?

A wy jak rozwiązujecie takie problemy?

0

jaka metoda jest wywoływania po stronie serwera w chwili zamknięcia karty z aplikacją?

Żadna. Wygasają tylko ciacha sesyjne (w większości przeglądarek po zamknięciu całego okna i nie masz nad tym kontroli)

Ogólnie sprawę ciastek robi się tak:
Generujesz dla użytkownika ID sesji przykładowo tak:
MD5(IP_Usera + User_Agent + Aktualny czas)
Nadajesz użytkownikowi ciacho z wartością podanego wyżej wyrażenia i przypisujesz sobie w bazie danych informacje (np. tablice zserializowaną) dotyczące tej sesji. W ten sposób ingerencja w ciasteczka nic nie da, bo w nich będzie tylko ID ("odnośnik") do tej sesji na serwerze, tak więc tylko serwer będzie mógł edytować dane skojarzone z tym identyfikatorem.

Tyle, że możesz bawić się ramkami, HTTP Refererem i innymi rzeczami żeby osiągnąć pożądany przez siebie skutek czyszczenia ciastek po zamknięciu karty.

0
Demonical Monk napisał(a)

jaka metoda jest wywoływania po stronie serwera w chwili zamknięcia karty z aplikacją?

Żadna. Wygasają tylko ciacha sesyjne (w większości przeglądarek po zamknięciu całego okna i nie masz nad tym kontroli)

Ogólnie sprawę ciastek robi się tak:
Generujesz dla użytkownika ID sesji przykładowo tak:
MD5(IP_Usera + User_Agent + Aktualny czas)
Nadajesz użytkownikowi ciacho z wartością podanego wyżej wyrażenia i przypisujesz sobie w bazie danych informacje (np. tablice zserializowaną) dotyczące tej sesji. W ten sposób ingerencja w ciasteczka nic nie da, bo w nich będzie tylko ID ("odnośnik") do tej sesji na serwerze, tak więc tylko serwer będzie mógł edytować dane skojarzone z tym identyfikatorem.

Tyle, że możesz bawić się ramkami, HTTP Refererem i innymi rzeczami żeby osiągnąć pożądany przez siebie skutek czyszczenia ciastek po zamknięciu karty.

Hmm, pozwoliłem sobie

  1. Odpalić app
  2. Wpisać dane do formularza
  3. Redirekt do innej formatki zapisując dane w sesji
  4. Zamknąć kartę (tylko kartę istnieją inne karty z innymi witrynami)
  5. Otworzyłem w tym samym oknie przeglądarki nową kartę z moją app
  6. Dane z poprzedniego formularza widniały w aktualnym

To chcę wyeliminować.

Ten sposób który opisałeś jest optymalny i szeroko stosowany przez developerów?

Dodam, że jeszcze nie wiem co to jest ta tablica zserializowana. Zwykły rekord w bd?
Jak wypada ten sposób w miarę przyrostu userów app?

0

Cały wbudowany mechanizm sesji w PHP działa tak jak pokazałem i to JEST imo jedno ze słuszniejszych rozwiązań (musisz przechowywać dane po stronie serwera, żeby nimi nikt nie manipulował). Za przykład użytkownika takiego zastosowania można podać nawet 4programmers.

Dodam, że jeszcze nie wiem co to jest ta tablica zserializowana

http://pl.wikipedia.org/wiki/Serializacja (podałem tą tablicę jako przykład, ofc wszystko może być po prostu w polach bazy)

Dane z poprzedniego formularza widniały w aktualnym. To chcę wyeliminować.

Tak jak mówiłem. Możesz pobawić się refererem, albo ramkami, JS...

0

Ok, dzięki. Dziś się pobawię. Dla uściślenia dodam, że była mowa o ASP a w twoim poście pojawiło się php. Mam nadzieję, że mechanizm sesji nie rożni się w omawianym aspekcie.

dzięki za pomoc i pozdrawiam.

0

różni się, i to znacząco. oczywiście możesz to zrobić w asp.net tak jak w php, tylko po co rzeźbić coś, co już jest ładnie opakowane w klasy? sesja nawet nie musi być przechowywana po stronie serwera, asp dodaje od siebie do formularzy ukryty input ze stanem kontrolek i - w razie potrzeby - sesji. http://www.google.com/search?q=asp.net+session

@Demonical Monk - pytanie było o asp.net, nie zauważyłeś?

0

Ja nie wiem czy w ASP jest już wbudowany mechanizm sesji do jakiejś tam biblioteki, w każdym razie pisałem: sposób użycia tego w PHP jest słuszny dla wszystkich języków tego typu.

@up
A to przepraszam ;p

0
  1. Myślałem nad rozwiązaniem problemu przez dane sesyjne, lecz pojawiały się problemy, kiedy zamykałem kartę przeglądarki, a nie okno przeglądarki i otwierałem witrynę ponownie.

W evencie Page_Load strony jest property o nazwie IsPostBack. Jeśli wartość = false - to znaczy, że strona została odświeżona z przeglądarki (to znaczy: wszedłeś na tę stronę). Wtedy można wyczyścić sesję.

0

Ok, widzę, że doradzacie sesje. Stosujecie zwykły mechanizm czyszczenia i przypisywania zmiennych sesyjnych? Czy są jakieś sztuczki, które pomagają?

0

Jeśli nie robisz poważniejszego projektu to nie ma sensu przepisywać czy przekombinowywać tego systemu który jest dołączony...

0
Demonical Monk napisał(a)

Jeśli nie robisz poważniejszego projektu to nie ma sensu przepisywać czy przekombinowywać tego systemu który jest dołączony...

?

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