Home > Articles > Software Development & Management

Like this article? We recommend

Sessions and State

Consider the issue of stateful vs. stateless IIS applications. When you create an IIS application, you can set the StateManagement property to wcNoState or wcRetainInstance. When you specify wcRetainInstance, the Webclass object continues to exist for the duration of the ASP session. How long is a session? ASP typically discards a session if a user has not accessed the site in 10 minutes. The idea and implementation of a session is part of Microsoft's Internet Information Server (IIS). You see, HTTP is a stateless protocol - meaning that each connection is completely independent of the next. Microsoft's IIS sends a cookie that identifies a session to the browser the first time it accesses an application. It uses this cookie to recognize who the user is during subsequent connections to the same application.

Let's say that you have a site that needs to handle 1000 users/hour and your state management is set to wcRetainInstance. Note that this is not the same thing as 1000 site hits or connections per hour. Static pages on a site do not use sessions because they are not part of your application, and each user can have multiple connections during their session. Assume that your application does not manually terminate sessions. Those 1000 users will each have a 10 minute session, meaning that your average number of concurrent sessions is 1000 / 6 = 167. That means that your server will have an average of 167 webclass objects open at all times on your site. That's a fairly large number of objects, though probably still manageable on a fast server.

What happens when you change your application to be stateless?

In this case, the webclass objects only exist during a connection. Let's assume that each user can perform two connections per minute. If we look at the typical state of the server during a one minute period, we'll see 34 connections per minute. Based on this, the average number of webclass objects that exist during any given minute will be 34.At first glance, this suggests that there is an overwhelming advantage to using a stateless approach, but this is not necessarily the case. First, creating a stateless object is more difficult than creating a stateful object because you must somehow save all of the necessary information for the object between connections. Next, overhead is involved in saving and restoring the object data during each connection.

Why then, should you consider the stateless approach?

Because the 167 object number that we came up with in the first example represents not the worst case, but a minimal number of concurrent objects that must be maintained for the conditions described in the scenario. The objects remain present even if the user does nothing for 10 minutes. But in the stateless scenario, what happens when a user takes two minutes between connections instead of 30 seconds? The average number of connections during a given minute drops less than 9! Is this realistic? Next time you purchase something on the Internet, calculate how long it takes for you to go through each page in the purchasing process. I think you'll find that two minutes is not an unusual amount of time to spend on a page. And let's face it, with today's fast machines, it doesn't take too much power to support 9 connections per minute.

How do these approaches scale at 10000 users/hour?

The stateful approach increases to managing 1670 webclass objects is quite a substantial hit. The stateless approach increases to 90.

Now consider our earlier discussion on scalability. If you can actually support 10,000 user/hour with a stateless IIS application on a single server, do you really need to consider more complex approaches? If you are developing a large scale online destination, then your number of users will be far greater and the answer is yes. But if you're a small to medium sized business with a specialty application, the added development time and the resources needed to build a larger site may be money wasted.

There is, of course, one catch to this discussion. The numbers are still hypothetical and depend greatly on the type of application you are developing.

Stateless Applications and Object Storage

The argument for going with a stateless approach is compelling, but it does impose new design challenges. You still need a way to preserve your applications state between connections. There are a number of approaches that you can use:

  • Store state information in cookies

  • Store state information in the pages

  • Store state information in an external database or data file

  • Store information in the ASP Session object

Let's look at these approaches one at a time:

Store state information in cookies

This is not a bad approach for simple information. Cookies are sent on each request, so you don't want to load the browser with large blocks of data.

Store state information in the pages

IIS Applications have the ability to dynamically generate and modify the pages that they send to the user. The URLData features allows arbitrary text to be included in the page that will be sent back with the URL during subsequent requests. One advantage of this approach is that it even works with browsers that have cookie support disabled. One disadvantage is that the amount of text you can include in a URLData line is limited.

Store state information in an external database or data file

In this approach you use a single cookie that acts as a key into a database or file. The data file contains the stored information. This approach has the advantage of allowing you to store as much data as you need without wasting bandwidth sending it back and forth as cookies. There is, however, a performance cost due to the need to access the data from an external file on each connection.

Store information in the ASP Session object

The ASP system includes a Session object in which you can store arbitrary data in named fields. There are two types of data with which to be concerned. String, numeric and binary data is easy to store and has minimal impact on system performance. You can also store objects in the Session Object. However, storing objects has two disadvantages:

  1. You lose some of the benefit that you gained by making your application stateless. Now, instead of storing the webclass object for the duration of the session, you're storing a different object.
  2. Storing objects in session variables can have a serious performance impact. If the object is apartment model threaded (as is the case with VB objects), storing an object in the Session variable locks the session to a single thread. Thus you lose the potential benefits of multithreading for that session.

You can, however, develop a combination approach thanks to Visual Basic's new support for creating self-persisting objects. Define your object to use a PropertyBag to save its state. At the end of a connection (the webclass EndRequest event), store your internal objects into a PropertyBag, and save the binary data in the Session object. During the next connection (the webclass BeginRequest event), retrieve the binary data from the Session object and store it in a PropertyBag. Then reload your objects from the PropertyBag. This approach is slightly less efficient in terms of performance (it does take time to save and load data from PropertyBags), but avoids locking the session down to a single thread. You can also combine these approaches in other ways. For example: instead of storing the object data from the PropertyBag in a Session object, you can store it in an external data file that is indexed by a cookie.

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.

Overview


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information


To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.

Surveys

Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.

Newsletters

If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information


Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.

Security


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.

Children


This site is not directed to children under the age of 13.

Marketing


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information


If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.

Choice/Opt-out


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information


Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents


California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure


Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.

Links


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact


Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice


We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020