当我访问 nadex.com 报价时,Firebug 告诉我我发送了这些 cookie(但实际上只有一行):
JSESSIONID=Qk3lNyhpQCpGpfx4bghpJLd2ML90tNx3lKvpvPLcvdmJyGRGztH5!1308128606!-757\
827124; bhCookieSess=1; bhCookiePerm=1; IGFOREXCOOKIE=; LS__LSEngine_S=exist_13\
02897154477; LS__LSEngine_K=SHARE_SESSION; LS__https://demo-mdp.nadex.com=1; LS\
__LSEngine=73; iconStateSetting=/dealing/pd/cfd/login/loginUser.htm?iconsEnable\
d=true; homeUrl=https://demo.nadex.com/content/sites/ndx/en_US/; showDmaHelp=fa\
lse
并且 Firefox 的“编辑/首选项/隐私/删除单个 cookie”似乎同意。
但是,当我查看 cookies.sql 时,上面的一些 cookie 没有显示:
cp ~/.mozilla/firefox/xxxxxxxx.default/cookies.sqlite /tmp && \
echo "SELECT name FROM moz_cookies;" | sqlite3 /tmp/cookies.sqlite |\
sort | uniq
(请注意,我必须“cp”,因为原始数据库已被 Firefox 锁定)。
结果很丑陋且毫无帮助,但我特别指出,这些值并没有出现,尽管我期望它们会出现:
- JSESSIONID(可能是最重要的一个)
- 主页网址
- 显示Dma帮助
- 可能还有其他
我如何找到这些“隐藏”的 cookie?我正在编写一个 perl/curl 脚本来下载数据,但如果没有 JSESSIONID cookie,它就无法工作(而且从 Firebug 手动复制不够自动化,而且 JSESSIONID 经常更改)
编辑(评论太长/太难处理):@Lekensteyn 感谢 GM 脚本!当我访问 nadex.com 并登录时,它不会更新 webappsstore.sqlite,但它会更新 sessionstore.js,其中包含:
{"host":"www.nadex.com","value":"3x0LNpvGDHQq\
xls7FxbqtJ2pFlL0gSyk9YvBkPs09r4yvQyZDMWs!-1593496027!1301994507","path":"/price\
stream","name":"JSESSIONID"}
所有内容都在一行上(事实上,整个文件只有一行)。
但是,我还没有检查这是否与 GM 脚本有关,或者无论如何都会发生。至少,它给了我一个新的挖掘点。
答案1
我怀疑 Firefox 出于数据完整性和性能原因不会直接更新 cookies.sqlite 文件。相反,它将数据临时存储在 cookies.sqlite-journal(Firefox 3.x)中。由于会话 cookie 经常更改,因此 cookie 不存在于 cookies.sqlite 文件中是合理的。关闭 Firefox 时,将应用对 cookies.sqlite 的更改。
可以使用 Greasemonkey 脚本来解决。
- 安装Greasemonkey 插件。
重启Firefox。同时,将下面的文本保存为“jsessionid.user.js”。
// ==UserScript== // @name JSESSIONID to localStorage // @namespace [email protected] // @description Saves the JSESSIONID cookie in localStorage // @include https://demo.nadex.com/dealing/pd/cfd/security* // ==/UserScript== (function() { var sessid = document.cookie.match(/JSESSIONID=([^;]+)/); if (sessid) { var oldSID = localStorage.JSESSIONID; if (sessid != oldSID) localStorage.JSESSIONID = sessid[1]; } })();
如果会话 ID 与之前保存的会话 ID 不同,则此操作应在登录后立即检索会话 cookie,并使用 HTML5 存储进行存储。如果您需要让脚本更早地保存会话 ID,则需要将该
@include
行修改为类似 的内容https://demo.nadex.com/*
。我注意到没有会话 ID 通过 HTTP 发送,只有 HTTPS。- 在 Firefox 中打开
jsessionid.user.js
文件(或将其放入 Firefox)。系统将提示您安装它。接受它。 在 Bash 中,使用类似:
sessid=$(sqlite3 ~/.mozilla/firefox/xxx.xxx/webappsstore.sqlite "SELECT \ value FROM webappsstore2 WHERE key='JSESSIONID' AND secure='1' \ AND host LIKE 'moc.xedan.%' LIMIT 1;")
moc.xedan.
是域的一部分,以相反的顺序排列。
为了调试,您可以使用下一个书签:
javascript:alert("JSESSIONID=" + localStorage.JSESSIONID);
null
如果未找到此类 ID,则会显示。请注意,在https://demo.nadex.com
或上执行此操作很重要http://demo.nadex.com
。此书签小程序可直接粘贴在位置栏中。
答案2
您可以在个人资料中的 sessionstore.js 中找到您的会话 ID。grep 查找:
{"host":"<your site>","value":"(.+)","path":"/","name":"JSESSIONID","httponly":true}
使用如 FF cookie 管理窗口中所示的适当值。
这可能仅在您在属性中激活了会话恢复机制后才有效。