1

I am trying to clear session cookies in a WPF WebBrowser. This method

Public Const INTERNET_OPTION_END_BROWSER_SESSION As Integer = 42
<DllImport("wininet.dll", SetLastError:=True)>
Public Function InternetSetOption(ByVal hInternet As IntPtr, ByVal dwOption As Integer, ByVal lpBuffer As IntPtr, ByVal lpdwBufferLength As Integer) As Boolean
End Function

described here How to clear System.Windows.Forms.WebBrowser session data? works for our WinForms applications, but not for WPF.

Any ideas?

Thanks

Community
  • 1
  • 1
gchq
  • 1,603
  • 2
  • 27
  • 52

1 Answers1

2

Turns out the answer is to ensure that the WebBrowser object is created each time the page is loaded.

As the WebBrowser object is not considered to be a control I created a ScrollViewer at initialisation then added the WebBrowser to the ScrollViewer on the loaded event.

It now works perfectly

for Faber75

Imports System.ComponentModel
Class Website_Login_Page
Private LoginBrowser As WebBrowser


Private Sub Website_Login_Page_Initialized(sender As Object, e As System.EventArgs) Handles Me.Initialized
    Try
        Website_Login_Grid.Background = New SolidColorBrush(Colors.White)

        For i As Integer = 0 To 1
            Dim vRow As New RowDefinition
            If i = 0 Then
                vRow.Height = New GridLength(35, GridUnitType.Star)
            Else
                vRow.Height = New GridLength(35)
            End If
            Website_Login_Grid.RowDefinitions.Add(vRow)
        Next

        Dim SV As New ScrollViewer
        With SV
            .VerticalScrollBarVisibility = ScrollBarVisibility.Auto
            .Name = "Website_Login_SV"
        End With
        RegisterControl(Website_Login_Grid, SV)
        'Cookies are not removed if the WebBrowser object is not created each time the page is loaded!
        ' LoginBrowser = New WebBrowser
        Grid.SetRow(SV, 0)
        Website_Login_Grid.Children.Add(SV)

        Dim DP As DockPanel = PageStatusBarDP(Website_Login_Grid)
        Grid.SetRow(DP, 1)
        Website_Login_Grid.Children.Add(DP)

    Catch ex As Exception
        EmailError(ex)
    End Try
End Sub





Private Sub Website_Login_Page_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
    Try

        If LoginBrowser Is Nothing Then
            LoginBrowser = New WebBrowser
        End If
        Dim SV As ScrollViewer = Website_Login_Grid.FindName("Website_Login_SV")
        SV.Content = LoginBrowser

        AddHandler LoginBrowser.Navigating, AddressOf WebBrowser_Loading
        AddHandler LoginBrowser.LoadCompleted, AddressOf WebBrowser_Loaded
        AddHandler LoginBrowser.Navigated, AddressOf WebBrowser_Navigated
        If InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0) = False Then
            MessageBox.Show("Returned False")
        End If
        With LoginBrowser
            .Navigate(New Uri("https://website.com"))
                        End With

    Catch ex As Exception
        EmailError(ex)
    End Try

End Sub


Private Sub Website_Login_Page_Unloaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Unloaded
    Try
        If Not LoginBrowser Is Nothing Then

            RemoveHandler LoginBrowser.Navigating, AddressOf WebBrowser_Loading
            RemoveHandler LoginBrowser.LoadCompleted, AddressOf WebBrowser_Loaded
            RemoveHandler LoginBrowser.Navigated, AddressOf WebBrowser_Navigated
            LoginBrowser = Nothing




        End If
        GC.GetTotalMemory(True)

    Catch ex As Exception
        EmailError(ex)
    End Try
End Sub

Private Sub WebBrowser_Loading(ByVal sender As Object, ByVal e As NavigatingCancelEventArgs)
    PageStatusBarLoading(Website_Login_Grid)
    PageStatusBarRightChangeText(Website_Login_Grid, "Loading... Please wait...")

End Sub

Private Sub WebBrowser_Loaded(ByVal sender As Object, ByVal e As NavigationEventArgs)
    Dim vDoc As Object = LoginBrowser.Document
    Dim vTitle As String = vDoc.Title
    PageStatusBarLoaded(Website_Login_Grid, vTitle)
    PageStatusBarRightChangeText(Website_Login_Grid, "Loaded")
End Sub

Private Sub WebBrowser_Navigated(ByVal sender As Object, ByVal e As NavigationEventArgs)
    Dim vDoc As Object = LoginBrowser.Document
    Dim vTitle As String = vDoc.Title
    PageStatusBarLoaded(Website_Login_Grid, vTitle)
    PageStatusBarRightChangeText(Website_Login_Grid, "Loaded")
End Sub

End Class

gchq
  • 1,603
  • 2
  • 27
  • 52
  • Can you please detail your answer ? I tried adding before initializecomponent `sv = new System.Windows.Controls.ScrollViewer();` and in page load adding `sv.Content = browser;` But the session remain the same – Faber75 Feb 18 '14 at 11:13