16 Passing Data between pages Forms Sessions Query
16 – Passing Data between pages: Forms, Sessions, & Query Strings Mark Dixon Page 1
Session Aims & Objectives • Aims – To introduce the fundamental ideas involved in passing data between pages • Objectives, by end of this week’s sessions, you should be able to: – pass data between pages, using: • Self Posting • Query Strings • Session Variables Mark Dixon Page 2
Example: Logon v 2 (design) • Restrict access to home page Mark Dixon Page 3
Example: Logon v 2 (code) Logon. aspx <script language="VB" runat="server"> Sub Page_Load() Dim un As String Dim pw As String If Request. Form("btn. Logon") > "" Then un = txt. User. Name. Value pw = txt. Pass. Word. Value If un = "mark" And pw = "soft 131" Then Response. Redirect("home. htm") Else msg. inner. Text = "Login details incorrect. " End If End Sub </script> Home. htm <html> <head><title>My Home page</title></head> <body> <p> Welcome to my home page. <img src="You. Are. Here. jpg" /> </p> </body> </html> <head><title></head> <body> <form runat="server"> Please logon: <input id="txt. User. Name" type="text" runat="server" /> <input id="txt. Pass. Word" type="text" runat="server" /> <input id="btn. Logon" type="submit" value="Logon" runat="server" /> <p id="msg" runat="server"></p> </form> </body> </html> Mark Dixon Page 4
Example: Logon (Fixed Problem) • View Source – shows client-side script: No server-side code Mark Dixon Page 5
Example: Logon (Problem 2) • User can type home page url (address) directly (bypassing logon page) Mark Dixon Page 6
Solution • Need way for: – password page to tell home page – that user logged in OK Mark Dixon Page 7
Technique: Dead-Drop Variables • 2 Spies wish to pass message between each other without actually meeting • Arrange a dead-drop location – one spy leaves message at location – other spy visits location later to pick up message • Variables used as dead-drop containers Mark Dixon Page 8
Example: Logon v 3 (code) Logon 3. aspx <script language="VB" runat="server"> Dim Logon. OK As Boolean Sub Page_Load() Dim un As String Dim pw As String Logon. OK = False If Request. Form("btn. Logon") > "" Then un = txt. User. Name. Value pw = txt. Pass. Word. Value If un = "mark" And pw = "soft 131" Then Logon. OK = True Response. Redirect("home 3. htm") Else msg. inner. Text = "Login details incorrect. " End If End Sub </script> <html> <head><title></head> <body> <form runat="server"> Please logon: <input id="txt. User. Name" type="text" runat="server" /> <input id="txt. Pass. Word" type="text" runat="server" /> <input id="btn. Logon" type="submit" value="Logon" runat="server" /> <p id="msg" runat="server"></p> </form> </body> </html> Mark Dixon Home 3. aspx Logon. OK True <script runat="server" language="VB"> Dim Logon. OK As Boolean Sub Page_Load() If Logon. OK = False Then Response. Redirect("Logon 3. aspx") End If End Sub </script> <html> <head><title>My Home page</title></head> <body> <p> Welcome to my home page. <img src="You. Are. Here. jpg" /> </p> </body> </html> • Error: always redirect to logon Page 9
Example: Logon v 3 (Error) • Variables – don't persist between pages Mark Dixon Page 10
Passing Data (temporary) • Session object – used to pass information between pages: Session("Thing") = 91 Put 91 into Thing – exists for current session – persist between pages – clears if user closes browser – clears after 20 mins of inactivity – no need for declaration Mark Dixon Page 11
Maintaining State: Session Object Send. aspx <script runat="server" language="VB"> Sub Page_Load() If Request. Form("btn. Send") > "" Then Session("MSG") = "Meet in BGB 202" Else. If Request. Form("btn. Clear") > "" Then Session. Abandon() End If End Sub </script> • Session variable – all strings – no declaration • Abandon method <html> – deletes all <head><title></head> <body> session variables <form runat="server"> <input id="btn. Send" type="submit" value="Send" runat="server" /> <input id="btn. Clear" type="submit" value="Clear" runat="server" /> <p><a href="Display. aspx">Display</a></p> </form> </body> </html> Mark Dixon Page 12
Maintaining State: Session Object Display. aspx <script runat="server" language="VB"> Sub Page_Load() par. Msg. Inner. Text = Session("MSG") End Sub </script> • read session variable, and display in par. Msg <html> <head><title></head> <body> <p id="par. Msg" runat="server"></p> </body> </html> Mark Dixon Page 13
Example: Message • Using Session variable: Send. aspx <script runat="server" language="VB"> Sub Page_Load() If Request. Form("btn. Send") > "" Then Session("MSG") = "Meet in BGB 202" Else. If Request. Form("btn. Clear") > "" Then Session. Abandon() End If End Sub </script> MSG Meet in BGB 202 <html> <head><title></head> <body> <form runat="server"> <input id="btn. Send" type="submit" value="Send" runat="server" /> <input id="btn. Clear" type="submit" value="Clear" runat="server" /> <p><a href="Display. aspx">Display</a></p> </form> </body> </html> Mark Dixon Display. aspx <script runat="server" language="VB"> Sub Page_Load() par. Msg. Inner. Text = Session("MSG End Sub </script> <html> <head><title></head> <body> <p id="par. Msg" runat="server"></p> </body> </html> Page 14
Questions: Session Variables • Write a line of VB code to put the number 74 into a session variable called id. Session("id") = 74 • Write VB code that displays 'Hello' in par. Msg if the session variable called id is equal to 74 If Session("id") = 74 Then par. Msg. Inner. Text = "Hello" End If Mark Dixon Page 15
Example: Apples (analysis) SPECIFICATION • User Requirements – help children learn numbers 1 - 10 • Software Requirements – Functional: – display random number of apples (between 1 & 10) – ask child how many apples are there – child enters answer – computer responds appropriately – Non-functional should be easy to use, and interesting Mark Dixon Page 16
Example: Apples (code) Apples. aspx Dim n • What will this do? As Long Sub Page_Load() Dim html As String Dim a As Long If Request. Form("btn. Start") > "" Then n = 1 + Int(Rnd() * 9) html = "How many apples are there? " For a = 1 To n html = html & "<img src=Apple. gif>" Next quest. Inner. Html = html Else. If Request. Form("btn. Check") > "" Then If CInt(txt. Ans. Value) = CInt(n) Then msg. Inner. Html = "Correct, well done!" Else msg. Inner. Html = "Sorry, please try again. " End If End Sub Mark Dixon Page 17
Passing Data (temporary) • Query Strings – Useful for passing information between pages via links Mark Dixon Page 18
Maintaining State: Query Strings • Data added to end of URL (address): http: //localhost/page. asp? Surname=Bob Query String • ASP code can use this data: – Request. Query. String("Surname") • would return the value "Bob" • Form method=get – data automatically added to query string Mark Dixon Page 19
Example: Date-Time Menu. aspx <html> <head> </head> <body> <p>What background colour do you want for you date information? <a href=Date. Time. aspx? Colour=yellow>Yellow</a> <a href=Date. Time. aspx? Colour=cyan>Light Blue</a> </body> </html> Date. Time. aspx <html> <head> </head> <body bgcolor=<%=request. querystring("Colour")%>> <p>The date is <%=Format(Now(), "D")%>. <p>The time is <%=Format(Now(), "T")%>. </body> </html> Mark Dixon Page 20
Reference: Server Object Model • Request object: calling web page – Form: used to get form data from page – Query. String: used to get data from address (? ) • Response object: web page sent back – Write: used to put text into web page – Redirect: used to navigate to other page – Clear: erases all HTML in web page • Session object: store data between pages – Abandon: clears session data Mark Dixon Page 21
Passing Data (persistent) • Cookies (not covered in this module) – stored on users’ (client) hard drive – persists between sessions • Database/file (covered in later lectures) – stored on server hard drive – persists between sessions Mark Dixon Page 22
Tutorial Exercise: Message • LEARNING OBJECTIVE: pass data between pages using session variables, and (form) self-posting • Task 1: Get the message example working (from the lecture) • Task 2: Change the send. aspx page so that when you click the buttons it gives some feedback as to what has happened. hint: add a paragraph Mark Dixon Page 23
Tutorial Exercise: Apples • LEARNING OBJECTIVE: pass data between pages using session variables, and (form) self-posting • Task 1: Type in the code for the Apples example (from the lecture) • Task 2: Modify this to use a session variable to 'remember' the random number, so that it works. • Task 3: Change it so that it disables the buttons appropriately • Task 4: Change it so that it clears the text box and feedback as a new question begins Mark Dixon Page 24
Tutorial Exercise: Logon • LEARNING OBJECTIVE: pass data between pages using session variables, and (form) self-posting • Task 1: Type in the code for the Logon v 3 example (from the lecture) NOTE: this will not work properly (variables do not persist between pages) • Task 2: Modify this to use a session variable to 'remember' whether the logon was successful. Note: It should not be possible to view the source code Note: It should not be possible to bypass the logon Mark Dixon Page 25
Tutorial Exercise: Date • LEARNING OBJECTIVE: pass data between pages using query strings • Task 1: Get the Date-Time example (from the lecture) working • Task 2: Modify your page to provide another choice of background colour. Mark Dixon Page 26
- Slides: 26