- PR -

cscでのコンパイルでResponse.Cookiesを使いたい

1
投稿者投稿内容
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-11-20 15:36
どもです。最近.NETで色々試行錯誤中のがるです。
# そのうちまとめます(笑

んっと。今日もまた若干「面倒なのだろうか?」というネタで恐縮
なのですが。
やりたいのは以下のような内容です。
・クッキーの読み込みを共通化したいので
 foo.csファイルを作って
 適当なクラスを作って
 適当なメソッド内でCookieを読み込み
・foo.csファイルをcscでコンパイルしてfoo.dllを作成
・dllを使う

ということをやりたいのですが。
どうしてもコンパイルエラーから抜け出せず、ちと悩んでおります。
多分、スタンダードだと思われる
HttpCookie cookie = Response.Cookies[なまえ];
で扱おうとしているのですが、コンパイルすると

型、または名前空間'Response'が見つかりませんでした。ディレクティブを使うかアセンブリ参照を使ってください

と出てしまいます。
なんとなく「Responseの実態がないからなんだろうなぁ」とか
予想はしてみるのですが…それ以降がどうも手詰まりで。
Cookieを読めれば方法やクラス/メソッドにはさほどこだわりはないの
ですが。

Cookieの読み込みを「DLL化して」やっている方がいらっしゃったら、
是非お知恵を拝借したく。
よろしくお願いいたします。

…もし「どーしても無理」そうなら…いっそ環境変数の読み込みと
ヘッダの自力での出力で…とか、かなり力技な事も考えては
いるのですが(苦笑






ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-11-22 08:47
引用:

がるがるさんの書き込み (2004-11-20 15:36) より:

・クッキーの読み込みを共通化したいので
 foo.csファイルを作って
 適当なクラスを作って
 適当なメソッド内でCookieを読み込み


・・・(中略)・・・
引用:

HttpCookie cookie = Response.Cookies[なまえ];
で扱おうとしているのですが、コンパイルすると

型、または名前空間'Response'が見つかりませんでした。ディレクティブを使うかアセンブリ参照を使ってください

と出てしまいます。
なんとなく「Responseの実態がないからなんだろうなぁ」とか
予想はしてみるのですが…それ以降がどうも手詰まりで。


そのクラスが Response というメンバを持っていないから、でしょう。
Webフォームとかで Response が使えるのは、Response というメンバを持つ System.Web.UI.Page を継承したクラスだからですし。
(でもPageクラスはあくまでもWebフォームのコード記述用であって共通クラス向きでないですから、今回のケースではNGでしょう。)

System.Web.HttpContext.Current で HttpContext を取得して、HttpContextのメンバである Response を使用するのが良いかと。
# ただし、HttpContext.Current が null の場合も考える必要はあります。

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-11-22 08:54 ]
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-11-26 14:23
どももです。がるです。
遅ればせながら。どもありがとうございました。うまくいきました ^^

で。
後学のため、ってのを含めて、ソースを晒します。
ただ、若干作り変えもあるので、これを見て使う方は
色々ご注意ください。

1.Cookieの扱いについて
どうも、ASP.NETのCookieは大まかに「二種類」あるようです。
で、私は諸所事情がありまして、旧来のCookieを使っています。
新しいCookieを使われる方は、適宜修正などしてみてくださいませ。

共通ルーチン「web_util.cs」
コード:
using System;
using System.Web;
namespace gal {
public class web_util {
  public static string get_cookie(string key) {
    // 現在の HTTP 要求に対する HttpContext オブジェクトを取得
    System.Web.HttpContext nc = System.Web.HttpContext.Current;
    if (null == nc) {
      return "";
    }

    // オブジェクトを取得
    HttpCookie co = nc.Request.Cookies[key];
    if (null == co) {
      return "";
    }

    // データを取得
    return co.Value;
  }
} // end of class
} // end of namespace



テスト用コード「web_util.aspx」
コード:
<%@ Page language="c#" %>
<%@ Import Namespace="gal"%>
<%@ Import Namespace="System"%>
<script runat="server">
public void Page_Load(Object sender, EventArgs e) {
string data;
  // set cookie
  HttpCookie cog = new HttpCookie("test222");
  cog.Value = "value";
  cog.Expires = DateTime.Now.AddDays(1);
  Response.Cookies.Add(cog);

  // set cookie
  cog = new HttpCookie("sslflg");
  cog.Value = "on";
  cog.Expires = DateTime.Now.AddDays(1);
  Response.Cookies.Add(cog);

  // set cookie
  cog = new HttpCookie("sid");
  cog.Value = "ufufufufu";
  cog.Expires = DateTime.Now.AddDays(1);
  Response.Cookies.Add(cog);

  data  = "Cookie is " + web_util.get_cookie("sid") + "<BR>";
  data += "Cookie is " + web_util.get_cookie("sslflg") + "<BR>";
  data += "Cookie is " + web_util.get_cookie("test222") + "<BR>";
  data += "Cookie is " + web_util.get_cookie("noitem") + "<BR>";
  this.Response.Write(data);
}
</script>


なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-11-26 14:44
引用:

がるがるさんの書き込み (2004-11-26 14:23) より:
どうも、ASP.NETのCookieは大まかに「二種類」あるようです。
で、私は諸所事情がありまして、旧来のCookieを使っています。
新しいCookieを使われる方は、適宜修正などしてみてくださいませ。


あまり聞いたことないんですけど、これってなんでしょうか?
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-11-26 15:12
え〜と、私もわかりませんが、次のことでしょうか?
HttpRequest.Cookies プロパティ
HttpResponse.Cookies プロパティ
にある
引用:
ASP.NET には 2 つの cookie コレクションが組み込まれています。

の記述?

# 私はCookieをほとんど使っていませんが、上に示したものならば、単に上り/下りの違いに見えます……。
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-11-26 15:32
どもでふ。がるです。
んっと。ASP.NETのCookieは、実際に発行されるCookieのレベルで
A:
コード:
HttpCookie cog = new HttpCookie("test");
cog.Values.Add("name", "value");


B:
コード:
HttpCookie cog = new HttpCookie("test222");
cog.Value = "value";


の二種類の発行方法が可能です。
んで、実際の、いわゆる「COOKIE_STRING」でチェックしてみると
Aは、test=name=value
Bは、test222=value
という設定値となります。

Bは(従来のCGI的に)一般的なCookieだと思います。
一方でAは、従来はあまり見なかったタイプになります。
予想としては、configファイルやiniファイルなどの、

name=value
から

[カテゴリ]
name=value


の変化と同様の進化をしたものだと推測はできるのですが。
今回、私の方では「途中の特殊なProxyへの依頼をCookieを用いて
行う」という仕様のため、旧来の「name=value」にする必要が
あり…という感じになります。

この辺が「二種類あるCookie」という話につながります。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2004-11-29 08:53
それは、別に「cookie に2種類ある」というわけではなく、「cookieに名前/値ペアを複数格納する」ためのインタフェースというだけなのではないでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)