php - 此书签如何让您保持登录到此站点?

标签 php javascript cookies bookmarklet evernote

我遇到过Evernote's bookmarklet并且想知道这是如何工作的。

您可以将它拖到您的书签上,然后转到任何网页,单击该书签,它会首先要求您登录。所有这些我都已经完成并且知道它是如何工作的。

我不明白的一点是,当您登录时,他们会验证您的身份并允许您提交内容(在本例中为网站 URL 等)。完成后,在您正在查看的页面上放置一个小覆盖层的小书签就会消失。

When you go to a new tab and use the bookmarklet again you are still logged in! How?

当他们的书签工具将叠加层加载到页面上时,我可以看到他们正在使用 iFrame - 但他们是否设置了 cookie 或其他东西?如果是这样,这安全吗?任何人都可以更改这些值吗?或者他们使用某种私钥/公钥系统

顺便说一句,我想使用 PHP/Javascript(可能是 JQuery)复制这个 Bookmarklet。如果有人能帮助我了解他们是如何做到这一点或指出相关教程,我将不胜感激。

感谢大家的帮助。

最佳答案

对于初学者,这是小书签执行的代码:

(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);
}

})();

它的作用相对简单。它尝试从 Evernote 站点获取脚本并向请求添加时间戳,以便它始终提取新副本。如果成功,一堆 JavaScript 将被添加到页面,该页面构建一个 iframe,从中公开所有 Evernote 功能,然后 iframe 可以使用标准 cookie 等来确保您已登录,然后处理您的请求.

catch block 是为了防止动态脚本加载失败,这会导致您被重定向到 Evernote 站点,因此(我猜)它可以从那里剪辑内容。

要回答关于您如何仍处于登录状态的具体问题,您仍然处于登录状态是因为您的浏览器现在具有 Evernote 站点 (www.evernote.com) 的 session cookie,因此当 iframe 在第二个站点,这些 cookie 随之而来,Evernote 会识别出您已登录。使用 cookie 几乎是网络 session 的标准,因此他们在这里没有做任何特别的事情,我相信您可以搜索 SO围绕基于 cookie 的 session 的安全问题。

要点是 iframe 本质上就像打开一个单独的窗口,只是它允许基本页面将一些有限的数据传递给 iframe,以便它知道您在哪个网站上。

希望对您有所帮助。

关于php - 此书签如何让您保持登录到此站点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2534939/

相关文章:

php - 您将如何映射或合并来自多个源/源的不同数据?

php - 多个 SELECT FROM 多表并按日期排序

在类中获取类时 Javascript 失败

php - 如何在 PHP 中正确获取 Cookie 的值?

java - 从实现 testcookie-nginx-module 的网站生成 cookie

php - 在xml文件中添加子节点

Javascript根据选择隐藏输入字段更改文本而不是值

javascript - 我怎样才能用另一个函数包装每个快速路由处理程序

javascript - 为什么同步监听子进程 “after” 产生它被认为是安全的?

java - Android HttpClient cookie