Introdução
Instalação
Guias
- Engine
- Perfil
- Navegador
- BrowserView
- Navegação
- Conteúdo
- Menu de contexto
- DOM
- JavaScript
- Pop-ups
- Diálogos
- Downloads
- Chrome extensions
- Rede
- Cache
- Cookies
- Proxy
- Autenticação
- Permissões
- Plugins
- Impressão
- Senhas
- Perfis de dados do usuário
- Cartões de crédito
- Mídia
- Zoom
- Corretor ortográfico
- Implantação
- Chromium
Resolução de problemas
- Registro
- Exceções comuns
- A aplicação não termina
- O vídeo não é reproduzido
- Não é possível iniciar sessão na conta Google
- Os dados do usuário não são armazenados
- Esquema de cores
- Falha no início
- Início lento no Windows
- Aplicação .NET que não responde
- Encerramento inesperado do processo Chromium
- Comportamento inesperado
- Fim do suporte do Windows 7/8/8.1
Migração
Cookies
Este documento descreve como trabalhar com cookies.
Visão geral
O DotNetBrowser delega o trabalho com os cookies no Chromium engine. O Chromium decide como baixar os cookies de um servidor Web, extraí-los dos cabeçalhos HTTP e armazená-los num sistema de arquivos local (cookies persistentes) ou na memória (cookies de sessão).
A interface ICookieStore
permite-lhe obter, modificar e remover cookies. A classe Cookie
fornece informações sobre um determinado cookie.
Para obter o ICookieStore
para um Profile
específico, utilize o método Profiles.CookieStore()
. O método IEngine.CookieStore()
devolve o CookieStore
associado ao perfil predefinido.
Protocolos suportados
O DotNetBrowser suporta cookies que são enviados usando os seguintes protocolos:
- HTTP
- HTTPS
- WS (WebSocket)
- WSS (WebSocket Seguro)
Se um cookie for enviado utilizando um protocolo que não conste da lista, por exemplo, ftp://
, não será guardado no armazenamento de cookies.
Trabalhar com cookies
O DotNetBrowser suporta os seguintes tipos de cookies:
- Cookies persistentes — armazenados na pasta de dados do usuário do Chromium. Se eliminar a pasta de dados do usuário do Chromium, todos os cookies persistentes serão também eliminados.
- Cookies de sessão — armazenados na memória da aplicação e serão removidos automaticamente quando a aplicação for terminada.
- Cookies seguros — só podem ser transmitidos através de uma ligação encriptada que é HTTPS. Isto torna o cookie menos suscetível de ser exposto ao roubo de cookies através de escutas.
- Cookies HttpOnly — não podem ser acedidos pelas APIs do lado do cliente, como o JavaScript. Esta restrição elimina a ameaça de roubo de cookies utilizando o cross-site scripting (XSS). No entanto, o cookie continua vulnerável a ataques de rastreio entre sites (XST) e de falsificação de pedidos entre sites (XSRF).
Quando modificar os cookies, utilize o método ICookieStore.Flush()
para guardar as alterações no armazenamento de cookies.
Obtendo cookies
Para obter todos os cookies, utilize o método GetAllCookies()
:
engine.Profiles.Default.CookieStore.GetAllCookies()
.Result.ToList().ForEach(cookie => Console.WriteLine("cookie = " + cookie));
engine.Profiles.Default.CookieStore.GetAllCookies().Result.ToList().
ForEach(Sub(cookie)
Console.WriteLine("cookie = " & cookie.ToString())
End Sub)
Para obter todos os cookies através de um URL, utilize o método GetAllCookies()
com um parâmetro string:
engine.Profiles.Default.CookieStore.GetAllCookies("https://www.google.com")
.Result.ToList().ForEach(cookie => Console.WriteLine("cookie = " + cookie));
engine.Profiles.Default.CookieStore.GetAllCookies("https://google.com").Result.ToList().
ForEach(Sub(cookie)
Console.WriteLine("cookie = " & cookie.ToString())
End Sub)
Criando cookies
Persistente
Para criar um cookie persistente, utilize o exemplo de código abaixo:
Cookie cookie = new Cookie.Builder(".google.com")
{
Name = "name",
Value = "value",
ExpirationTime = expirationTime,
Path = "/"
}.Build();
bool success = engine.Profiles.Default.CookieStore.SetCookie(cookie).Result;
engine.Profiles.Default.CookieStore.Flush();
Dim cookie As Cookie = New Cookie.Builder(".google.com") With {
.Name = "name",
.Value = "value",
.ExpirationTime = expirationTime,
.Path = "/"
}.Build()
Dim success As Boolean = engine.Profiles.Default.CookieStore.SetCookie(cookie).Result
engine.Profiles.Default.CookieStore.Flush()
O exemplo de código acima cria um cookie persistente para o URL http://www.google.com
. A variável success
será true
se o cookie for criado e adicionado ao armazenamento de cookies com êxito.
Sessão
Para criar um cookie de sessão, utilize o exemplo de código abaixo:
Cookie cookie = new Cookie.Builder(".google.com")
{
Name = "name",
Value = "value",
Path = "/"
}.Build();
bool success = engine.Profiles.Default.CookieStore.SetCookie(cookie).Result;
engine.Profiles.Default.CookieStore.Flush();
Dim cookie As Cookie = New Cookie.Builder(".google.com") With {
.Name = "name",
.Value = "value",
.Path = "/"
}.Build()
Dim success As Boolean = engine.Profiles.Default.CookieStore.SetCookie(cookie).Result
engine.Profiles.Default.CookieStore.Flush()
Cookies com prefixos específicos
Alguns cookies com nomes específicos têm uma semântica específica.
Os cookies com nomes que começam por __Host-
devem ser definidos com o sinalizador seguro, devem provir de uma página segura (HTTPS), não devem ter um domínio especificado (e, por conseguinte, não são enviados para subdomínios) e o caminho deve ser /
. O nome do domínio deve ser especificado através da API, mas neste caso é utilizado apenas para efeitos de validação.
Cookie cookie = new Cookie.Builder(".a.com")
{
Name = "__Host-1PLSID",
Value = "value",
Secure = true,
HttpOnly = false
}.Build();
bool success = engine.Profiles.Default.CookieStore.SetCookie(cookie).Result;
engine.Profiles.Default.CookieStore.Flush();
Dim cookie As Cookie = New Cookie.Builder(".a.com") With {
.Name = "__Host-1PLSID",
.Value = "value",
.Secure = True,
.HttpOnly = False
}.Build()
Dim success As Boolean = engine.Profiles.Default.CookieStore.SetCookie(cookie).Result
engine.Profiles.Default.CookieStore.Flush()
Os nomes dos cookies que começam por __Secure-
(o traço faz parte do prefixo) devem ser definidos com o sinalizador seguro a partir de uma página segura (HTTPS). Eis como criar estes cookies:
Cookie cookie = new Cookie.Builder(".a.com")
{
Name = "__Secure-Asd",
Path = "/",
Secure = true
}.Build();
bool success = engine.Profiles.Default.CookieStore.SetCookie(cookie).Result;
engine.Profiles.Default.CookieStore.Flush();
Dim cookie As Cookie = New Cookie.Builder(".a.com") With {
.Name = "__Secure-Asd",
.Path = "/",
.Secure = True
}.Build()
Dim success As Boolean = engine.Profiles.Default.CookieStore.SetCookie(cookie).Result
engine.Profiles.Default.CookieStore.Flush()
Eliminando cookies
Para eliminar todos os cookies, utilize o método DeleteAllCookies()
:
int numberOfDeletedCookies = engine.Profiles.Default.CookieStore.DeleteAllCookies().Result;
engine.Profiles.Default.CookieStore.Flush();
Dim numberOfDeletedCookies As Integer =
engine.Profiles.Default.CookieStore.DeleteAllCookies().Result
engine.Profiles.Default.CookieStore.Flush()
Para eliminar um cookie, utilize o método Delete(Cookie)
. O exemplo de código abaixo elimina todos os cookies um a um, obtendo o resultado da operação:
engine.Profiles.Default.CookieStore.GetAllCookies().Result.ToList().ForEach(c =>
engine.Profiles.Default.CookieStore.Delete(c).Wait());
engine.Profiles.Default.CookieStore.Flush();
engine.Profiles.Default.CookieStore.GetAllCookies().Result.ToList().ForEach(Function(c)
engine.Profiles.Default.CookieStore.Delete(c).Wait()
End Function)
engine.Profiles.Default.CookieStore.Flush()
Supressão de cookies
Você pode controlar todos os cookies de entrada e de saída utilizando os manipuladores CanSetCookieHandler
e CanGetCookiesHandler
da rede Network
.
Para suprimir os cookies de entrada, utilize o exemplo de código abaixo:
network.CanSetCookieHandler =
new Handler<CanSetCookieParameters, CanSetCookieResponse>(p =>
{
return CanSetCookieResponse.Deny());
}
network.CanSetCookieHandler =
New Handler(Of CanSetCookieParameters, CanSetCookieResponse)(Function(p)
Return CanSetCookieResponse.Deny()
End Function)
Para suprimir os cookies de saída, utilize o exemplo de código abaixo:
network.CanGetCookiesHandler =
new Handler<CanGetCookiesParameters, CanGetCookiesResponse>(p =>
{
return CanGetCookiesResponse.Deny());
}
network.CanGetCookiesHandler =
New Handler(Of CanGetCookiesParameters, CanGetCookiesResponse)(Function(p)
Return CanGetCookiesResponse.Deny()
End Function)
Controle de cookies de terceiros
Você pode configurar a forma como o Chromium controla os cookies de terceiros:
- Desligar o comando.
- Bloquear cookies de terceiros.
- Bloquear cookies de terceiros no modo de navegação anônima.
Veja as opções disponíveis em: CookieControlsMode enum.
Por exemplo:
IProfile profile = engine.Profile.Default;
profile.Preferences.ThirdPartyCookieMode = CookieControlsMode.BlockThirdParty;
Dim profile As IProfile = engine.Profile.Default
profile.Preferences.ThirdPartyCookieMode = CookieControlsMode.BlockThirdParty
Encriptação
O DotNetBrowser suporta a encriptação de cookies por padrão. Ele utiliza as rotinas de encriptação de cookies do Chromium, então os cookies são armazenados da mesma forma que no Chromium.
No Windows, o DotNetBrowser utiliza apenas a DPAPI para encriptar os cookies. Atualmente, não existem alternativas.