Pergunta

eu me deparei Bookmarklet do Evernote e queria saber como isso funcionava.

Você pode simplesmente arrastá-lo para o seu favorito e ir para qualquer página da web, clicar nesse bookmarklet e ele primeiro solicitará que você faça login.Tudo isso eu já fiz e sei como funciona.

A parte que não entendo é que quando você faz login, eles o autenticam e permitem que você envie coisas (nesse caso, o URL de um site, etc.).Quando terminar, o bookmarklet que colocou uma pequena sobreposição na página que você está visualizando desaparece.

Quando você vai a uma nova guia e usa o Bookmarklet novamente, você ainda está conectado!Como?

Posso ver que eles estão usando um iFrame quando o bookmarklet carrega a sobreposição na página - mas eles definem cookies ou algo assim?Se sim, isso é seguro?Qualquer pessoa pode alterar os valores?Ou eles estão usando algum tipo de sistema de chave pública/privada

A propósito, eu gostaria de replicar este Bookmarklet usando PHP/Javascript (talvez JQuery).Eu apreciaria se alguém pudesse me ajudar a entender como eles fazem isso ou me indicar tutoriais relevantes.

Obrigado a todos por qualquer ajuda.

Foi útil?

Solução

Para começar, aqui está o código que o bookmarklet executa:

(function(){
    EN_CLIP_HOST = 'http://www.evernote.com';

try{
    var x = document.createElement('SCRIPT');
    x.type='text/javascript';
    x.src = EN_CLIP_HOST + '/public/bookmarkClipper.js?' + (new Date().getTime()/100000);

    document.getElementsByTagName('head')[0].appendChild(x);

} catch(e) {

    location.href = EN_CLIP_HOST + '/clip.action?url=' + encodeURIComponent(location.href) + '&title=' + encodeURIComponent(document.title);
}

})();

O que faz é relativamente simples.Ele tenta pegar um script do site Evernote e adiciona um carimbo de data/hora à solicitação para que sempre obtenha uma nova cópia.Se isso der certo, um monte de JavaScript é adicionado à página que cria um iframe a partir do qual todas as funcionalidades do Evernote são expostas e o iframe pode então usar cookies padrão, etc.para garantir que você esteja conectado e processar sua solicitação.

O bloco catch é apenas para o caso de falha no carregamento dinâmico do script, o que faz com que você seja redirecionado para o site do Evernote para (suponho) que ele possa recortar o conteúdo de lá.

Para responder à pergunta específica de como você ainda está logado, você ainda está logado porque seu navegador agora possui cookies de sessão para o site Evernote (www.evernote.com), então quando o iframe abrir no segundo site, esses cookies acompanham e o Evernote reconhece que você está logado.O uso de cookies é praticamente o padrão para sessões na web, então eles não estão fazendo nada de especial aqui e tenho certeza que você pode pesquisar no SO os problemas de segurança relacionados às sessões baseadas em cookies.

O ponto principal é que o iframe é essencialmente como ter uma janela separada aberta, exceto que permite que alguns dados limitados sejam passados ​​pela página base para o iframe, para que ele saiba em qual site você está.

Espero que ajude.

Outras dicas

Eles provavelmente estão usando cookies. Eles provavelmente abrem um iframe, com JavaScript, para uma página de PHP em seu site, então o site procura um cookie de login, se estiver lá, o site puxa as informações do usuário e faz o que faz.

Apenas tenha cuidado, você precisa de uma maneira de verificar se o cookie não foi criado pelo usuário para enganar o site. Eu armazenava uma string aleatória em um cookie e também no banco de dados (na tabela de usuários). Crie a string aleatória sempre que o usuário efetua login. Quando o usuário tentar usar o Bookmarklet, compare as duas seqüências e permita apenas acesso se forem iguais, se não forem, exclua os cookies e peça ao usuário que faça login. . Exclua quando a sessão do navegador terminar.

Esperava que isso ajudasse, Max

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top