- PR -

レガシーASPで設定したクッキーをASP.NET(VB.net)で取得したい

1
投稿者投稿内容
ita
常連さん
会議室デビュー日: 2006/10/10
投稿数: 25
お住まい・勤務地: 兵庫県
投稿日時: 2009-03-04 14:28
いつもお世話になりっぱなしの「ita」です。

今回もよろしくお願いします。

既存のレガシーASPのページ(test.asp)でクッキーにID情報を保存しています。
そのID情報を新規に作成するASP.NETのページで取得したいと思いますが、その方法を教えて下さい。

■レガシーASPでのクッキー保存方法
test.asp(仮名)の中で下記のように設定しています。

コード:
Response.Cookies("ID") = Request.Form("id")


レガシー同士ならこの値は正常に取得できています(=正常に保存できています)

■ASP.NETでのクッキー取得方法
下記のMSのページを参考に下記のコードで確認しましたが、レガシーASPで設定した値ではなく
Name="ASPSESSIONIDCQSDBTTR"などがあるだけでした。
http://msdn.microsoft.com/ja-jp/library/system.net.httpwebresponse.cookies.aspx

コード:
Dim url1$ = "http://hogehoge.co.jp/test.asp" ' 仮名
Dim req1 As HttpWebRequest = CType(WebRequest.Create(url1$), HttpWebRequest)
req1.CookieContainer = New CookieContainer()
Dim response As HttpWebResponse = CType(req1.GetResponse(), HttpWebResponse)
Dim cook As Cookie
For Each cook In response.Cookies
    Debug.Print("Cookie:")
    Debug.Print("{0} = {1}", cook.Name, cook.Value)
    Debug.Print("Domain: {0}", cook.Domain)
    Debug.Print("Path: {0}", cook.Path)
    Debug.Print("Port: {0}", cook.Port)
    Debug.Print("Secure: {0}", cook.Secure)

    Debug.Print("When issued: {0}", cook.TimeStamp)
    Debug.Print("Expires: {0} (expired? {1})", cook.Expires, cook.Expired)
    Debug.Print("Don't save: {0}", cook.Discard)
    Debug.Print("Comment: {0}", cook.Comment)
    Debug.Print("Uri for comments: {0}", cook.CommentUri)
    Debug.Print("Version: RFC {0}", IIf(cook.Version = 1, "2109", "2965"))

    ' Show the string representation of the cookie.
    Debug.Print("String: {0}", cook.ToString())

Next cook


できれば、レガシーASP側の変更はせずにASP.NET側だけを変更して取得したいと思っています。
(できなければ、レガシーASP側の変更もやむを得ないと考えています)

■環境
Microsoft Visual Studio 2008 Professional (VB.net)
IIS 6.0

過去スレッドなども確認したつもりですが、解決までには至りませんでした。

よろしくお願いします。
_________________
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-03-05 01:43
レガシaspで作られたページに、ブラウザでアクセスするとクッキーが発行される。
ASP.NETで作ったページに、同じブラウザでアクセスしたときに上記で発行したクッキーを取得したい。
ということですよね?

ご提示のソースは、リンク先にも書いてあるとおり「要求を送信し、
応答で返されるCookieを表示する例」です。要するにコードが実行されている場所(WEBサーバ)が
クライアントとなって(ブラウザの代わりとなって)リクエストを発行することになります。

ブラウザから送信されたクッキーを取得するにはPageのRequestプロパティから
Cookiesプロパティを参照します。覧を表示する例が下記の中ほどにあります(C#ですが)
http://www.atmarkit.co.jp/fdotnet/aspnet/aspnet04/aspnet04_02.html

ただ、当然ですがaspページとasp.netのページが同じドメインじゃなければ取れません。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2009-03-05 05:17
私ならASP側で取得したクッキーをSession変数経由でASP.NET側に渡しますけどね・・・

詳細は、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=36295&forum=7
を参照してください。


_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
ita
常連さん
会議室デビュー日: 2006/10/10
投稿数: 25
お住まい・勤務地: 兵庫県
投稿日時: 2009-03-05 08:58
べるさん・Accessさん

回答ありがとうございます。
べるさんの回答通り下記のコードであっさりとうまく行きました。

多分、この方法は以前試しましたが、同じドメインで行う処をデバッグ環境でテスト
しており、うまくいかずにいろんなサイトを漁ってしまっていたようです。
(クッキーの保存環境と取得環境が違っていました)

引用:
ただ、当然ですがaspページとasp.netのページが同じドメインじゃなければ取れません。



これを見落としていました。

コード:
' lblDataはラベルコントロールです。
Dim Keys$() = Request.Cookies.AllKeys
Dim n% = UBound(Keys$)
For i% = 0 To n%
    Dim CookieValue$ = Request.Cookies(Keys$(i%)).Value
    lblData.Text &= Keys$(i%) & "=" & CookieValue$ & "<br>"
Next
lblData.Text &= "END<br>"

ありがとうございました。

_________________
1

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