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
<%@ 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>
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
<%@ 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>
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
<%@ 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>
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つずつ配置します。
<%@ 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
ラベルを配置します。
<%@ 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
以下のコードを記述します。
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
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