こんにちは、初めまして
では早速本題に
私は最近C#のポトペタにハマって遊んでいたりします
その時webbrowserというクラスを見つけて「ああ、なんと便利な」と感動しておりました
ですが、ちょっと困ったことに2つのアカウントで同時にログインしようとするとログイン出来ないのです
もっとわかりやすく順を追って書くと
同じソースコードからコンパイルしたwb1.exe,wb2.exeを用意する(webbrowserクラスを使った、簡素なウェブブラウザソフト)
wb1.exeから "太郎" さんのアカウントでGREEにログインする
wb1.exeを起動したまま、wb2.exeから "次郎" さんのアカウントでGREEにログインする
もう一度wb1.exeを見てみると今ログインしているユーザーは "太郎" さんではなくなり、再度ログインを求められる
こんな感じです
ちなみに、wb1.exeとwb2.exeの役割をそれぞれfirefoxとchromeでやってみると、その場合は太郎次郎両方のアカウントに同タイミングでログイン出来ました
↑こっちは出来るあたり、ログイン状態を保ってくれない原因はwebbrowserクラスにあると思うのですが、どうなのでしょうか?
また何か良い対処法はありますか?
よろしくお願いします。
.NETのwebbrowserで一度に2つのアカウントにログイン
Re: .NETのwebbrowserで一度に2つのアカウントにログイン
WebBrowser ControlはIEを使っていると考えて下さい。
# 完全な事実ではないですが……。
このため,永続化されるCookieはプロセス間で共有されます。
セッションCookieであれば共有されませんが。
IEで複数アカウントによる同時ログインが不可能なサイトであれば,
IEやWebBrowserを使った複数アカウントによる同時ログインは不可能です。
# 完全な事実ではないですが……。
このため,永続化されるCookieはプロセス間で共有されます。
セッションCookieであれば共有されませんが。
IEで複数アカウントによる同時ログインが不可能なサイトであれば,
IEやWebBrowserを使った複数アカウントによる同時ログインは不可能です。
Re: .NETのwebbrowserで一度に2つのアカウントにログイン
1ヶ月にもわたり放置してすいません
リアルの用事で中々返事できずにいました
あまりこの手のことについては詳しくないのですが、セッションcookieとは今ログインしているユーザーの情報を管理しているものと考えてよろしいでしょうか?
少し調べたところによると
~~~~~~~~~~~~~~~~~~
サーバー :ログインしてね
クライアント:IDは〇〇、Passwordは☓☓
サーバー :おk、その情報をセッションcookieでローカルに保存しといて
クライアント:了解。保存した
(セッションcookieはクライアントのローカルに保存されている)
~~~~~~~1分後~~~~~~~~
クライアント:俺のマイページ表示して
サーバー :じゃあまず俺にセッションcookie送って
クライアント:(さっきローカルに保存したやつだな……)はい、どうぞ
サーバー :セッションcookieの中身は……ふむふむ、ID〇〇のマイページを表示だな
~~~~~~~~~~~~~~~~~~
こんな感じでしょうか?(なんで会話文調にしたのか私にもわかりません。書いた後に思ったが恥ずかしい……)
これが正しいとするなら、webbrowserで多重ログインできない理由は
「セッションcookieが同じ所で管理されていて、太郎さんのセッションcookieを送りたいのに、二郎さんのセッションcookieに上書きされてしまっているから」
ということになるのですが、果たして合っているのでしょうか?
またこれを解決するには、多重起動してもソフトごとに(wb1.exe,wb2.exeそれぞれで)セッションcookieを管理できればいいと思うのですが、果たしてそれは可能なのでしょうか?
リアルの用事で中々返事できずにいました
YuO さんが書きました:WebBrowser ControlはIEを使っていると考えて下さい。
# 完全な事実ではないですが……。
このため,永続化されるCookieはプロセス間で共有されます。
セッションCookieであれば共有されませんが。
IEで複数アカウントによる同時ログインが不可能なサイトであれば,
IEやWebBrowserを使った複数アカウントによる同時ログインは不可能です。
あまりこの手のことについては詳しくないのですが、セッションcookieとは今ログインしているユーザーの情報を管理しているものと考えてよろしいでしょうか?
少し調べたところによると
~~~~~~~~~~~~~~~~~~
サーバー :ログインしてね
クライアント:IDは〇〇、Passwordは☓☓
サーバー :おk、その情報をセッションcookieでローカルに保存しといて
クライアント:了解。保存した
(セッションcookieはクライアントのローカルに保存されている)
~~~~~~~1分後~~~~~~~~
クライアント:俺のマイページ表示して
サーバー :じゃあまず俺にセッションcookie送って
クライアント:(さっきローカルに保存したやつだな……)はい、どうぞ
サーバー :セッションcookieの中身は……ふむふむ、ID〇〇のマイページを表示だな
~~~~~~~~~~~~~~~~~~
こんな感じでしょうか?(なんで会話文調にしたのか私にもわかりません。書いた後に思ったが恥ずかしい……)
これが正しいとするなら、webbrowserで多重ログインできない理由は
「セッションcookieが同じ所で管理されていて、太郎さんのセッションcookieを送りたいのに、二郎さんのセッションcookieに上書きされてしまっているから」
ということになるのですが、果たして合っているのでしょうか?
またこれを解決するには、多重起動してもソフトごとに(wb1.exe,wb2.exeそれぞれで)セッションcookieを管理できればいいと思うのですが、果たしてそれは可能なのでしょうか?
Re: .NETのwebbrowserで一度に2つのアカウントにログイン
>Lokiさん
見ました。しかし、私にはこのページにカテあることと自分が書き込んだことが同じ内容になっているのか判断がつきません
また、私はセッションcookieの勉強がしたいわけではないのです
失礼ですがトピックの内容すべてに目を通されましたか?
私が求めているゴールはwebbrowserクラスでの別アカ同時ログインであって、セッションcookieではありません
URLだけポンと出されてもどうすればいいのやら^^;
タイトルに書いてある質問の解決策をご存じの方は誰かいらっしゃらないでしょうか?
よろしくお願いします。
見ました。しかし、私にはこのページにカテあることと自分が書き込んだことが同じ内容になっているのか判断がつきません
また、私はセッションcookieの勉強がしたいわけではないのです
失礼ですがトピックの内容すべてに目を通されましたか?
私が求めているゴールはwebbrowserクラスでの別アカ同時ログインであって、セッションcookieではありません
URLだけポンと出されてもどうすればいいのやら^^;
タイトルに書いてある質問の解決策をご存じの方は誰かいらっしゃらないでしょうか?
よろしくお願いします。
Re: .NETのwebbrowserで一度に2つのアカウントにログイン
C#に詳しくないので断言できないですが墨汁 さんが書きました:1ヶ月にもわたり放置してすいません
これが正しいとするなら、webbrowserで多重ログインできない理由は
「セッションcookieが同じ所で管理されていて、太郎さんのセッションcookieを送りたいのに、二郎さんのセッションcookieに上書きされてしまっているから」
ということになるのですが、果たして合っているのでしょうか?
おかきになっている通りの現象が起こっているのだと思います。
webbrowserクラスに似ててCookieを複数管理できるようなより高機能なクラスが
あればいいのですが自分は知らないです。すみません。
自分の思いつく方法は面倒くさすぎますがTcpClientクラスをつかってHTTP通信を自作して
Cookieをプログラムごとに管理してあげる方法しか思いつかないです。
本当はwebbrowserクラスの高機能阪があればいいのですが
ご存じの方いらっしゃいますでしょうか?
Re: .NETのwebbrowserで一度に2つのアカウントにログイン
ユーザーのログイン状態をセッションCookieで行っているか永続化Cookieで行うかは,サイトに依存します。墨汁 さんが書きました:あまりこの手のことについては詳しくないのですが、セッションcookieとは今ログインしているユーザーの情報を管理しているものと考えてよろしいでしょうか?
永続化Cookieとは有効期限の指定された (Set-Cookieフィールドがレスポンスで返されるときにexpiresが指定された) Cookieであり,その有効期限までの間,ブラウザは対象サイトにCookieを送信します。
セッションCookieとは有効期限の指定されていない (Set-Cookieフィールドがレスポンスで返されるときにexpiresが指定ていない) Cookieであり,ブラウザが終了されるまでの間,ブラウザは対象サイトにCookieを送信します。
簡易テストページを作ってみました。
http://www.ookubo.ws/CookieTest/test.php
上記のページへの最初のアクセスでは,OldValueはどちらも(undefined)のはずです。
再読込すると,OldValueとNewValueは同じ値になるするはずです。
次に,ブラウザを終了した後再度起動してアクセスすると,セッションクッキーのOldValueは(undefined)ですが,永続化クッキーは前の値が残っているはずです。
# 永続化クッキーの生存期間が60秒程度なので,ちょっと時間が経つと永続化クッキーが再発行される可能性があります。
上記を調べたら,クッキーを削除しておいてください。
さて,ここからが本題ですが,WebBrowserコントロールをFormに貼り付けて,Loadイベントで上記ページにNavigateするWindows Forms アプリケーションを作ります。
そして,そのプログラムを2つ起動してみてください。
セッションクッキーのOldValue値はどちらも(undefined)でNewValue値は2つのプロセスで異なるはずです。
それに対して,永続化クッキーのOldValue値は,先に起動した方の値が(undefined)で後から起動した方の値は先に起動した方の永続化クッキーのNewValue値と同じ値になっているはずです。
この,永続化クッキーの値が同じになることが,今回の問題の根本です。
なので,
墨汁 さんが書きました:また、私はセッションcookieの勉強がしたいわけではないのです
と書かれていますが,クッキーについての知識なしに今回の問題は解決しません。墨汁 さんが書きました:私が求めているゴールはwebbrowserクラスでの別アカ同時ログインであって、セッションcookieではありません
対象のサイトがセッションcookieを発行しているのであれば,そもそも問題は発生しないわけですから。
で,IEコンポーネント (含System.Windows.Forms.WebBrowser) でCookieを共有しない方法というのは,FAQで「できない」が回答です。
InternetGetCookieとInternetSetCookieを駆使すれば,ある程度できなくはないですが,共有しているものをアクセス前に自分のもので置き換えればできる,という話なので。
で,別のエンジンを探すとWebKit.NETとか,geckofxとか見つかります。
これらの別のエンジンでどうなるかは試していませんが,少なくともIEコンポーネントとCookieを共有することはありません。
とりあえず,geckofxでは,Xpcom.Initializeの後にXpcom.ProfileDirectoryに異なる値を設定することで,永続化Cookieは共有されなくなりました。
なので,この方法を使うことで目的は達成されるかと思います。
一応,簡易テストページのソース
► スポイラーを表示
Re: .NETのwebbrowserで一度に2つのアカウントにログイン
>YuOさん
わざわざこんなにすごいcgiまで組んで頂いてありがとうございます
教えてもらったgeckofxを使ってみることにします
それと、セッションcookieなどは今回の問題解決に直接は関係ないと思っていましたが、YuOさんの仰るとおりcookieの知識もそにうち必要になってきそうなのでまた今度本屋さんでcookieについて書いてある本を探してみます
本当にありがとうございました
わざわざこんなにすごいcgiまで組んで頂いてありがとうございます
教えてもらったgeckofxを使ってみることにします
それと、セッションcookieなどは今回の問題解決に直接は関係ないと思っていましたが、YuOさんの仰るとおりcookieの知識もそにうち必要になってきそうなのでまた今度本屋さんでcookieについて書いてある本を探してみます
本当にありがとうございました