2009-06-10 4 views
1

同じログイン資格情報を使用するWebアプリケーション上の特定の機能へのリンクを持つC#アプリケーションがあります。ユーザーがアプリケーションを使用してログインし、リンクをクリックすると、新しいブラウザウィンドウが開き(通常はIEですが、既定のブラウザだけでもかまいません)、再度認証するように求められます。C#アプリケーションからInternet ExplorerポップアップウィンドウへのCookieの送信

アカウントがC#アプリケーション内にあるか別のブラウザウィンドウにあるかに関係なく、ログインしたままにする方法はありますか? WebアプリケーションはCookieを使用して認証用のユーザーセッション変数を格納しますが、C#アプリケーションは同じセッション情報を持ちますが、Cookieには含まれません。

私は基本的にC#アプリケーションのセッション情報からクッキーを作成し、それを新しいブラウザウィンドウに渡す必要があります。

アイデア?

+0

「C#フォーム」の意味と、通常のブラウザウィンドウとの違いを明確にしてください。 – Cerebrus

+0

ウェブサイトを閲覧できるWindowsアプリケーションがあることを意味しますか? –

+0

私はWindowsフォームからウィンドウを起動していることを明確にした後、私の答えは無意味になったと思います。それを削除しました。 – Cerebrus

答えて

1

私はどんな新しいウィンドウインスタンスが新しいセッションを開始し、したがって、あなたが前Process.Start("iexplorer.exe", "www.msn.ca")またはwebBrowser1.Navigate("www.msn.ca", true)のいずれかを通じて、新しいブラウザを開いて、作成した可能性のあるすべてのセッションクッキーを一掃と確信しています。

しかし、私は最終的にこの問題の回避策を見つけました。

  1. Internet Explorerとほぼ同じように見える独自のWebブラウザを作成します。基本的なブラウザのコードについては、下のリンクを参照し、必要に応じてカスタマイズしてください。

    http://msdn.microsoft.com/en-us/library/ms379558(VS.80).aspx

    私はのToolStrip、ToolStripContainerで時代遅れRaftingStripを置き換えることによって、バグを修正。自分のために

    (あなたはこのデバッグコードをしたい場合。私はそれを投稿したいが、私はそれがこのフォーラムのために長すぎると思う。私にメールで)、私は、ターゲットURLを渡す

    1. コンストラクタ、セットを追加しましたそのアドレスバーに、ホームページとして設定しても、セキュリティトークン

    2. プロパティを渡す無効/アドレスバーと検索バー

    3. を有効にするには、切り取り、コピー、貼り付け、名前を付けて保存、および印刷を追加しましたボタン

    4. )は、ウェブブラウザフォーム負荷とCreate_a_new_tab(オン

      DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 
      public static extern bool InternetSetCookie(string lpszUrlName, 
           string lbszCookieName, string lpszCookieData); 
      
    5. を追加し、Webブラウザのフォームの宣言部に

  2. 砂時計に "C位" から進捗アイコンを変更しましたwebpage.Navigate()の前に、セッションクッキーにトークンを保存する行を挿入します。 (これは、新しいドメインに移動する場合は、button_go_clickイベントとbutton_search_clickイベントでも必要になる可能性があります。個人的には、セキュリティトークンを渡す場合は、アドレスバーと検索バーを無効にします。)

    string url = comboBox_url.Text.Trim(); // write the session cookie 
    string security_token = "my_session_id=12345" // should have been passed to constructor 
    InternetSetCookie(url, null, security_token); 
    

ユーザーが違いを知っていることはありません、あなたがオン/オフや実装にどの機能を制御することができます。

+0

確かに簡単な解決策ではありませんが、答えに感謝します!私たちはずっと以前にユーザーに再度ログインさせることを決めましたが、それ以外の場合は何が必要かを知ることは良いことです。 –

1

これは、埋め込みWebブラウザコントロール(以下のコードを参照)でのみ可能でしたが、新しいIEウィンドウではできませんでした。まだ答えが見つかりませんでした。

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 
public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData); 

string url = "http://www.google.com"; 

// write the session cookie 
InternetSetCookie(url, null, "abc=1"); 

webBrowser1.Navigate(url); 
+0

C#アプリケーションからIEウィンドウにセッションを保持する方法はないようです。 –

-1

通常のセッションモードを使用できます。

例:このセッションを検証するために

Session.Add("UserName", User); 

:あなたは、「ユーザー」と呼ばれる変数であるユーザ名を保持したい場合は

Session.Add("<sessionName>", <variable which contains the session data>> 

は、あなたは以下のコードを使用することができますあなたのウェブページでは、page_ladメソッドの下の以下のコードを使用してください。

if(Session["UserName"] != null) 
{ 
    ******** 
} 
else 
{ 
    ******* (you can redirect to your home page...) 
} 
関連する問題