EDIT: Har nu fået dette løst, dog uden at få dette lagt op, men vil blot dele min "succes" og hvordan jeg har fået det løst så det måske kan hjælpe andre.
Pointen er at mine kontaktoplysninger er meget følsomme data og derfor skal brugeren ALTID gøre noget aktivt for at kunne se mine data og disse skal altid have en udløbsdato således at de ikke vil kunne blive bookmarked og lignende. Måske en fjollet tanke, men dette er mit ønske som jeg nu har fået løst.
- <div>
- <span id="txtIntro" runat="server">Intro text here</span><br />
- <span id="txtTimeout" runat="server" visible="false">Your timeslot have run out<br /></span>
- <span id="txtInvisible" runat="server" visible="false">Invisible</span>
- <span id="txtVisible" runat="server">Visible</span>
- <br />
- <asp:Button ID="cmdRequest" runat="server" Text="Button" onclick="Button1_Click" />
- </div>
Introteksten er til at fortælle at det her er muligt at få mine kontaktoplysninger på siden her.
Invisible er teksten hvori mine kontaktoplysninger kan ses.
Visible er samme forklaring som ovenover om at mine data er følsomme og derfor skal man aktiv bede om dem.
Timeout er en tekst der fortæller at dataene er løbet ud og du skal bede om dem igen.
For at kunne ændre hvilket der er synligt og ikke skal der rettes i
OnPreRenderComplete som følgende gør:
- protected override void OnPreRenderComplete(EventArgs e)
- {
- string code = Request.QueryString["code"];
- string expired = Request.QueryString["Expired"];
- //If expired add an header so it will refresh
- if (expired != null)
- {
- txtTimeout.Visible = true;
- Response.AppendHeader("Refresh", "5;URL=SecurityRequest.aspx");
- }
-
- if (code != null)
- {
- string seconds = code.Substring(0, 2);
- string date = code.Substring(2, 2);
- string year = code.Substring(4, 4);
- string message = code.Substring(8, 12);
- string hour = code.Substring(20, 2);
- string month = code.Substring(22, 2);
- string minutes = code.Substring(24, 2);
- string complete = seconds + date + year + message + hour + month + minutes;
-
- //hvis jeg har fået de rigtige dele ud korrekt bør de give samme resultat og så det korrekt
- //Så kan jeg udvide mine kriterier med alt muligt.
- if (complete.Equals(code))
- {
- TimeSpan difference = DateTime.Now.Subtract(new DateTime(int.Parse(year), int.Parse(month), int.Parse(date), int.Parse(hour), int.Parse(minutes), int.Parse(seconds)));
- //7 sekunder er for testpurpose
- if (difference.Seconds < 7)
- {
- txtInvisible.Visible = true;
- txtVisible.Visible = false;
- cmdRequest.Visible = false;
- }
- else
- {
- Response.Redirect("SecurityRequest.aspx?Expired=true");
- }
- txtIntro.InnerText += " DIFFERENCE " + difference.ToString();
- }
- }
-
- base.OnPreRender(e);
- }
udover dette har jeg sat en timer på siden der gør at den hele tiden opdaterer sig selv. Dette er fordi at når den selv opdaterer sig selv, vil den automatisk finde ud af om den er udløbet efter man har trykket på knappen og ikke kun "virke" hvis man trykker F5. Derved udløber data af sig selv og siden refreshes automatisk for at det virker bedre efter hensigten.
Dette gøres med:
- <head runat="server">
- <title></title>
- <meta http-equiv="refresh" content="5">
- </head>
Denne kode refresher siden hver 5 sekundt, som derved automatisk får siden til at "gemme" data igen når man har trykket på knappen når de er udløbet.
og så er der knappen som får det hele til at ske:
- protected void Button1_Click(object sender, EventArgs e)
- {
- System.Text.StringBuilder url = new System.Text.StringBuilder("SecurityRequest.aspx?code=");
- url.Append(DateTime.Now.ToString("ss")); //seconds
- url.Append(DateTime.Now.ToString("dd")); //date
- url.Append(DateTime.Now.ToString("yyyy")); //year
- url.Append("Al1oWW4AxCCisNOw"); //code
- url.Append(DateTime.Now.ToString("HH")); //hours
- url.Append(DateTime.Now.ToString("MM")); //month
- url.Append(DateTime.Now.ToString("mm")); //minutes
-
- Response.Redirect(url.ToString());
- }
Altså knappen redirecter til en url der har mine egne parametre indbygget.
Når siden så genlæses så tager jeg disse parametre og ser på dem og ser hvornår der er trykket på knappen og hvor lang tids forskel der er fra det tidspunkt til nu. Hvis der er gået mindre end 7 sekunder så vises mine data og hvis der er gået mere end 7 sekunder (for test skyld) så skjules data og der redirectes til en url der siger at nu er data udløbet.
Når siden så læses igen så vises timeout beskeden om at der skal klikkes på knappen igen, og så appendes en header som gør at siden automatisk redirecter sig selv til den oprindelige side uden nogen parametre, som om man lige er gået ind på siden.
---------------------------------------------------------------------------
Det er fordi jeg vil have at når man trykker på knappen kommer man til samme side, blot med et URL parameter som er et tidsstempel.
Dette tidsstempel siger hvornår man modtog mine kontaktoplysninger og disse vil så udløbe efter xxx tid (fx hvis man trykker F5 efter noget tid). Meningen er så at man skal få og vide at det er udløbet og man skal trykke på knappen igen.
Jeg har prøvet med redirect, men eftersom jeg ikke har nogen side der hedder "kontaktanmodning.aspx?code=112108all0ed4Axccs0056" så kan jeg ikke bruge den.
Derfor skal denne postbackurl sættes ved load af siden eller når man trykker på knappen til et nyt tidsstempel, og når man loader siden ses der på om code findes i URL'en så man kan se om de forskellige dele er iorden (kodeord og er indenfor tilladte tidsstempel) og så enten vise mine kontaktoplysninger eller få og vide man aktivt skal bede om dem igen.
Indlæg senest redigeret d. 22.08.2011 13:38 af Bruger #16651