Session Management in ASP.NET

advertisement
Session Management
in ASP.NET
IT533 Lectures
Session Tracking
Personalization
 Personalization makes it possible for e-businesses to
communicate effectively with their customers.
 Online shopping sites often store personal information for
customers, tailoring notifications and special offers to their
interests.
Privacy
 A trade-off exists, however, between personalized e-business
service and protection of privacy.
 Some consumers fear the possible adverse consequences if
the info they provide to e-businesses is released or collected
by tracking technologies.
2
Session Tracking
Recognizing Clients
 To provide personalized services to consumers, e-businesses
must be able to recognize clients when they request
information from a site.
 HTTP is a stateless protocol—it does not support persistent
connections that would enable web servers to maintain state
information between requests.
 Tracking individual clients, known as session tracking, can be
achieved in a number of ways.
 Using cookies.
 Using ASP.NET’s HttpSessionState object.
 Using “hidden” form elements.
 Embedding session-tracking information directly in URLs.
3
Session Tracking - Cookies
 Cookies are pieces of data stored in a small text file on the user’s




4
computer.
A cookie maintains information about the client during and
between browser sessions.
Every HTTP-based interaction between a client and a server
includes a header containing information about the request or
response.
When a web server receives a request, the header includes any
cookies that have been stored on the client machine by that
server.
When the server formulates its response, the header contains
any cookies the server wants to store on the client computer.
Session Tracking - Cookies
 The expiration date of a cookie determines how long the





cookie remains on the client’s computer.
If no expiration date is set, web browser maintains the cookie
for the duration of the browsing session.
Otherwise, the web browser maintains the cookie until the
expiration date occurs.
Cookies are deleted when they expire.
Most browsers allow 20 cookies per server.
The size of a cookie is not more than 4096 bytes or 4 KB.
Portability Tip
Users may disable cookies in their web browsers to help ensure their
privacy. Such users will experience difficulty using web applications that
depend on cookies to maintain state information.
5
Example using Cookies
 Create Options.aspx file with:
1.
2.
3.
4.
5.
A Label "Select a programming language:"
5 radio buttons with the values Visual Basic 2008, Visual C#
2008, C, C++, and Java.
A Submit button
A Hyperlink that navigates to "~/Options.aspx“
A Hyperlink that navigates to "~/Recommendations.aspx“
Writing Cookies in a Code-Behind File
• The code-behind file for Options.aspx.
Outline
Options.aspx.cs
(1 of 3 )
1
2
3
4
5
6
7
8
// Options.aspx.cs
// Processes user's selection of a programming language by displaying
// links and writing a cookie to the user's machine.
using System;
using System.Web;
using System.Collections.Generic;
public partial class Options : System.Web.UI.Page
9 {
10
11
12
13
private Dictionary< string, string > books =
new Dictionary< string, string >();
14
15
16
17
// initializes the Dictionary when the Page initializes
protected void Page_Init( object sender, EventArgs e )
{
books.Add( "Visual Basic 2008", "0-13-606305-X" );
18
7
// stores values to represent books as cookies
books.Add( "Visual C# 2008", "0-13-605322-X" );
Figure. | Code-behind file that writes a cookie to
the client. (Part 1 of 3.)
For adding new entries,
class Dictionary
provides method Add,
which takes a key and a
value as arguments.
Outline
19
books.Add( "C", "0-13-240416-8" );
20
21
books.Add( "C++", "0-13-615250-3" );
books.Add( "Java", "0-13-222220-5" );
(2 of 3 )
22
23
} // end method Page_Init
24
// hide and display links to make additional selections or view
25
// recommendations, and write a cookie to record the user's selection
26
27
28
29
// when the form is submitted
protected void submitButton_Click ( object sender, EventArgs e )
{
// display appropriate message and hyperlinks
For
30
31
32
33
34
responseLabel.Visible = true;
languageLink.Visible = true;
recommendationsLink.Visible = true;
35
36
37
38
promptLabel.Visible = false;
languageList.Visible = false;
submitButton.Visible = false;
// hide controls for selecting a language
Fig. | Code-behind file that writes a cookie to
the client. (Part 2 of 3.)
8
Options.aspx.cs
adding new
entries, class
Dictionary
provides method
Add, which takes a
key and a value as
arguments.
Outline
39
40
// if the user made a selection
if ( languageList.SelectedItem != null )
Options.aspx.cs
41
42
43
44
45
46
{
(3 of 3 )
// get value of user's selection
string language = languageList.SelectedItem.Value;
string ISBN = books[ language ]; // get ISBN for given language
47
48
49
// create cookie using language-ISBN name-value pair
HttpCookie cookie = new HttpCookie( language, ISBN );
50
51
// add cookie to response to place it on the user's machine
Response.Cookies.Add( cookie );
52
53
54
55
// display user's selection in responseLabel
responseLabel.Text += " You selected " + language + ".";
} // end if
56
else
57
{
58
// inform user that no selection was made
59
responseLabel.Text += " You didn't make a selection.";
60
} // end else
61
} // end method submitButton_Click
62 } // end class Options
9
Fig. | Code-behind file that writes a cookie to
the client. (Part 3 of 3.)
Create an
HttpCookie
object, passing a
name and a value
as arguments.
Add the
HttpCookie to
the Cookies
collection sent as
part of the HTTP
response header.
Session Tracking
 This code writes a cookie to the client machine when the
user selects a programming language.
 A Dictionary is a data structure that stores key/value
pairs.
 For adding new entries, class Dictionary provides
method Add, which takes a key and a value as
arguments.
 The expression dictionaryName[ keyName ] returns the
value corresponding to key keyName.
 Create an HttpCookie object, passing a name and a value
as arguments.
 Add the HttpCookie to the Cookies collection sent as
part of the HTTP response header.
10
Example using Cookies
Create Recommendations.aspx file with:

Add a Label “Recommendations“
2. Add a Listbox
3. Add a Hyperlink that goes back to Options.aspx.
1.
Outline
Code-Behind File That Creates Book Recommendations
From Cookies
Recommendations
.aspx.cs
(1 of 2 )
1 // Recommendations.aspx.cs
2 // Creates book recommendations based on cookies.
3 using System;
4 using System.f;
5
6 public partial class Recommendations : System.Web.UI.Page
7 {
8
// read cookies and populate ListBox with any book recommendations
9
10
protected void Page_Init(object sender, EventArgs e)
{
11
12
// retrieve client's cookies
HttpCookieCollection cookies = Request.Cookies;
13
12
Retrieve the cookies from
the client using the
Request object’s
Cookies property.
Fig. | Reading cookies from a client to determine book
recommendations. (Part 1 of 2.)
17
18
19
Outline
// if there are cookies, list the appropriate books and ISBNs
if ( cookies.Count > 0 )
Recommendations
{
.aspx.cs
for ( int i = 0; i < cookies.Count; i++ )
(2 of 2 )
booksListBox.Items.Add( cookies[ i ].Name +
" How to Program. ISBN: " + cookies[ i ].Value );
20
} // end if
21
22
else
{
14
15
16
23
24
25
26
27
28
Use the Name and
Value properties of an
HttpCookie to
// if there are no cookies, then no language was chosen, so
access its data.
// display appropriate message and clear and hide booksListBox
recommendationsLabel.Text = "No Recommendations";
booksListBox.Visible = false;
// modify languageLink because no language was selected
29
languageLink.Text = "Click here to choose a language.";
30
} // end else
31
} // end method Page_Init
32 } // end class Recommendations
Fig.
13
|
Reading cookies from a client to determine book
recommendations. (Part 2 of 2.)
Session Tracking
 Retrieve the cookies from the client using the
Request object’s Cookies property.
 This returns an HttpCookieCollection
containing cookies that were previously written
to the client.
 Cookies can be read by an application only if they
were created in the domain in which the application
is running.
 Use the Name and Value properties of an
HttpCookie to access its data.
14
Session Tracking
 Some commonly used HttpCookie properties:
15
Properties
Description
Domain
Returns a string containing the cookie’s domain (i.e., the
domain of the web server running the application that wrote
the cookie). This determines which web servers can receive
the cookie. By default, cookies are sent to the web server that
originally sent the cookie. Changing the Domain property
causes the cookie to be returned to a web server other than the
one that originally wrote it.
Expires
Returns a DateTime object indicating when the browser can
delete the cookie. You can delete a cookie by setting this
property to be a DateTime in the past.
Fig. | HttpCookie properties. (Part 1 of 2.)
Session Tracking
16
Properties
Description
Name
Returns a string containing the cookie’s name.
Path
Returns a string containing the path to a directory on the
server (i.e., the Domain) to which the cookie applies. Cookies
can be “targeted” to specific directories on the web server. By
default, a cookie is returned only to applications operating in
the same directory as the application that sent the cookie or a
subdirectory of that directory. Changing the Path property
causes the cookie to be returned to a directory other than the
one from which it was originally written.
Secure
Returns a bool value indicating whether the cookie should be
transmitted through a secure protocol. The value true causes
a secure protocol to be used.
Value
Returns a string containing the cookie’s value.
Fig. | HttpCookie properties. (Part 2 of 2.)
Session
 What is a session?
 Context in which a user communicates with a server over multiple
HTTP requests
 Within the scope of an ASP.NET Application
 HTTP is a stateless, sessionless protocol
 ASP.NET adds the concept of “session”
 Session identifier: 120 bit ASCII string
 Session variables: store data across multiple requests
Example for Session
 Let’s modify the Cookies example to use Session
 Use HttpSessionState instead of Cookies
Outline
a)
b)
Options.aspx
c)
19
d)
Session Tracking
 We keep the EnableSessionState property’s default





20
setting—True.
Every Web Form includes an HttpSessionState object,
which is accessible through property Session of class Page.
When the web page is requested, an HttpSessionState
object is created and assigned to the Page’s Session
property.
A distinct HttpSessionState resides on the server,
whereas a cookie is stored on the user’s client.
Like a cookie, an HttpSessionState object can store
name/value pairs.
The name/value pairs stored in a Session object are often
referred to as session items.
Outline
Adding Session Items
1
// Options.aspx.cs
2
3
// Processes user's selection of a programming language by displaying
// links and writing information in a Session object.
4
5
6
using System;
using System.Collections.Generic;
7
8
9
public partial class Options : System.Web.UI.Page
{
// stores values to represent books
10
11
private Dictionary< string, string > books =
new Dictionary< string, string >();
Options.aspx.cs
(1 of 3 )
12
13
14
15
// initializes the Dictionary when the Page initializes
protected void Page_Init( object sender, EventArgs e )
{
16
books.Add( "Visual Basic 2008", "0-13-606305-X" );
17
books.Add( "Visual C# 2008", "0-13-605322-X" );
18
19
20
21
21
books.Add( "C", "0-13-240416-8" );
books.Add( "C++", "0-13-615250-3" );
books.Add( "Java", "0-13-222220-5" );
} // end method Page_Init
Fig. | Creates a session item for each programming language
selected by the user on the ASPX page. (Part 1 of 3.)
22
23
24
// hide and display links to make additional selections or view
// recommendations, and record the user's selection in the Session
25
26
27
28
29
// when the form is submitted
protected void submitButton_Click ( object sender, EventArgs e )
{
// display appropriate message and hyperlinks
responseLabel.Visible = true;
30
idLabel.Visible = true;
31
32
33
34
35
36
timeoutLabel.Visible = true;
languageLink.Visible = true;
recommendationsLink.Visible = true;
37
38
39
40
41
42
languageList.Visible = false;
submitButton.Visible = false;
Outline
Options.aspx.cs
(2 of 3 )
// hide controls for selecting a language
promptLabel.Visible = false;
// if the user made a selection
if ( languageList.SelectedItem != null )
{
Fig. | Creates a session item for each programming language
selected by the user on the ASPX page. (Part 2 of 3.)
22
Outline
43
// get value of user's selection
44
45
string language = languageList.SelectedItem.Value;
46
string ISBN = books[ language ]; // get ISBN for given language
Options.aspx.cs
(3 of 3 )
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Session.Add( language, ISBN ); // add name/value pair to Session
Call Add to place a
session item in the
responseLabel.Text += " You selected " + language + ".";
HttpSessionState
} // end if
object.
// display user's selection in responseLabel
else
{
Property
SessionID contains
// inform user that no selection was made
responseLabel.Text += " You didn't make a selection."; the unique session
ID, which identifies
} // end else
each unique client.
idLabel.Text = "Your unique session ID is: " + Session.SessionID +
"."; // display session ID
62
// display amount of time before session times out
63
timeoutLabel.Text = "Timeout: " + Session.Timeout + " minutes.";
64
} // end method submitButton_Click
Property Timeout
65 } // end class Options
specifies the amount of
23
Fig. | Creates a session item for each programming language
selected by the user on the ASPX page. (Part 3 of 3.)
time that an
HttpSessionState
object can be inactive
before it is discarded.
Session Tracking
 Call Add to place a session item in the
HttpSessionState object.
 If you add an attribute that has the same name as an
attribute previously stored in a session, the object
associated with that attribute is replaced.
 Another common syntax for placing a session item in
the HttpSessionState object is
Session[ name ] = value.
24
Session Tracking
 Property SessionID contains the unique session
ID, which identifies each unique client.
 Property Timeout specifies the amount of time that
an HttpSessionState object can be inactive
before it is discarded.
 By default, a session times out after twenty minutes.
25
Session Identifier
 By default, session id is stored in a cookie
 Can optionally track session id in URL
 Requires no code changes to app
 All relative links continue to work
<configuration>
<sessionstate cookieless=“true”/>
</configuration>
Session Tracking
 Some common HttpSessionState properties:
27
Properties
Description
Count
Specifies the number of key/value pairs in the Session object.
IsNewSession
Indicates whether this is a new session (i.e., whether the session
was created during loading of this page).
IsReadOnly
Indicates whether the Session object is read-only.
Keys
Returns a collection containing the Session object’s keys.
SessionID
Returns the session’s unique ID.
Timeout
Specifies the maximum number of minutes during which a
session can be inactive (i.e., no requests are made) before the
session expires. By default, this property is set to 20 minutes.
Code-Behind File That Creates Book
Recommendations from a Session
1
// Recommendations.aspx.cs
2
3
4
// Creates book recommendations based on a Session object.
using System;
5
6
public partial class Recommendations : System.Web.UI.Page
{
7
8
9
10
11
12
13
14
15
16
Outline
Recommendations
.aspx.cs
(1 of 2 )
Use the Session
object’s Count
// read Session items and populate ListBox with recommendations property to
protected void Page_Init(object sender, EventArgs e)
determine if the
{
user has selected
// if there are Session items, list the appropriate books and
ISBNs
any
languages.
if ( Session.Count > 0 )
{
The Keys property
foreach ( string keyName in Session.Keys )
of class
{
HttpSessionSta
// use current key to display one of the session’s te returns a
// name/value pairs
collection containing
all the keys in the
session.
Fig. | Session data used to provide book recommendations
to the user. (Part 1 of 2.)
28
Outline
17
18
19
20
21
22
booksListBox.Items.Add( keyName + " How to Program. ISBN: " +
Session[ keyName ] );
} // end foreach
} // end if
else
{
23
24
// if there are no items, then no language was chosen, so
// display appropriate message and clear and hide booksListBox
25
26
27
28
recommendationsLabel.Text = "No Recommendations";
booksListBox.Visible = false;
29
30
// modify languageLink because no language was selected
languageLink.Text = "Click here to choose a language.";
} // end else
31
} // end method Page_Init
32 } // end class Recommendations
Fig. | Session data used to provide book recommendations
to the user. (Part 2 of 2.)
29
Recommendations
.aspx.cs
(2 of 2 )
The value in a
key/value pair is
retrieved from the
Session object
by indexing the
Session object
with the key name.
Session Tracking
 The Keys property of class HttpSessionState
returns a collection containing all the keys in the
session.
 The value in a key/value pair is retrieved from the
Session object by indexing the Session object
with the key name.
30
Session Variables
 ASP stores session state in IIS process
 State is lost if IIS crashes
 Can’t use session state across machines
 ASP.NET stores session state:
 In another process: ASP State NT service
 In SQL Server database
Session Variables
 “Live” objects are not stored in session state
 Instead, ASP.NET serializes objects out between requests
 ASP.NET approach provides:
 Ability to recover from application crashes
 Ability to recover from IIS crash/restart
 Can partition an application across multiple processes
(called a Web Garden)
 Can partition an application across multiple machines
(called a Web Farm)
Download