Session state can be configured using the
<sessionState> section in the application's
web.config file. Hence, we
can increase the default Session timeout value to our desired value using the
following statement in the web.config file.
<sessionState
mode = <"inproc" | "sqlserver" | "stateserver">
cookieless = <"true" | "false">
timeout = <positive integer indicating the session timeout in minutes>
sqlconnectionstring = <SQL connection string that is only used in the SQLServer mode>
server = <The server name that is only required when the mode is State Server>
port = <The port number that is only required when the mode is State Server>
/>
The following section discusses each of the settings shown in Listing 1 earlier, in detail.
Mode: This setting supports three options. They are inproc, sqlserver, and stateserver.
ASP.NET supports two modes:
in process and
out of process.
There are also two options for out-of-process state management:
- Memory based (stateserver) and
- SQL Server based (sqlserver).
Cookieless: This setting takes a boolean value of either true or false to indicate whether the Session is a cookieless one.
Timeout:
This indicates the Session timeout vale in minutes. This is the
duration for which a user's session is active. Note that the session
timeout is a sliding value; on each request the timeout period is set to
the current time plus the timeout value.
SqlConnectionString: This identifies the database connection string that names the database used for mode sqlserver.
Server: In the out-of-process mode stateserver, it names the server that is running the required Windows NT service: ASPState.
Port:
This identifies the port number that corresponds to the server setting
for mode State Server. Note that a port is an unsigned integer that
uniquely identifies a process running over a network.
As Stated Earlier, Session state in ASP.NET can be stored in one of the
following three ways.
- InProc
- State Server
- SQL Server
Storing
Session State in the InProc Mode
The InProc mode of Session State
storage is the fastest among all of the storage modes available and stores the
Session data in the ASP.NET worker process. In this case, if the amount
of data that is stored in the Session is large, performance would be
drastically affected. In the InProc mode of Session state storage, the
session state is stored in the memory space of an application domain and is
volatile. In this case, the session state will be lost if the ASP.NET
worker process named aspnet_wp.exe recycles or if the application domain
restarts. The Session State here entirely depends on the lifetime of the
application domain that it runs on. Note that the Session_End event which
is fired internally by the web server is supported only in InProc mode. Note
that even if the Session State is set to read only using the EnableSessionState
attribute, in the InProc mode one can still modify the session. The
Session_OnEnd event is invoked by the runtime environment when we make a call
to the Session.Abandon() method or when the user's session times out. Further,
any change made in the settings in the web.config file unloads the application
domain and the Session State too.
Storing
Session State in a State Server
The StateServer mode uses a
stand-alone Microsoft Windows service that is independent of IIS and can run on
a separate server. In the State Server mode of Session State storage, the
session state is serialized and stored in memory in a separate process that is
managed by the aspnet_state.exe file. Note that State Server can be on a
different system. This storage mode has some performance drawbacks due to
the overhead involved in serialization and de-serialization of objects.
Note that the ASP.NET State Service is like any other NT/2000 service and
runs as its own process and has its own memory space.
The following is the required
setting in the web.config file to store the Session State in the State Server
mode.
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source= 127.0.0.1;user id= joydip; password=joydip"
cookieless="false" timeout="20"
/>
The primary advantage of storing the
Session State in a State Server is that it is not in the same process as the
ASP.NET and a crash of ASP.NET would in no way destroy the session data.
Secondly, this mode of Session State storage enables to share the information
across a web garden or a web farm.
The main disadvantage, however, is
that this mode is slow compared to the InProc mode as it is stored in an
external process.
Storing
Session State using SQL Server
The SQL Server mode of Session State
storage offers a reliable, secure and centralized storage of a session state
with transactional facilities. In this storage mode, the Session data is
serialized and stored in a database table in the SQL Server database. It
can typically be used in the web farms. In the SQL Server mode of Session
State storage, the session state is serialized and stored in the SQL Server.
It has performance bottlenecks as in the State Server mode of Session State
storage due to the overhead involved in serialization and de-serialization of
the objects that are stored and retrieved to and from the Session. SQL
Server is more secure than the InProc or the State server modes of Session
State storages as the data can be secured easily by configuring the SQL Server
security.
The InstallSqlState.sql file has to
be located in the system and executed. This would create the necessary
database and tables in the tempdb database to store the Session data. To
remove all the databases and the tables created earlier using the
InstallSqlState.sql file, the UninstallSQLState.sql file can be used. The
web.config file has to be modified accordingly. The following is the
required setting in the web.config file to store the Session State in the SQL
Server mode.
<sessionState
mode="SQLServer"
sqlConnectionString="data source=server;user id=joydip;
password=joydip"
cookieless="false" timeout="20"
/>