Implementering af tidsrestriktion

Tags:    c# javascript ajax

Hej udviklere!

Jeg udvikler et lille aktiespil, som kan ses her: http://youngexchange.azurewebsites.net/Account/Login?ReturnUrl=%2F

Det ville desuden være en kæmpe hjælp hvis du vil besvare denne lille brugerundersøgelse, også kaldet usability study. https://docs.google.com/forms/d/1BetFb3OsNUE_mmwgwoVfLdTIrGWL9rIGEsCkfKxVqAo/viewform

Håber i kan klare reklamen, men synes det er med til at sætte konteksten.

Som i nok vil bemærke, så kan man handle på alle tider af døgnet i spillet. Dette er selvfølgelig ikke optimalt eftersom at aktiemarkedet i DK er åben mellem 9-17. Men i USA åbner de 15.30 og lukker 22.00(dansk tid). Og på samme måde med andre børser.

For at løse dette har jeg tænkt at lave en frontend restriktion, som sørger for at disable køb-knappen.

Det som jeg godt kunne tænke mig at vide var, hvordan skaber jeg en begrænsning som denne? Et javascript som tjekker op mod en tabel over børsers åbne-lukketider, eller en backend variabel som sættes alt efter datetime, og som så sendes til et razor view der disabler knapper hvis værdien er negativ.

Best case skal jeg kunne sidde kl. 08.59, og se en disabled knap, og når klokken slår 09.00 bliver knappen aktiv og jeg kan handle, uden refresh af siden.

Håber i har nogle fixe ideér, og generelle input til siden er også meget velkommen.

På forhånd tak,
Mikkel



4 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 15 karma
Sorter efter stemmer Sorter efter dato
har du et brugernavn/password vi kan logge ind med, til os der ikke lige vil oprette os på http://youngexchange.azurewebsites.net
rettet: har oprettet en bruger


Det som jeg godt kunne tænke mig at vide var, hvordan skaber jeg en begrænsning som denne? Et javascript som tjekker op mod en tabel over børsers åbne-lukketider, eller en backend variabel som sættes alt efter datetime, og som så sendes til et razor view der disabler knapper hvis værdien er negativ.

dette skal være serverside, brugeren kan selv indstille tiden clientside, og så er den begrænsning intet værd

du skal være opmærksom på at server tiden vil være afh af hvor serveren er placeret i verden, så du skal hente brugerens location, evt ud fra IP addresse, så du kan bruge brugerens land ifm. timezone og evt også hvilke sprog siden skal visses på.

du kan lade din clent polle serveren efter tid hvert minut vha AJAX, og derved får aktiveret submit knappen (kan stadig manipuleres),
hvis du anvender html5 kan du få serveren til at pushe tiden ud
http://www.w3schools.com/html/html5_serversentevents.asp
http://en.wikipedia.org/wiki/Server-sent_events
nåå nej det virker ikke i IE :(

ip to country link, hvad hvis du går via VPN eller en proxy server, så kan du ikke stole på ip addressen
https://www.google.dk/search?q=ip+to+country
http://www.ip2location.com/
http://www.ip2nation.com/
http://www.iplocation.net/

browser accept language, kan evt også bruges, men nogle sætter anedet Accept-Language end det land de er i
kig på brugerens user agent string nærmere bestemt Accept-Language:
http://msdn.microsoft.com/en-us/library/ms537503%28v=vs.85%29.aspx
http://www.w3schools.com/jsref/prop_nav_useragent.asp




Indlæg senest redigeret d. 09.12.2014 23:01 af Bruger #16075

Best case skal jeg kunne sidde kl. 08.59, og se en disabled knap, og når klokken slår 09.00 bliver knappen aktiv og jeg kan handle, uden refresh af siden.

istedet for AJAX vil jeg satse på Server Sent Events (SSE) eller websocket
ja det er ikke understøttet af IE men man kan få noget js der kan simulere det
https://social.msdn.microsoft.com/Forums/ie/en-US/3ffeae00-2971-404e-957f-da9e63751c22/server-sent-events-and-ie10?forum=iewebdevelopment
feks
https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills
( http://modernizr.com/ )
https://github.com/aFarkas/html5shiv


http://stackoverflow.com/questions/5195452/websockets-vs-server-sent-events-eventsource
http://www.html5rocks.com/en/tutorials/eventsource/basics/ (server eks er i php :( )

så istedet for at clienten poller hvert minut for at se om der er ændringer, til knappen med AJAX, skal serveren sende det ud når der er ændringer med SSE eller websocket
jeg tror din server vil blive ked af at blive pollet hvert minut, lad os bare sige der er 10 samtidige brugere, og de alle sender et request hvert minut, med er der ændringer til knappen.

et dumt eks
html
Fold kodeboks ind/udKode 


eks med php som serverside, jeg ved godt du vil lave det i C#, men det kan jeg ikke teste lige pt

tid.php
Fold kodeboks ind/udKode 




jeg tænkte bare om det ikke er nemmere at ping serveren for tid, i stedet for at risikere fejl/hacks når man er afhængig af brugerens tid?

det er ikke nemmere, men det er mere sikkert


ang. user agent strings kan man ret nemt manipulere dem,

ja men det er nok de færeste normale brugere der gør det.
Da jeg selv skulle parse det i php havde jeg glæde af denne side så jeg kunne se de forskællige agent




Hej Ronny, ville ønske jeg kunne give dig yderligere points! Håber udviklerne vil hjælpe mig!

Jeg tænkte skam også på en failsafe serverside. Jeg har host hos azure, så servertid er ALTID GMT+0. jeg tænkte bare om det ikke er nemmere at ping serveren for tid, i stedet for at risikere fejl/hacks når man er afhængig af brugerens tid?

Din løsning med Ajax er lidt i stil med hvad jeg tænker, men som du rigtigt siger, kan brugeren forsøge at manipulere knappen aktiv, men han vil blive stoppet af det serverside tjek af om børsen er åben. Men god pointe!

Har du evt. et konkret forslag til hvordan jeg lave et setup med database og controller til at håndtere dette. Pt. har jeg en tabel med børser med følgende kolonner:
id - shortname - name - open - close

Jeg tænkte noget i stil med dette:
Kl. er 09.30 og køb knappen er aktiv(der sker et ajax poll til controller hver 10. sekund brugeren er på siden - og aktiverer knap hvis der bliver grønt lys).
brugeren køber en dansk aktie
aktie symbol og antal sendes til controller
Controller kalder repository som kalder db efter exchange for given aktie
controller sammenligner DateTime.Now med Timespan open og close og lader handel forsætte
controller tjekke om brugeren har likviditet til at købe aktier
controlleren start købs process og brugeren redirectes til portefølje.

ang. user agent strings kan man ret nemt manipulere dem, så jeg ved ikke om jeg ville stole særlig meget på dette. Har jeg arbejdet med en webbot, hvor man kunne implementere en custom user agent string meget let, og derfor tænker jeg at det ikke er nogen specielt sikkerhed?

Pft.



Indlæg senest redigeret d. 10.12.2014 09:59 af Bruger #17368
Hej Ronny, jeg er rigtig glad for dit svar, der er desværre kommet noget op, så jeg kan ikke arbejde på det de næste dage, skal nok følge op når jeg går igang igen :)



t