我的 express-session 正在运行,我使用非常短的 cookie max-age(10 秒)对其进行了测试,它按预期运行:
app.use(session({
secret: 'xxx',
resave: false,
saveUninitialized: true,
cookie: { secure: true, maxAge: 10000 }
}));
奇怪的是,我在我的 Chrome 开发者工具中找不到 cookie。 express-session设置的cookie隐藏在哪里?
更新 #2: See my own answer如果你想知道在哪里可以看到 cookie 如果你正在向另一个域上的 express 服务器 发送 ajax 请求。
更新 - 我的快速服务器上的 session 管理:
app.post('/verify', function(req, res){
let out = [];
if(!req.session.userId){
if(typeof req.body.token !== 'undefined'){
admin.auth().verifyIdToken(req.body.token)
.then(function(decodedToken) {
let uid = decodedToken.uid;
if(!req.session.userId){
req.session.userId = uid;
}
res.send(uid);
// ...
}).catch(function(error) {
// Handle error
res.send(error);
});
}else{
res.send('no token received');
}
}else{
res.send('already logged in by session with uid: ' + req.session.userId + ' | session id: ' + req.session.id);
}
});
这就是服务器“启动”的方式:
app.listen(port, function () {
console.log('Example app listening on port ' + port + '!');
});
问题是 session 有效,但我看不到 cookie:
最佳答案
您可以在 Chrome DevTools 中的以下位置找到 Cookie:
应用程序 > 存储 > Cookies > express 服务器的 URL
为了证明 express 的 cookie 存储正确,我从一个简单的测试服务器开始。请注意,您在问题中使用了 cookie.secure = true,这需要与服务器的 https 连接。否则,cookie 将立即被浏览器删除。所以让我们使用这个简单的:
let fs = require('fs');
let privateKey = fs.readFileSync('../../../apache/conf/ssl.key/server.key', 'utf8');
let certificate = fs.readFileSync('../../../apache/conf/ssl.crt/server.crt', 'utf8');
let credentials = {key: privateKey, cert: certificate};
let https = require('https');
let app = require('express')();
let session = require('express-session');
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: {secure: true, maxAge: 10000}
}));
app.all('*', function(req, res) {
res.status(200);
res.setHeader('Content-Type', 'text/html');
if (!req.session.views) {
req.session.views = 0;
}
req.session.views++;
res.write('<p>views: ' + req.session.views + '</p>');
res.end();
});
https.createServer(credentials, app).listen(8080);
正常工作时,您应该能够在浏览器中打开 https://localhost:8080 并看到类似 views: 1 的内容。
刷新浏览器时,每次请求都会增加计数。没有请求的 cookie 的最长生命周期为 10 秒。在此之后,计数将再次从 1 开始。
在 10 秒生命周期内,您可以在 Application > Storage > Cookies > express Server 的 URL 下看到 cookie 在 Chrome DevTools 中。当然,在这种情况下,cookie 的值是加密的。
正如您稍后提到的,您的问题属于AJAX 调用。总的来说,都和上面一样。您甚至可以在 Storage > Cookies 选项卡中即时查看 AJAX 创建的 cookie。但前提是您的 cookie 配置正确并且属于同一域。
Storage 选项卡中的 cookie 由 cookie domain 和 cookie path 选择。该列表将显示并更新与模式匹配的所有内容。因此,在您的示例中,cookie 似乎与请求页面不匹配。
正如我在您的页面上看到的,您正在使用 ULR https://***.firebaseapp.com 打开页面并向 https://* 发出 AJAX 请求**.herokuapp.com/verify/,这是两个完全不同的域。这就是为什么您在 Storage 选项卡中看不到它们的原因!
如果这仍然不起作用,当使用相同的域时,在您的 session 配置中设置一个 cookie.path。然后一切都应该如上所述工作。 ;)
关于javascript - express-session cookie 隐藏在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48582939/
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
假设我有模型Topics和Posts,其中Topichas_many:posts和Postbelongs_to:topic。此时我的数据库中已经有了一些东西。如果我进入Rails控制台并输入Topic.find(1).posts我相信我得到了一个CollectionProxy对象。=>#]>我可以对此调用.each以获得枚举器对象。=>#]:each>我对CollectionProxy如何处理.each感到困惑。我意识到它在某些时候是继承的,但我一直在阅读API文档,他们并没有说得很清楚CollectionProxy是从什么继承的,除非我遗漏了一些明显的东西。Thispage似乎并没有
我刚刚了解到,在Java中,覆盖和隐藏之间是有区别的(静态方法是隐藏的,而不是覆盖),这意味着Java使用早期绑定(bind)和后期绑定(bind)。是否有与方法隐藏类似的东西,或者它只是具有方法重写? 最佳答案 Java具有三种不同的“方法”:实例方法,静态方法和构造函数。Ruby只有一个:实例方法。在Java中,静态方法的行为必须不同于实例方法,因为类不是对象。它们没有类,因此也没有父类(superclass),因此没有要覆盖的内容。在Ruby中,类与其他任何对象一样都是对象,它们具有一个类,该类可以具有父类(superclas
我以为它们存储在cookie中-但不,检查cookie没有任何结果。session也不存储它们。那么,我在哪里可以找到它们?我需要这个来直接设置它们(而不是通过flashhash)。 最佳答案 它们存储在inyoursessionstore.自rails2.0以来的默认设置是cookie存储,但请检查config/initializers/session_store.rb以检查您是否使用默认设置以外的东西。 关于ruby-on-rails-闪存消息存储在哪里?,我们在StackOverf
这里还有一个新手问题:require'tasks/rails'我在每个Rails项目的根路径中的Rakefile中看到了这一行。我猜这行用于要求vendor/rails/railties/lib/tasks/rails.rb加载所有rake任务:$VERBOSE=nil#LoadRailsrakefileextensionsDir["#{File.dirname(__FILE__)}/*.rake"].each{|ext|loadext}#LoadanycustomrakefileextensionsDir["#{RAILS_ROOT}/lib/tasks/**/*.rake"].so
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
当你安装一个新包时,例如,'geminstallfb-graph',文件下载到哪里了? 最佳答案 使用此命令查找特定gem的安装位置:gemwhich例如:gemwhichfb-graph 关于ruby-on-rails-Rubygems-包在哪里下载?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/13200065/
在Rails中向整数类添加方法的最佳位置在哪里?我想添加一个to_meters和to_miles方法。 最佳答案 如果您决心使用数字(或整数等)类来进行单位转换,那么至少要在逻辑上做到这一点,并具有一些实际值(value)。首先,创建一个Unit类,用于存储单位类型(米、英尺、肘等)和创建时的值。然后向Numeric添加一堆方法,这些方法对应于单元可以具有的有效值:这些方法将返回一个单元对象,其类型记录为方法名称。Unit类将支持一组to_*方法,这些方法将转换为具有相应单位值的另一种单位类型。这样,您可以执行以下命令:>>x=47
我有时遇到过Array(value)、String(value)和Integer(value)形式的转换。在我看来,这些只是调用相应的value.to_a、value.to_s或value.to_i方法的语法糖。所以我想知道:这些是在哪里/如何定义的?我在对象、模块、类等中找不到它们是否有任何常见场景更适合使用这些而不是相应/底层的to_X方法?这些可以用于泛型强制转换吗?也就是说,我可以按照[Integer,String,Array].each{|klass|klass.do_generic_coercion(foo)}?(...不,我真的不想那样做;我知道我想要的类型,但我希望避免
当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在