Ngôn ngữ ASP.NET - Đối tượng Session

Đối tượng Session trong ASP.NET

Đối tượng Session là biến được tạo ra ở mỗi phiên làm việc của một người dùng, vậy là mỗi người đăng nhập vào sẽ có một session riêng và phiên làm việc của họ cũng có biến session riêng và được hủy khi phiên làm việc đó kết thúc và họ logout.
Session là một trong những biến quan trọng nhất trong ứng dung web, nó là riêng biệt với các đối tượng người dùng tuy nhiên biến này được tạo ra sẽ sử dụng ở tất cả mọi trang trong website và lưu vết của người dùng đó đã làm nhưng gì trên website mình.
Ví dụ: WEB bán hàng khi khách hàng chọn hàng vào giỏ ở trang chủ, và sau đó khách tham quan các trang sản phẩm khác vẫn add được hàng vào giỏ hàng đó số lượng tăng lên… và giỏ đó hủy khi bấm hủy giỏ hay thanh toán.
Bạn lưu ý rằng cũng như Cookie khi một Session được tạo ra, một trạng thái session có tên ASP.NET_SessionID được tự động thêm vào trình duyệt của bạn và Session này được lưu trữ trên web server và không lưu trữ trên webClient. Và khi bạn tắt trình duyệt đi thì Session này của bạn vẫn tồn tại trong khoảng thời gian quy định, mà ASP.NET Framework quy định thời gian mặc định của Session là 20 phút. bạn có thể thiểt lập thời gian nhiều hơn.


Như đã nói Session là biến hoạt động trên Server nên tốn bộ nhớ, Khi không có tác động từ clien để duy trì sự tồn tại của biến Session thì Session vẫn tồn tại nên rất tồn cùng như server do đó tính tự hủy khi hết time sẽ hoạt động nhờ vào một phương thức người ta gọi đó làm phương thức Abandon.

  • Biến Session
    Khi vào một website, người dùng có thể duyệt rất nhiều trang web của website đó. Nếu muốn lưu trữ thông tin về khách thăm này trong cả phiên làm việc thì có thể lưu vào các biến, gọi là biến Session. Nói cách khác, biến session là một biến mà mọi trang trong một phiên (Session) đều có thể truy xuất.
  • Đối tượng Session
    Là đối tượng dùng để quản lý (tạo, đọc, ghi) các biến sesstion và một số thông số khác.

Thuộc tính & phương thức

  • Thuộc tính Timeout
    Qui định khoảng thời gian (tính bằng phút) mà Web Server duy trì đối tượng Session nếu người dùng không gởi yêu cầu nào về lại Server. Giá trị mặc định của thuộc tính này là 20. Nếu không có yêu cầu nào kể từ lần yêu cầu sau cùng một khoảng thời gian là <Timeout> phút, đối tượng Session mà Web server cấp cho lần làm việc đó sẽ tự động được giải phóng. Những yêu cầu sau đó được Web server coi như là một người dùng mới, và đương nhiên sẽ được cấp một đối tượng Session mới.
  • phương thức Abandon
    Như các bạn đã biết, trong khoảng thời gian <Timeout> phút kể từ lần yêu cầu sau cùng của Client, đối tượng Session vẫn được duy trì dù cho không có sự tương tác nào của Client. Điều này đồng nghĩa với việc Web server phải sử dụng một vùng nhớ để duy trì đối tượng Session trong một khoảng thời gian tương ứng.
    Phương thức Abandon của đối tượng Session  sẽ giải phóng vùng nhớ được dùng  để duy trì đối tượng Session trên Web Server ngay khi được gọi thực hiện. Những yêu cầu sau đó được Web server coi như là một người dùng mới.

Sử dụng biến toàn cục với Session 

+ Cú pháp để tạo biến Session như sau:

Session.Add("Tên_Biến","Giá trị khởi tạo");

Tên biến phải đặt trong cặp dấu nháy kép. <Giá trị> có thể là xâu ký tự hoặc số...
Hoặc

 Session["Tên Biến"] = Giá trị;

 Cú pháp để đọc giá trị của một biến sesstion như sau:    

Session.Contents[“Tên_Biến”] hoặc dùng chỉ số: Session.Contents[i];

Hoặc 

 <Biến> = Session["Tên Biến"];

Ví dụ: Tạo 2 trang web: Session.aspx trang web này có hyperlink là xem session, khi trang này được gọi sẽ ghí session, trang ReadSession.aspx sẽ đọc Session được ghi từ trang Session.aspx và xuất giá trị session vừa đọc cho trình duyệt

Code trang Session.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Session.aspx.cs" Inherits="Session" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/ReadSession.aspx">Xem Session</asp:HyperLink>
    
    </div>
    </form>
</body>
</html>

Code behind Session.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Session : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Session["username"] = "Nguyễn Hữu ASP.NET";
    }
}

Code behind trang ReadSession.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class ReadSession : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("Xin chào," + Session["username"]);
    }
}

Thực thi trang Session.aspx cho kết quả:

Sau khi click vào link xem session:

Riêng với đối tượng Session, nó còn có các sự kiện. Các sự kiện này tự động được gọi mỗi khi một phiên làm việc được tạo ra. Các sự kiện này có tên là On_Start và On_End. Các sự kiện này được đặt trong file Global.asax.