[C#] ASP.NETのSession変数を無効化する

このページのタグ:[C#] [ASP.NET]
ASP.NETでセッション変数を無効にする手順を紹介します。

概要

ASP.NETではセッションIDを利用してサーバー側でセッション単位で変数を保持する機能が用意されています。セッション変数は扱いが便利な反面、同時アクセス数が増えるとサーバーのリソースを消費しパフォーマンス低下につながります。この記事ではパフォーマンスを改善するためにASP.NETのセッション変数の機能を無効化する手順を紹介します。

手順

以下のいずれかの方法を用います。

Webアプリケーション全体でセッション変数を無効にする場合

web.configファイルのSystem.Webタグ内に

<sessionState mode="Off" />
を記述します。

特定のページでセッション変数を無効にする場合

セッション変数を無効にするページのPageディレクティブに

EnableSessionState="false"
を記述します。

サンプルプログラム

UI

default.aspx

下図のUIを作成します。テキストボックスとボタンを配置します。

コードは以下になります。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="SessionVariable._default" EnableSessionState="false"  %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
      <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    </div>
    </form>
</body>
</html>

result.aspx

下図のUIを作成します。ラベルを一つ配置します。

コードは以下になります。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="result.aspx.cs" Inherits="SessionVariable.result" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </div>
    </form>
</body>
</html>

コード

以下のコードを実装します。

default.aspx.cs


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

namespace SessionVariable
{
  public partial class _default : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
      Session["value"] = TextBox1.Text;
      Response.Redirect("result.aspx");
    }
  }
}

result.aspx.cs


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

namespace SessionVariable
{
  public partial class result : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (Session["value"] != null){
        Label1.Text = (string)Session["value"];
      }
    }
  }
}

セッション変数利用の無効化

上記の実装ではまだセッション変数の機能は有効になっています。セッション変数の機能を無効にするには以下のいずれかの手順を実行します。

Web.configファイルを編集する

Webアプリ全体でセッション変数利用を無効化する場合はweb.configファイルを編集します。
web.configファイル

<?xml version="1.0" encoding="utf-8"?>

<!--
  ASP.NET アプリケーションの構成方法の詳細については、
  http://go.microsoft.com/fwlink/?LinkId=169433 を参照してください
  -->

<configuration>
    <system.web>
      <compilation debug="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" />
      <sessionState mode="Off" />
    </system.web>

</configuration>

Pageディレクティブを編集する

特定のページのみ、セッション変数利用を無効化する場合はページのPageディレクティブを編集します。
変更前

<%@ Page Language="C#" AutoEventWireup="true" 
  CodeBehind="result.aspx.cs" Inherits="SessionVariable.result" %>
変更後

<%@ Page Language="C#" AutoEventWireup="true" 
  CodeBehind="default.aspx.cs" Inherits="SessionVariable._default" 
  EnableSessionState="false"  %>

実行結果

プロジェクトを実行します。Webブラウザが起動し、下図の画面が表示されます。


テキストボックスに文字を入力し[Button]をクリックします。


セッション変数が無効になっているため、セッション変数にアクセスするコードでHttpException例外が発生します。

補足

セッション変数が有効になっており正常に動作した場合の動作はこちらの記事を参照してください。
プライバシー    iPentecについて
iPentec all rights reserverd. (ISDC)