Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Validation of viewstate - Kako se borite sa ovim problemom (ASP.NET 2.0)

  • 4 odgovora
  • 2.984 pregleda

Najnovija ↓

Validation of viewstate - Kako se borite sa ovim problemom (ASP.NET 2.0) 21.04.2008. u 08:01 · pre 225 meseci
izmenjeno 1 put, poslednji put mmix 21.04.2008. u 09:26
  1. mmix21.04.2008. u 09:26zapis iz teksta poruke
#1
Prije nekoliko mjeseci imao sam bliski susret sa ovim problemom:

Code:
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, 
ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. 
AutoGenerate cannot be used in a cluster.


Guglajući do besvjesti pročitao sam da je problem u stvari što je ViewState kriptovana. Nestrpljiv korisnik napravi PostBack prije nego što se cijela stranica učita do kraja tako da se kriptovana ViewState ne prenese na sledeću stranu kako treba, tj server onda "ne zna" da je ViewState kriptovana. Takođe sam pročitao da Microsoft osoblje tvrdi da bi ispitali taj bug moraju napraviti Web Farm. Ja i mnogo drugih korisnika nemamo Web Farm ali dobijemo taj exception. Zvaničnog rješenja nema.

Ovaj problem sam riješio pomoću JavaScripta (i prijatelja) i od tada nemam ovaj problem.
Interesuju me dvije stvari:

1. Kako vi rješavate ovaj problem i da li ga uopšte imate?
2. Da li Frejmvork 3.5 ima ovih problema
Re: Validation of viewstate - Kako se borite sa ovim problemom (ASP.NET 2.0) 21.04.2008. u 09:52 · pre 225 meseci #2
Problem je do enkripcije viewstate-a i validacije callback poziva. Po defaultu, eventi su podlozni validaciji i viewstate se kriptuje ako bar jedna kotrnola to zatrazi (a gridovi i druge kotrnole koje u viewstate ubacuju i nesto sem svojih informacija obicno traze ;)). Kao posledica toga, na kraju aspx stranice pre </form> taga se renderuju sledeca dva taga:

Code:

<input type="hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="JaeWJT3R03KcdibVVc2Eo3xNlcxURfbH7zN7LQSm758=" />


Kad neko bude uzurban onda postback ne sadrzi ova dva taga i dobijas gresku koju vidis. Da bi aplikacija lepo radila sa tim brzim korisnicima, moras da iskljucis i validaciju eventa i enkripciju, u web.config file-u promeni <pages> u

Code:

<pages viewStateEncryptionMode="Never" enableEventValidation="false">


S tim sto naravno gubis security benefite koje su ti ove dve opcije nudile.

I da, .net3.5 i dalje koristi asp.net2.0 engine tako da je problem i dalje tu.

Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Validation of viewstate - Kako se borite sa ovim problemom (ASP.NET 2.0) 21.04.2008. u 11:15 · pre 225 meseci #3
Ja sam izabrao neko rjesenje tako sto sam ubacio js kod

Code:

<script lang="javascript">document.getElementsByTagName("form")[0].disabled = true;</script>
</form>
</body>
<script lang="javascript">document.getElementsByTagName("form")[0].disabled = false;</script>
</html>


od tada nisam imao ovaj problem. Koliko je ovo dobro rjesenje? Ne zelim da narusim sigurnost stranice, nije mi to neko pouzdano rjesenje. Takodje sam primjetio da se ova greska javlja kod DataList i GridView objekata.
Re: Validation of viewstate - Kako se borite sa ovim problemom (ASP.NET 2.0) 21.04.2008. u 11:34 · pre 225 meseci #4
Pa sva ta resenja su manje vise "trkanje" sa korisnikom, skracivanjem vremena u kojem korisnik moze da klikne na dugme a da izazove gresku. Ti disablujes formu tik pre </form>, sto tehnicki znaci da nisi mnogo otisao daleko (sem mozda za autosubmit) jer se problematicna polja generisu tek pred </form> tako da je taj div sa skrivenim poljima jedino sto je preostalo da se izrenderuje tokom tvog "pasivnog" perioda. I dalje postoji mogucnost da korisnik klikne na submit dugme iznad grida dok se grid renderuje sto nece biti pokriveno tvojim resenjem. Na zalost, ne postoji efikasno resenje, mozda bi mogao malo da ga poboljsas tako sto ces disable skriptu da stavis odmah ispod <form> ali to onda zavisi od toga da li se DOM updatovao dovoljno brzo da form udje u forms collection ;)
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme