【问题标题】:cookie-session doesn't save session modificationcookie-session 不保存会话修改
【发布时间】:2016-02-11 07:21:48
【问题描述】:

我想记住某人访问的最后一页 (like here)
我试图用 cookie-session 来做,但它不像我想象的那样工作。

我看到this 并尝试this example 延长会话但没有成功。

这里是代码:

var session = require('cookie-session');
var express = require('express');

var app = express();

app.use( session({ secret: 'secret' }) );


app.get('/a', function (req, res) {
  if(req.session.last) {
    res.write("the last page was " + req.session.last + ". ");
  }  
  req.session.last = "a";
  res.end("Page A");  
});

app.get('/b', function (req, res) {
  if(req.session.last) {
    res.write("the last page was " + req.session.last + ". ");
  } 
  req.session.last = "b";  
  res.end("Page B");
});

app.get('/c', function (req, res) {
  if(req.session.last) {
    res.write("the last page was " + req.session.last + ". ");
  } 
  req.session.last = "c";  
  res.end("Page C");
});

app.listen(8080);

【问题讨论】:

    标签: node.js express cookie-session


    【解决方案1】:

    您确定您的日志中没有出现“发送后无法写入标头”的错误吗?您可以尝试将会话的分配移至 res.write 调用之前吗?从您的第一个链接,在 cmets...

    “我不断收到错误消息,标头在发送后无法设置。 我修改了代码,以便在发送任何正文之前设置 lastPage,例如:

    var responseText;
    
    if(req.session.lastPage) 
    responseText = 'Last page was: ' + req.session.lastPage + '. ';
    
    else
    responseText = 'You\'re Awesome';
    
    req.session.lastPage = '/awesome';
    res.send(responseText);
    

    【讨论】:

    • 谢谢,现在可以使用了。我知道在发送回复之前我必须更改我的req.session。但我不明白为什么我没有收到错误。可能是因为我没有尝试写入标头,只是尝试修改请求中的会话
    • 因为它将所有信息存储在 cookie 中。因此,如果您更改信息,cookie 将被重写。由于整个会话对象被编码并存储在 cookie 中,因此可能会超过不同浏览器的最大 cookie 大小限制。 RFC6265 规范建议浏览器应该允许每个 cookie 至少 4096 字节(通过 cookie 的名称、值和属性的长度之和来衡量)实际上这个限制在浏览器之间略有不同。在此处查看浏览器限制列表。根据经验,每个域不要超过 4093 字节。
    • 感谢您的补充。因此数据进入会话并存储到 cookie 中。我们可以从服务器端的 cookie 中获取数据吗?我正在尝试使用 cookie-parser,但我只能得到一个 express:sess 和 express:sess.sig
    猜你喜欢
    • 2018-08-25
    • 2018-06-30
    • 2020-07-16
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 2020-09-16
    相关资源
    最近更新 更多