ASPについてNETにおけるSession実現の原理

11603 ワード

Sessionは実はサーバーの端で保存して、ユーザーの個人情報の1つの小さい容器について、サーバーの端のメモリの中で1段の情報を保存したことに相当して、しかしこの情報は大きすぎるべきでなくて、さもなくばクライアントのアクセスが比較的に多い時サーバーのメモリが不足することをもたらします!各ユーザがサービス側にアクセスすると、サービス側はセッションIDを作成し、このセッションIDをクライアントがブラウザに保存しているクッキーに返します.クライアントが再びサービスを要求すると、サーバは、クライアントから送信されたセッションIDに基づいて、このブラウザのユーザに対応するセッション情報に関連付けられる.
1.まず、SessionManagementクラスを作成して、Sessionを管理します.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
///SessionManage
/// </summary>
public class SessionManage
{
private static IDictionary<string, IDictionary<string, object>> data = new Dictionary<string, IDictionary<string, object>>();

public static IDictionary<string, object> GetSessionByID(string sessionID)
{
// sessionID, session, session( ), 。
//sessionID session 。
if (data.ContainsKey(sessionID))
{
return data[sessionID];
}
else
{
IDictionary<string, object> session = new Dictionary<string, object>();
data[sessionID] = session;// SessionID Dictionary。
return session;
}
}
}

SessionTestを作成します.aspx、カスタムフォーム要素:
2.次にユーザがアクセスするときにセッションIDを生成し、セッション空間を作成し、実際にはサーバ側のメモリにセッションIDに対応するセッションを格納する空間を割り当てる.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SessionTest.aspx.cs" Inherits="SessionTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblMsg" runat="server"></asp:Label>
<br />
<asp:Button ID="btnSetSession" runat="server" Text=" Session"
onclick="btnSetSession_Click" />
<asp:Button ID="btnReadSession" runat="server" Text=" Session"
onclick="btnReadSession_Click" />
</div>
</form>
</body>
</html>

3.SessionTest.aspx.csでsessionを設定および読み込み:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class SessionTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//
if (!Page.IsPostBack)
{
// mySessionID, sessionID, 。
if (Request.Cookies["mySessionID"] == null)
{
string sessionID= Guid.NewGuid().ToString();// Guid.NewGuid() session
Response.SetCookie(new HttpCookie("mySessionID", sessionID));
}
}
}
// session
protected void btnSetSession_Click(object sender, EventArgs e)
{
string sessionID = Request.Cookies["mySessionID"].Value;// sessionID
IDictionary<string,object> session = SessionManage.GetSessionByID(sessionID); // session , session( )
// session
session[" "] = " ";
session[" "] = DateTime.Now.ToString();
}
// session
protected void btnReadSession_Click(object sender, EventArgs e)
{
string sessionID = Request.Cookies["mySessionID"].Value;// sessionID
IDictionary<string,object> session = SessionManage.GetSessionByID(sessionID); // session , session( )
// session
this.lblMsg.Text = session[" "].ToString() + session[" "].ToString();
}
}