HOWTO: Persisting Values Without Sessions

Last reviewed: February 19, 1998
Article ID: Q175167
The information in this article applies to:
  • Microsoft Active Server Pages, versions 1.0, 1.0b
  • Microsoft Visual Studio versions 97, 97sp1, 97sp2, 97sp3

SUMMARY

When developing Web sites with HTML forms you may need to keep track of information entered by a user for use at a later time. This process is called persisting values.

Active Server Pages (ASP) provides Session variables to facilitate this; however, these require the use of session IDs. This article describes methods of storing form values without using session cookies.

MORE INFORMATION

Three methods are commonly used to persist values when developing in HTML:

Store the Values in Hidden Form Fields

Storing the values in hidden fields keeps the values out of sight, but intact. A user submits a form, the form values are read and immediately written back out again into an HTML hidden form field. This way, they get carried along with the other fields when that form is submitted.

An example of this can be seen with the following three pages:

   <%@ LANGUAGE="VBSCRIPT" %>
   <!-- This is FORM1.HTM -->
      <HTML>
      <HEAD><TITLE>FORM1.HTM</TITLE></HEAD>
      <BODY>
      <Form Action=Form2.asp Method=Post>
         <Input Type=Text Value="Page1 Value" Name="Value1"><P>

         <Input Type=Submit Name=btnSubmit>
      </Form>
      </BODY>
      </HTML>

      <!-- This is FORM2.ASP -->
        <%@ LANGUAGE="VBSCRIPT" %>
        <%
        Response.Cookies("Value1") = Request("Value1")
        ' If you wish to have the value persisted beyond the current visit,
        ' you must also assign an expiration date as follows:
        Response.Cookies("Value1").Expires = "July 31, 1998"
        %>
        <HTML>
        <HEAD><TITLE>FORM2.ASP</TITLE></HEAD>
        <BODY>
        <Form Action=Form3.asp Method=Post>
          <Input Type=Text Value="Page2 Value" Name="Value2"><P>
          <Input Type=Submit Name=btnSubmit>
        </Form>
        </BODY>
        </HTML>

   <!-- This is FORM3.ASP -->
      <%@ LANGUAGE="VBSCRIPT" %>
      <HTML>
      <HEAD><TITLE>FORM3.ASP</TITLE></HEAD>
      <BODY>
      Value 1 = <%= Request("Value1") %><BR>
      Value 2 = <%= Request("Value2") %><BR>
      </BODY>
      </HTML>

Append the Values to the URL

This technique is very similar to the first method, but instead of passing the values in hidden variables, the values are appended to the end of the URL and submitted. The disadvantage of this technique is imposed by the size limitations on a URL, which can vary from browser to browser. Additionally, any information, private or otherwise, will be readily visible to the user. The following pages demonstrate this technique:

   <!-- This is FORM1.HTM -->
      <%@ LANGUAGE="VBSCRIPT" %>
      <HTML>
      <HEAD><TITLE>FORM1.HTM</TITLE></HEAD>
      <BODY>
      <Form Action=Form2.asp Method=Post>
         <Input Type=Text Value="Page1 Value" Name="Value1"><P>

         <Input Type=Submit Name=btnSubmit>
      </Form>
      </BODY>
      </HTML>

   <!-- This is FORM2.ASP -->
      <%@ LANGUAGE="VBSCRIPT" %>
      <HTML>
      <HEAD><TITLE>FORM2.ASP</TITLE></HEAD>
      <BODY>

      <Form Action="Form3.asp?value1=<%=
       Server.URLEncode(Request("Value1"))
       %>" Method=Post>
         <Input Type=Text Value="Page2 Value" Name="Value2"><P>

         <Input Type=Submit Name=btnSubmit>
      </Form>
      </BODY>
      </HTML>

   <!-- This is FORM3.ASP -->
      <%@ LANGUAGE="VBSCRIPT" %>
      <HTML>
      <HEAD><TITLE>FORM3.ASP</TITLE></HEAD>
      <BODY>
      Value 1 = <%= Request("Value1") %><BR>
      Value 2 = <%= Request("Value2") %><BR>
      </BODY>
      </HTML>

Writing Your Own Cookie

This method is least commonly used because it requires that information be written back to the client machine. The only reason to use this method over normal Session based variable is to retain information for a later visit by the browser. This alleviates your need to keep the information on the Web server:

   <!-- This is FORM1.HTM -->
      <%@ LANGUAGE="VBSCRIPT" %>
      <HTML>
      <HEAD><TITLE>FORM1.HTM</TITLE></HEAD>
      <BODY>
      <Form Action=Form2.asp Method=Post>
         <Input Type=Text Value="Page1 Value" Name="Value1"><P>
         <Input Type=Submit Name=btnSubmit>
      </Form>
      </BODY>
      </HTML>

   <!-- This is FORM2.ASP -->
      <%@ LANGUAGE="VBSCRIPT" %>
      <% Response.Cookies("Value1") = Request("Value1") %>
      <HTML>
      <HEAD><TITLE>FORM2.ASP</TITLE></HEAD>
      <BODY>
      <Form Action=Form3.asp Method=Post>
         <Input Type=Text Value="Page2 Value" Name="Value2"><P>
         <Input Type=Submit Name=btnSubmit>
      </Form>
      </BODY>
      </HTML>

   <!-- This is FORM3.ASP -->
      <%@ LANGUAGE="VBSCRIPT" %>
      <HTML>
      <HEAD><TITLE>FORM3.ASP</TITLE></HEAD>
      <BODY>
      Value 1 = <%= Request.Cookies("Value1") %><BR>
      Value 2 = <%= Request("Value2") %><BR>
      </BODY>
      </HTML>

REFERENCES

For the latest Knowledge Base artices and other support information on Visual InterDev and Active Server Pages, see the following page on the Microsoft Technical Support site:

   http://support.microsoft.com/support/vinterdev/

(c) Microsoft Corporation 1997, All Rights Reserved. Contributions by Paul Enfield, Microsoft Corporation

Keywords          : AXSFHTML AXSFMisc
Technology        : kbInetDev
Version           : WINNT:1.0,1.0b,97,97sp1,97sp2,97sp3
Platform          : winnt
Issue type        : kbhowto


================================================================================


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: February 19, 1998
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.