Estou trabalhando em um aplicativo PhoneGap com uso de sessão do servidor. Ele precisa de cookies para lidar com a sessão. Além disso, o cookie do balanceador de carga também deve ser tratado. Portanto, não há como contornar. Como você lida com Cookies em seu aplicativo PhoneGap?
Já realizei algumas pesquisas:
- Alguns dizem que o manuseio de cookies pode depender de o servidor não definir cookies para agentes de usuário desconhecidos (IIS): Sessão PhoneGap (cookies) no iOS
- Em JavaScript, os cookies podem ser definidos com document.cookie = ..., mas eles não são salvos no PhoneGap e perdidos. Antes de disparar solicitações xhr, ele funciona.
- Os cookies podem ser recuperados após a solicitação xhr com xhr.getResponseHeader ('Set-Cookie'). Mas apenas quando realmente definido no servidor. Infelizmente, o jQuery remove o cabeçalho "Cookie".
- A propriedade JavaScript document.cookie não é atribuída e não é atualizada após solicitações (xhr).
- Alguns sugerem que o localStorage salve ids de sessão etc. Mas todos os scripts podem acessá-lo e isso pode ser um problema de segurança XSS. Os cookies contornam esse problema usando o sinalizador httponly.
- iOS: Existem algumas modificações que irão alterar o comportamento do webView para suportar cookies. Mas eles parecem não funcionar com iOS 6 e PhoneGap 2.5: https://groups.google.com/forum/?fromgroups=#!topic/phonegap/ZJE1nxX63ow
- Os cookies parecem estar habilitados por padrão no AppDelegate.m (v2.5).
cordova
cookies
xmlhttprequest
Bernd
fonte
fonte
Respostas:
Amigo, também tentei sem sucesso usar cookies com phonegap. A solução foi usar localStorage.
Exemplo-chave rápido:
Exemplo rápido de conjunto de itens:
Obter Item Exemplo Rápido
Exemplo rápido de remoção de item:
Exemplo rápido claro:
Se você usa javascript para celular e web, pode usar este código para detectar esse ambiente:
Referências: http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html#localStorage http://cordova.apache.org/docs/en/6.x/cordova/storage/storage.html # page-toc-source
Esteja ciente: usar a navegação anônima no iOS pode fazer com que o armazenamento local não funcione como esperado. Um teste simples que está funcionando bem para mim:
fonte
Semelhante a você, eu queria usar cookies definidos por um servidor em meu aplicativo para que meu aplicativo fosse consistente com a web e não exigisse um ID de dispositivo separado ou outro método de autenticação.
O que descobri é o seguinte:
$.get()
ou$.post()
) não persistemA maneira de fazer um cookie persistir é usar o inAppBrowser in .
Primeiro, configure um servidor simples que aceite como parâmetro GET parâmetros de valor-chave que você deseja manter. Eu sou um cara python / tornado, então meu servidor pode ser assim:
Então, em seu aplicativo:
Você pode então chamar isso da seguinte maneira:
fonte
Você também pode anexar o id da sessão ao url solicitante e, dependendo da linguagem do aplicativo do servidor, buscar os dados da sessão usando o valor do id da sessão da string de consulta que você passou - por exemplo, em PHP, você pode abrir uma sessão existente passando o id da sessão. Embora isso não seja recomendado devido aos riscos de sequestro de sessão, você pode testar facilmente o IP e o navegador para ter certeza de que a sessão está vindo do mesmo cliente. É claro que isso exigiria que você expirasse sua sessão assim que o cliente fechasse o navegador da sessão e limitaria o armazenamento de visualizações em cache, pois a sessão seria incluída no html real. Armazenar dados no dispositivo local, pelo menos para mim, não é realmente uma opção, pois expõe muito ao cliente, o que é, na minha opinião, um risco de segurança muito maior.
fonte
$.post()
em jQuery, e definir uma variável local. Se você criptografar tudo, isso é bastante seguro.Use
device_id
para endereçar certos registros no lado do servidor. Criar uma tabela de banco de dados chamadosession
no seu servidor comdevice_id
,cookiename
,cookievalue
etimestamp
como colunas.Quando um cliente acessa seu servidor web via app phonegap, pegue o dele
device_id
e guarde os cookies em sua mesa. odevice_id here
atua como o token de acesso no protocolo OAuth.Agora, por razões de segurança, você precisa reduzir o período de validade desses registros, porque o device_id é permanente e seu cliente gostaria de vender seus telefones um dia. Portanto, use
timestamp
para armazenar o último acesso do cliente e excluir o registro se ele não tiver sido acessado por, digamos, 10 dias.fonte
Estou usando o Cordova 6.1 (versão mais recente no momento) e, na verdade, encontrei o seguinte:
Se eu definir o cookie via Javascript usando document.cookie = ... então ele não funciona. No entanto, se eu enviar uma função setCookie via Ajax para o servidor com uma função como
e definir o cookie no lado do servidor usando
então realmente funciona!
Espero que isto ajude. Felicidades
fonte
Tive o mesmo problema e decidi mover evrth para localStorage. Eu escrevi o plugin para que você também possa usá-lo: angular-cookies-mirror
fonte
claro que você pode.
app iônico basta enviar um requset ajax, cookie funciona bem ou não depende do servidor.
eu tenho trabalho com servidor Django python e servidor de nó, ambos os cookies funcionaram muito bem
código do nó abaixo
api resto
código de aplicativo iônico
você pode verificar meu código de curso aqui
fonte
Acho que a questão é fundamentalmente sobre como definir cookies do lado do cliente para um aplicativo Cordova. A maioria das informações sobre este tópico implica que a configuração de cookies do lado do cliente não funciona para Cordova.
Mas eu encontrei um plugin que me permite definir cookies do lado do cliente para meu aplicativo Cordova.
Confira https://www.npmjs.com/package/cordova-plugin-cartegraph-cookie-master .
Simplesmente funciona!
fonte
Eu também tive problemas de cookie de sessão com solicitações Cordova + XHR. Os cookies são perdidos a cada reinicialização do aplicativo. Duas coisas resolveram meus problemas:
Os cookies devem ter uma data de validade.
Todas as solicitações XHR devem ter o sinalizador withCredentials definido como verdadeiro.
fonte