What is a Session Variable and why use it?
Whenever a user visits a website, the server assigns a new session for the user for a specific period. During this session, the server records specific information about the user till the user logs out or closes the browser.
The recorded sessions are used throughout the website (pages) until either the session is killed explicitly or it is over. Information, used in a particular session is stored using Session Variables.
Note: For every user, session data is stored separately.
E.g. Session(“mark”) = “a value”
We can assign a similar session in a Class too.
Assigning Session Design Mode (Asp.Net)
<%If Session("mark ") = “x” Then Some code here… Else And here… End If%>
Assigning Session from Code behind (C#)
protected void Form1_Load(object sender, System.EventArgs e) { if (Session("mark ") == "x") { // Some code here… } else { // And here … } }
Protected Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles frmMemberList.Load If Session("mark ") = "x" Then ' Some code here… Else ' And here… End If End Sub
The above Session is a type Variant since we have not assigned any specific type to it. What this means is any type of value can be assigned to Session("mark"). We can type-cast sessions i.e. a session variable can store values like String, Integer, Boolean and even DataSet.
Assign Session("mark") = True and while debugging check its type using Session(“mark”).GetType function.
Its fairly simple using Sessions in a web page and it can also be used in a Class. Functions written in a Class always do some thing special. Like data hidding etc. And sometimes we need to assign Session variables in our Class itself. The process is slightly different. And this is how it should written.
System.Web.HttpContext.Current.Session("mark ") = "x".
Now check this Example
We have a login page with a textbox control, which accepts the E-mail ID and a button to submit it. The E-mail ID will be verified in a Class and the employee full name will be assigned into a session variable, so the user’s name can be displayed in all other pages.
Once the employee name is extracted from the database table and assigned to a session variable, the page will be re-directed to another page (EmployeeDetails.aspx), and diplay the value stored in the session variable.
As usual for this demo we’ll use the Employee Details table.
<!DOCTYPE html> <html> <head> <title>Assign Session Value from Asp.Net Class</title> </head> <body> <form id="form1" runat="server"> <div style="font:15px Arial;"> <h4>Employee Details</h4> Enter E-mail ID: <input runat="server" id="tbEmail" type="text" maxlength="100" /> <input runat="server" id="btSubmit" type="submit" /> </div> </form> </body> </html>
using System; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { clsBusiness clsObj = new clsBusiness(); if (!string.IsNullOrEmpty(tbEmail.Value)) { // CAll A FUNCTION IN THE CLASS, FETCH AND ASSING SESSION VARIABLE. if (clsObj.GetUserDetails(tbEmail.Value) == true) { // WE HAVE FETCHED EMPLOYEE DETAILS, NOW REDIRECT TO ANOTHER PAGE. // THE REDIRECTED PAGE WILL SHOW THE FETCHED DETAILS USING VALUE FROM A SESSION VARIABLE. Response.Redirect("EmployeeDetails.aspx"); } } } }
Option Explicit On Imports System.Data ' FOR "DataTable" Imports System.Data.SqlClient Partial Class _Default Inherits System.Web.UI.Page Dim clsObj As New clsBusiness Protected Sub btSubmit_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles btSubmit.ServerClick If Trim(tbEmail.Value) <> "" Then ' CAll A FUNCTION IN THE CLASS, FETCH AND ASSING SESSION VARIABLE. If clsObj.GetUserDetails(Trim(tbEmail.Value)) = True Then ' WE HAVE FETCHED EMPLOYEE DETAILS, NOW REDIRECT TO ANOTHER PAGE. ' THE REDIRECTED PAGE WILL SHOW THE FETCHED DETAILS USING ' VALUE FROM A SESSION VARIABLE. Response.Redirect("EmployeeDetails.aspx") End If End If End Sub End Class
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Data.SqlClient; public class clsBusiness { public bool GetUserDetails(string sEmail) { // SET THE CONNECTION STRING. string sCon = "Data Source=dna;Persist Security Info=False;" + Integrated Security=SSPI;" + "Initial Catalog=DNA_CLASSIFIED;User Id=sa;Password=demo;Connect Timeout=30;"; using (SqlConnection con = new SqlConnection(sCon)) { using (SqlCommand cmd = new SqlCommand( "SELECT EmpName FROM dbo.EmployeeDetails WHERE Email = '" + sEmail.ToString() + "'")) { SqlDataAdapter sda = new SqlDataAdapter(); try { cmd.Connection = con; con.Open(); sda.SelectCommand = cmd; DataTable dt = new DataTable(); sda.Fill(dt); // ASSIGNING VALUE TO SESSION VARIABLE. System.Web.HttpContext.Current.Session["UserFullName"] = dt.Rows[0]["EmpName"]; } catch (Exception ex) { // } return true; } } } }
Option Explicit On Imports Microsoft.VisualBasic Imports System.Data ' FOR "DataTable" Imports System.Data.SqlClient Public Class clsBusiness ' CHECKS FOR THE EMPLOYEE DETAILS AND ASSIGN SESSION. Public Function GetUserDetails(ByVal sEmail As String) As Boolean ' SET THE CONNECTION STRING. Dim sCon As String = "Data Source=dna;Persist Security Info=False; & _ "Integrated Security=SSPI;" & _ "Initial Catalog=DNA_CLASSIFIED;User Id=sa;Password=demo;Connect Timeout=30;" Using con As SqlConnection = New SqlConnection(sCon) Using cmd As SqlCommand = _ New SqlCommand("SELECT EmpName FROM dbo.EmployeeDetails " & _ "WHERE Email = '" & Trim(sEmail) & "'") Dim sda As SqlDataAdapter = New SqlDataAdapter Try cmd.Connection = con : con.Open() sda.SelectCommand = cmd Dim dt As DataTable = New DataTable sda.Fill(dt) ' ASSIGNING VALUE TO SESSION VARIABLE. System.Web.HttpContext.Current.Session("UserFullName") = dt.Rows(0).Item("EmpName") Return True Catch ex As Exception ' End Try End Using End Using End Function End Class
<html> <head> <title>Showing Session Value</title> </head> <body> <form id="form1" runat="server"> <div style="font:15px Arial;"> <h4>Value Fetched From A Session Variable</h4> Employee Name: <asp:Label runat="server" ID="lblEmpName"></asp:Label> </div> </form> </body> </html>
using System;
public partial class EmployeeDetails : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
lblEmpName.Text = Session["UserFullName"].ToString(); // SHOW THE EMPLOYEE'S NAME.
}
}
Option Explicit On
Partial Class EmployeeDetails
Inherits System.Web.UI.Page
Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles form1.Load
' SHOW THE EMPLOYEE'S NAME.
lblEmpName.Text = Trim(Session("UserFullName"))
End Sub
End Class
How long with a Session Last?
By default a Session lasts for 20 minitues if there is no activity from the user on that web site. Session time can be increased or decreased from the server if required.
System.Web.HttpContext.Current.Session.Timeout = 1, in the Class.
Or
Session.Timeout = 1, in web page code behind.
Now the Session will expire after 1 minute.