Fotogalerie - hodnocení fotografií   zodpovězená otázka

ASP.NET WebForms

Hoy,

dělám si fotogalerii v ASP.NET a chtěl bych tam mít také hodnocení fotografií. Z určitých důvodů ovšem nemohu použít databázi. Řeším to tedy takto:

Každá fotka bude mít také textový soubor ( photo1.png + hodnoceni.txt ). V textovém souboru bude ze začátku číslo 0. U fotografie budou dvě tlačíka: + a -. Pokud se bude fotka líbit, stiskne uživatel tlačítko +. Na straně serveru se načte číslo v textovém souboru a uloží do proměné např. A. A s proměnou se bude dále pracovat. K A se přičte 1. Upravené číslo se opět uloží do textového souboru. A ty čísla, se budou z textových souborů načítat při vztupu na stránku a ke každé fotografii se to číslo napíše. Něco typu: Hodnocení: +(5 hlasů) +(2 hlasy).

Nemám to vyzkoušené. Pouze zatím teorie.

Narazil jsem totiž na problém. Jak zabránit, aby jeden uživatel hlasoval vícekrát???

Poradí mi někdo??? Díky

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Smím se zeptat, proč nemůžete použít databázi? Bez ní tohle budete řešit těžko.

Zapisovat počet bodů do souboru není příliš vhodný nápad, co když dva lidé budou hlasovat najednou (ono to sice není moc pravděpodobné, ale zákon schválnosti fakt funguje, osobně to mám vyzkoušené, i na webu s malou návštěvností, natož pak s velkou).

Většinou se to dělá tak, že v DB uděláte tabulku a do ní cpete, kdo kdy dal kolik bodů které fotce. Zaznamenáte si IP adresu hlasujícího a pokud chce hlasovat znovu, už to nepovolíte.

Tady je problém, že víc lidí může mít stejnou IP, ale není jak to poznat. Můžete třeba informaci o tom, že uživatel hlasoval, uložit do cookies, ale ty může mít uživatel vypnuté a není problém je vymazat a hlasovat znovu. Jediný spolehlivý způsob je tedy zapisovat si IP adresy těch, kteří hlasovali. A rozhodně použijte databázi, ukládat to do souboru je použitelné při webu, na který poleze 5 lidí. Při víc lidech to strašně zatěžuje filesystém serveru.

Bez databáze mě napadá jedině mít v aplikaci proměnnou, do které budete hlasy ukládat, a která bude společná v rámci celé aplikace (to jde udělat, stačí proměnnou nadeklarovat jako Shared ve VB.NET, resp. static v C#) a podobně mít i seznam IP adres, které hlasovaly. Jednou za čas se to ale musí uložit do souboru, aplikace se totiž může kdykoliv zrestartovat, ať už z důvodu restartu serveru, výpadku proudu, anebo prostě něco spadne. Můžete tím několik posledních hlasování ztratit.

Nejlepší je prostě databáze, existuje jen velmi málo důvodů, kvůli kterým ji nepoužít.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Databázi nemůžu použít z toho důvodu, protože to neumím.

Jasně řeknete si, je tady na to článek, ale já sem si ho četl, ale nepochopil sem vůbec nic.

Tím nechci nijak zhazovat autora. Prostě mi to nejde do hlavy

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

No, je fakt, že jsem čekal mnoho různých důvodů, proč nepoužít databázi, tenhle ale ne. Vyvíjet weby bez databází je jako být slepý malíř. Co konkrétně nechápete? Tady máte na výběr, dobrý je ten třídílný seriál: http://www.vbnet.cz/kategorie--3.aspx

Rozhodně se na databáze podívejte a neříkejte, že to nejde do hlavy. To jsou jenom výmluvy :-)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Slibuju, že se na to mrknu :-D

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravím, sice jste již odpověděl, ale rád bych se zeptal na praktické zkušenosti, jak podobné záležitosti řešíte Vy (hlasování apod.) tady na VBNETu, nebo co se používá na velkých serverech s předpokladem vyšší návštěvnosti (různé ankety jsou dnes módou téměř většiny serverů).

Přece to blokování přes IP je hodně "kruté" - třeba u nás na naší vesnici máme internet přes vlastní kabelovku a sice od letoška nám náš provider již nastrkal každému veřejné IP adresy, ale do té doby jsme všichni - celá ves (sice malá, ale přece) vystupovali pod jednou IP adresou proxiny našeho zprostředkovatele. Takže u nás by v takovém případě jeden hlasoval za celou vesnici. To už mi připadá, z praktického hlediska, o něco lepší využití těch Cookies, i přes Vámi popsané nespolehlivosti, ale je to zase extrém z druhé strany (v prvním případě někoho omezíme, v tom druhém zase někomu nezamezíme).

Existuje ještě nějaká třetí cesta? (samozřejmě, pokud mám skutečně "závažná" hlasování, pak je vždy možnost nechat ho vázat na přihlášené uživatele, ale pak se jedná zase o omezení, že hlasovat mohou pouze registrovaní).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tady na VbNetu se dá prostě hlasovat z 1 IP adresy jednou za 24 hodin. Jinak než podle IP adresy se lidé identifikovat spolehlivě nedají. Pokud by to byl server s daleko větší návštěvností, pak bych to asi udělal tak, že na 1 IP adresu bych povolil takových 10-20 hlasů za 24 hodin a informaci o hlasování bych ukládal ještě do cookies. Drtivé většině uživatelů by šlo hlasovat jen jednou, protože nemají nejmenší tušení, co to cookies jsou, natož pak jak je smazat nebo vypnout, a když by někdo chtěl podvádět, tak 20 hlasů výsledek zas až tolik nezkreslí.

Ještě jsem viděl, že při hlasování musíte zadat e-mailovou adresu, na ní vám přijde zpráva z odkazem a když na něj kliknete, hlas se přičte a adresa se pro hlasování zakáže. To je asi nejspolehlivější, ale pokud má někdo vlastní doménu a na mailu nastaven doménový koš (všechny zprávy odeslané na něco@doména.cz se přepošlou na jednu adresu), pak máte de facto nekonečné množství adres, což také není to pravé.

Nejspolehlivější je nechat hlasovat jen registrované, anebo při hlasování vyžadovat, aby se uživatel přihlásil pomocí Windows Live ID, to má poměrně dost lidí a není sice problém založit si víc účtů, ale dá to dost práce. Horší je to s těmi, kteří Live ID nemají, těžko se budou chtít kvůli jednomu hlasu registrovat na webu Microsoftu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback