TCppWebBrowserを2つ画面に配置して、
片方でyahooにログインした場合、
もう片方もログインした状態になってしまうんです。
というかcookieが同じものを使っている状態に・・
↓のソースで確認しました。
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
String address = "http://www.yahoo.co.jp";
CppWebBrowser1->Navigate(WideString(address));
CppWebBrowser2->Navigate(WideString(address));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
IHTMLDocument2* doc;
BSTR h;
CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (void**)&doc);
doc->get_cookie(&h);
ShowMessage(h);
CppWebBrowser2->Document->QueryInterface(IID_IHTMLDocument2, (void**)&doc);
doc->get_cookie(&h);
ShowMessage(h);
}
//---------------------------------------------------------------------------
それぞれのオブジェクトで別のcookieを保持するようにはできないでしょうか?
OnBeforeNavigate2でヘッダーを強制的に入れ換えればなんとかできるかな?
とは思っていますが、そもそも別管理にできればその必要もないので・・
どなたか手法ご存じないでしょうか?
予想です。
個々にクッキーの保存先を変えられれば可能かもしれませんが、
実行するユーザが別々じゃないとだめかもしれません。
ユーザーを偽装してTCppWebBrowserを処理すると可能だと思いますが、
同一アプリケーションのTCppWebBrowserで出来るか不明です。
> それぞれのオブジェクトで別のcookieを保持するようにはできないでしょうか?
> OnBeforeNavigate2でヘッダーを強制的に入れ換えればなんとかできるかな?
> とは思っていますが、そもそも別管理にできればその必要もないので・・
> どなたか手法ご存じないでしょうか?
>
━━━━━━━━━‥‥‥‥………
畑井和幸
e-mail: ha...@cospec.co.jp
‥‥‥‥‥………━━━━━━━━
この場合別プロセスになればcookieは別管理になるんでしょうけど・・
TCppWebBrowserはmshtmlのラッパーなわけですが、
TCppWebBrowserを複数作っても同一プロセスはmshtml内でcookie共有してるみたいですね。
ならば、送信する際にcookieを置き換えれば・・と思ったのですが、
リクエストヘッダーにcookieを入れるのはmshtmlが自動的やっているのか、
cookieを消去できませんでした。
ネット上を探し回り、InternetSetCookieで書き換えられる?
というような情報を見つけたのですが、
InternetSetCookie(WideString(url), NULL, WideString("NID=")))
というようにコールしても
NID=xxxxxx;NID=
というように値が追加されるだけでした。
開いたサイト(例えばhttp://www.google.co.jp)と、
InternetSetCookieに渡すurlが違うのでしょうか?
うーん・・
どなたか良い案無いでしょうか?・・
ようやく情報を見つけました。
wininet.dllに含まれるInternetSetOptionでcookieを消せました。
以下のように呼び出しました。
InternetSetOption(0, INTERNET_OPTION_END_BROWSER_SESSION, NULL, 0);
最初の引数に0を指定すると自分のプロセスを指すようです。
ただこれが分かった時は既に方針を変えていまして、
TCppWebBrowserを1個しか作らないように作り替えた後でした。
ですので、cookieを入れ換えてTCppWebBrowserを使うやり方はできるか未確認です。
それと、TCppWebBrowserを1個しか作らなくても、
IEを単体で起動しているとそれともcookieを共有するらしく、
TCppWebBrowserを作りなおした時点でもcookieが残っていました。
そこでInternetSetOptionを呼び出したところ、
cookieをクリアしてくれました。
この場合、IEを単体で起動していた方には影響が無いようでした。
この情報を見つけたのは以下のサイトです。
http://www.codecomments.com/forum290/message160164.html
この情報を元にMSの情報が見つかりました。
http://support.microsoft.com/kb/195192/ja
以上解決に至りました。
情報ありがとうございました。