【问题标题】:Express Session not saving when using $.ajax({});使用 $.ajax({}) 时 Express Session 不保存;
【发布时间】:2015-03-13 08:32:05
【问题描述】:

正如它所说的那样。我试图在 Express 会话中保存一些数据,而 Express 似乎将每个 AJAX 请求视为一个单独的会话,因此不保存我的数据。

在客户端

$.ajax({
  url: '/orders',
  method: 'post',
  data: { item: item }
});

在服务器上

router.post('/orders', function(req, res) {
  var sess = req.session,
      order = sess.order || [],
      item = req.body.item || '',
      quantity = req.body.quantity || 1;

  if (!item) return res.status(404).end();

  if (order[item]) {
    order[item] += quantity;
  } else {
    order[item] = quantity;
  }

  //save our order to the session
  req.session.order = order;
  req.session.save();
  console.log(req.session.order); // verified that req.session.order is set

  return res.status(200).end();
});

这不是 CORS 请求 - 这是我从本地运行的客户端访问本地服务器。

【问题讨论】:

  • 你有.success回调吗?
  • 我不认为这很重要,但即使我有一个,行为也是一样的。
  • 我相信会话字符串应该与 ajax 请求一起发送到服务器。例如,在 HTTP Cookie 标头中。是吗?有时 AJAX 请求与 Postman 扩展一起使用,但在应用程序中不可用。您可以尝试使用 Postman 吗?
  • 有趣的是,如果你的会话变量类型是一个数组,它不会保存它的内容。我所要做的就是将order = sess.order || [] 更改为order = sess.order || {}
  • 你的客户端有connection.sid cookie吗?

标签: javascript jquery node.js express


【解决方案1】:

使用 fetch 对我有用,如下所示

fetch(url, { credentials: 'include',
             method: 'post',
             ...// other fetch configs
}).then(onsuccesscallback)

配置获取时关键是包含凭据

【讨论】:

    【解决方案2】:

    将以下代码添加到您的$.ajax 配置可能会解决问题:

    $.ajax({
      xhrFields: {
        withCredentials: true
      },
      ... // other settings
    })
    

    【讨论】:

      猜你喜欢
      • 2018-06-30
      • 2016-11-12
      • 2018-03-07
      • 2019-07-17
      • 2019-06-28
      • 2020-07-13
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多