Cookieの読み込みと書き込み、Cookieのクリア - ASP.NET

ASP.NETでCookieの読み込み、書き込みのコードを紹介します。

概要

Cookieに値を書き込む場合は HttpResponseオブジェクトの Cookiesオブジェクトにアクセスしてvalueプロパティに値を書き込みます。Valueプロパティはstring型として定義されているため、書き込む値はstring型に変換する必要があります。

Cookieへの書き込み

書式

(HttpResponse).Cookies["(書き込みCookieの名前)"].Value = "(書き込む値)"

記述例

 Response.Cookies["kind"] = "Candy";

Cookieの読み込み

書式

(HttpRequest).Cookies["(読み込みCookieの名前)"].Value;

記述例

 string value = Response.Cookies["kind"];

Cookieの消去

直接Cookieを消去することはできないため、空文字を代入するか、Cookieの有効期限を過去に設定する方法があります。以下のサンプルプログラムを参照して下さい。

コード例

以下のコードはCookieのMyValueに"Penguin"という値を書き込み、AccessDateTimeに現在の時刻を書き込みます。MyValueの書き込み内容は1日で期限切れにします。
protected void Page_Load(object sender, EventArgs e)
{
  //Cookieへの値の書き込み
  Response.Cookies["MyValue"].Value = "Penguin";
  Response.Cookies["MyValue"].Expires = DateTime.Now.AddDays(1.0);
  Response.Cookies["AccessDateTime"].Value = DateTime.Now.ToString();
}

サンプルプログラム1

UI・コード

以下の3つのWebフォームを作成します。

CookieWrite

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

<!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>
    <div>サーバーによって"name=しろくま" "value=350"をCookieに書きこみました。</div>
    </div>
    </form>
</body>
</html>
CookieWrite.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace AspNetCookie
{
  public partial class CookieWrite : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      Response.Cookies["name"].Value = HttpUtility.UrlEncode("ABCしろくま");
      Response.Cookies["name"].Expires = DateTime.Now.AddMinutes(60);
      Response.Cookies["value"].Value = "350";
      Response.Cookies["value"].Expires = DateTime.Now.AddMinutes(60);

    }
  }
}

解説

Response.Cookies["(キー名)"].Value
に代入することでCookieに値を設定します。また、
Response.Cookies["name"].Expires
に値を設定することでCookieの有効期限を設定します。上記のコードではCookieの有効期限を値設定時から60分にしています。
また、値に2バイト文字(日本語)を設定する場合はURLエンコードした値をCookieに保存します。

CookieView

CookieView.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CookieView.aspx.cs" Inherits="AspNetCookie.ViewCookie" %>

<!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>
      <div>name:<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
      <div>value:<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></div>
    </div>
    </form>
</body>
</html>
CookieView.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace AspNetCookie
{
  public partial class ViewCookie : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      string namestr = "";
      string valuestr = "";

      if (Request.Cookies["name"] != null) {
        namestr = HttpUtility.UrlDecode(Request.Cookies["name"].Value);
      }
      if (Request.Cookies["value"] != null) {
        valuestr = Request.Cookies["value"].Value;
      }

      Label1.Text = namestr;
      Label2.Text = valuestr;

    }
  }
}

解説

Request.Cookies["(キー名)"].Value
にて、Cookieに設定された値を取り出します。Cookieが設定されていない場合は Request.Cookies["(キー名)"] がnullになるため、値を取り出す前にキーが存在しているかを下記のコードで確認をします。
if (Request.Cookies["name"] != null) {
  ...(Cookie値へのアクセス)
}

また、値に2バイト文字列(日本語)が入る場合は値をURLエンコードする必要があるため値の取り出し時にURLデコードを実行します。詳しくはこちらの記事を参照してください。

CookieClear

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

<!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>
      Cookieをクリアしました。
    </div>
    </form>
</body>
</html>
CookieClear.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace AspNetCookie
{
  public partial class CookieClear : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (Request.Cookies["name"] != null) {
        HttpCookie myCookie = new HttpCookie("name");
        myCookie.Expires = DateTime.Now.AddDays(-1d);
        Response.Cookies.Add(myCookie);
      }
      if (Request.Cookies["value"] != null) {
        HttpCookie myCookie = new HttpCookie("value");
        myCookie.Expires = DateTime.Now.AddDays(-1d);
        Response.Cookies.Add(myCookie);
      }
    }
  }
}

解説

Cookieにキーがあるかを確認し、キーが存在する場合は、Cookieの有効期限を過去に設定します。
上記のコードでは有効期限を1日前に設定しています。

実行結果

プロジェクトを実行し、CookieView.aspxを表示します。下図の画面が表示されます。


続いてCookieWrite.apsxを表示します。Cookieに値が設定された旨の画面が表示されます。


再度、CookieView.aspxを表示します。キャッシュが表示されるため、リロードします。下図の画面が表示されます。Cookieに設定された値が表示されます。


続いてCookieClear.apsxを表示します。Cookieの値がクリアされた旨の画面が表示されます。


CookieView.aspxを表示します。キャッシュが表示されるため、リロードします。値がクリアされたことが確認できます。

サンプルプログラム2

UI

以下のUIを作成します。

default.aspx

テキストボックスとボタンを1つずつ配置します。

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

<!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

ラベルを配置します。

result.aspx
<%@ Page Language="C#" AutoEventWireup="true" 
  CodeBehind="result.aspx.cs" Inherits="SimpleCookie.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

以下のコードを記述します。
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 SimpleCookie
{
  public partial class _default : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
      string dataStr= HttpUtility.UrlEncode(TextBox1.Text);
      Response.Cookies["data"]["value"] = dataStr;
      Response.Cookies["data"].Expires = DateTime.Now.AddMinutes(3);

      /*
      //こちらのコードでも可
       string dataStr= HttpUtility.UrlEncode(TextBox1.Text);
      HttpCookie hc = new HttpCookie("data");
      hc["value"] = dataStr;
      hc.Expires = DateTime.Now.AddMinutes(3);
      Response.Cookies.Add(hc);
      */

      Response.Redirect("result.aspx");

    }
  }
}

解説

  string dataStr= HttpUtility.UrlEncode(TextBox1.Text);
テキストボックスに入力された文字列をURLエンコードします。Cookieに文字列を設定した時にShift-JISにエンコードされてしまうのを防ぐためです。

  Response.Cookies["data"]["value"] = dataStr;
  Response.Cookies["data"].Expires = DateTime.Now.AddMinutes(3);
URLエンコードした文字列をCookieの"data"キーの"value"サブキーに設定します。また、"data"キーのCookieの有効期限を3分後に設定します。

  Response.Redirect("result.aspx");
result.aspxページに遷移します。

コード: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 SimpleCookie
{
  public partial class result : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      /*
      //こちらのコードでも可
      if (Request.Cookies["data"] != null) {
        Label1.Text = Request.Cookies["data"]["value"];
      }*/

      if (Request.Cookies["data"] != null) {
        HttpCookie hc = Request.Cookies["data"];
        string dataStr = hc["value"];
        Label1.Text = HttpUtility.UrlDecode(dataStr);
      }
    }
  }
}

解説

if (Request.Cookies["data"] != null) {
  HttpCookie hc = Request.Cookies["data"];
  string dataStr = hc["value"];
  Label1.Text = HttpUtility.UrlDecode(dataStr);
}
Cookieのキーに割り当てられているオブジェクトがない場合、値はnullになるため、Cookies["data"]のnullチェックを事前にします。nullでなければ値が格納されている可能性があるため、HttpCookieの"value"サブキーの値を読み出します。
読み出した値をURLでコードし、Label1に表示します。

実行結果

プロジェクトを実行します。下図の画面が表示されます。


テキストボックスに文字列を入力します。今回は"しろくま"を入力しました。入力後[Button]をクリックします。


result.aspxに画面が切り替わり、テキストボックスに入力した文字列が画面に表示されます。


上記の方法を用いることでページ間で値の受け渡しができます。

このページのキーワード
  • ASP.NET Cookie 読み込み
  • ASP.NET Cookie 書き込み
  • ASP.NET Cookie クリア
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2021-09-30
作成日: 2013-05-31
iPentec all rights reserverd.