DOBON.NET DOBON.NETプログラミング掲示板過去ログ

WebbrowserでのCookieの送信方法

環境/言語:[環境(Windows 7 )、使用言語(VB.NET)]
分類:[.NET]

1.現在、あるホームページをIEでログインして見ているとします。

2.同時にWebBrowserでログインして見ると、IEの方は自動的にログアウトしてしまいます。

これを防ぐため、WebBrowserで接続するときに、IEのCookieを送信してあげれば、ログアウトしなくて済むようです。

IEからのCookieの取得は出来たのですが、それをWebBrowserでCookie(セッション情報)を送信して接続する方法がわかりません。

多分ですが、CookieContainerオブジェクトを使うということまでは分かりました。
ここを参考にしました。
http://dobon.net/vb/dotnet/internet/usecookie.html



WebBrowserでの接続するときの、Cookieの送信方法を教えて下さい。


宜しくお願いします。
■No30166に返信(ザナドゥさんの記事)
> WebBrowserでの接続するときの、Cookieの送信方法を教えて下さい。

InternetSetCookie API について調べてみてください。
魔界の仮面弁士さん、いつも有難うございます。

> InternetSetCookie API について調べてみてください。


お陰様で「InternetSetCookie API」を検索してみたら、参考になるのが出てきました。
「WinInet Api を使用して、URL の取得のクッキーとする方法」
http://support.microsoft.com/kb/196062/ja

VB6用のみたいなので、ちょっとパスしました。




「Cookieを使ってファイルをダウンロードする方法を教えて下さい。」
http://qanda.rakuten.ne.jp/qa3905072.html?order=DESC&by=datetime

私が探していたのはこれだと思うのですが、少し教えて下さい。



user_session.Valueには、IEから取ってきたuser_sessionが入っています。

setCookie("http://xxxx.xxx/", "Test", "TestCookie; expires = Sat,31-Dec-2011 00:00:00 GMT")

setCookie("http://www.xxxxx--.jp", "xxxx--.jp", "user_session=" & user_session.Value,"version=0")



'これでクッキーが入ったので、WebBrowserで接続してみる
WebBrowser1.Navigate("http://www.xxxx--.jp/my/top")


うまくいかない。

クッキーの設定は以下で合っていますでしょうか?
user_session=" & user_session.Value
■No30169に返信(ザナドゥさんの記事)
> うまくいかない。

意図した cookie が正しくセットされていないのでしょうか? それとも、
期待通りにセットされているのに、サイト側が受け付けないのでしょうか?


もしもサイト側が発行した cookie に、ワンタイムのセッション情報が
含まれていた場合、アクションのたびに違う値がセットされますから、
複数のブラウザからの同時アクセスを実現することは難しくなります。

なので、そもそも cookie の共有だけで解決する問題なのかどうかが
未知数に思えます。(サイト側の作りによる部分なので何とも言えませんが…)


とりあえず問題個所の切り分けのため、IE側と WebBrowser側とで、
Cookie の内容にどのような差が生じているのか、Fiddler 等で
トレースしてみては如何でしょうか。

http://msdn.microsoft.com/ja-jp/library/bb250442.aspx
通常、.NET内でWebBrowserを使う場合 IEのCookieを使うと思うので
そのままでよいと思いますが? ログインされていない状態になるってことなのでしょうか?

[InternetSetCookieとInternetGetCookieを使ってIEのCookieを利用する ]
http://agloo.blog92.fc2.com/blog-entry-38.html

この辺などが参考になると思います。
> 通常、.NET内でWebBrowserを使う場合 IEのCookieを使うと思うので
> そのままでよいと思いますが? ログインされていない状態になるってことなのでしょうか?

WebBrowserとIEのCookieは、確か別々だったと思います。
■No30175に返信(うさこさんの記事)
>>通常、.NET内でWebBrowserを使う場合 IEのCookieを使うと思うので
>>そのままでよいと思いますが? ログインされていない状態になるってことなのでしょうか?
>
> WebBrowserとIEのCookieは、確か別々だったと思います。

WebBrowserコントロールでうちの環境で試したらIEのCookieが使われていました。 COMとか使うと別なのかもしれませんね
トマトさん、うさこさん、返信有難う御座います。

>WebBrowserコントロールでうちの環境で試したらIEのCookieが使われていました。 COMとか使うと別なのかもしれませんね

すみません、私の知識ではどちらなのか分からないのです・・・


少し進展しました。

上手くいかない理由は、user_sessionが既にあるのに、新しく追加したuser_sessionが最後に追加されていて、最初のuser_sessionを読み取っているからだと思います。

これは書き換えられてないという事だと思うのですが、既にあるuser_sessionの部分だけ削除する、若しくは書き換える方法とかは存在するのでしょうか?

あと下の"Test"は、Cookienameなのですが、既にあるのCookieのどの部分に当たりますでしょうか?
ここはわからないので、""と空にしていますが、書き換えられないのは、これが原因なのかなとも思っています。

setCookie("http://xxxx.xxx/", "Test", "TestCookie; expires = Sat,31-Dec-2011 00:00:00 GMT")
ニコニコ動画?? ならうちのコメビューでやってることを案内させてもらいますね。 
まあ ニコニコの例ですが、違ったらごめんなさい また近いようにはできると思います。
一度 既存のCookieをまったく関係ないものに書き換える(セットする)ことからはじめてます。

Cookievalueにuser_session=user_sessionXXXXX_XXXXX_XXXXXが格納されています。

'WIN32APIの宣言

<DllImport("wininet.dll")> _
Private Shared Function InternetSetCookie(ByVal lpszUrl As String, ByVal lpszCookieName As String, ByVal lpszCookieData As String) As Boolean
End Function




'user_session=usersesion_XXXXX_XXXX_XXXX の「user_session=」の除去
cookievalue = cookievalue.Replace("user_session=", "")
'念のためCOOKIEを削除
InternetSetCookie("http://nicovideo.jp/", "user_session", "x; expires=Fri, 31-Dec-1999 23:59:59 GMT;")


Dim timedate As String
'48時間後のタイム(まあ、これくらいでいいか)
Dim expires As DateTime = DateTime.Now + New TimeSpan(48, 0, 0)
'Debug.Print(expires.ToString)
'Fri, 31-Dec-1999 23:59:59 GMTのように時間フォーマットを指定
timedate = "expires=" & expires.ToString("r", DateTimeFormatInfo.InvariantInfo)

'IEへCOOKIEセット
InternetSetCookie("http://nicovideo.jp", "user_session", cookievalue & ";" & timedate)
■No30180に返信(mankitsuさんの記事)
> ニコニコ動画?? ならうちのコメビューでやってることを案内させてもらいますね。 
> まあ ニコニコの例ですが、違ったらごめんなさい また近いようにはできると思います。


mankitsuさん、返信有難う御座います。
まさに仰る通り、やりたい事はニコニコ動画へのアクセスでした。

COOKIEを削除(別の物に変更)
timedateの追加

この2つが必要だったのですね。

お陰で3日間考えて出来なかったことが出来ました。

本当に助かりました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板