javascript - 快速 session 不会在页面之间持续存在

标签 javascript node.js session express

我正在尝试保存 session ,但是当我保存 session 时,下一个请求中的 session 不存在。

当我向 /login 发送 ajax 请求时,我使用 req.session.username 设置 session ,然后发回一个对象,上面写着 {success :真。然后我刷新页面,如果 session 中存在用户名,我会显示用户页面,否则我会显示主页。

每次我在 / 刷新页面时,它总是显示登录,即使我将请求发送到 /login 并设置了 session 。为什么 session 没有保存?

let express = require('express')
let sessions = require('express-session')
let bodyParser = require('body-parser')
let app = express()

app.use(sessions({
  secret: 'connection-id',
  resave: true,
  saveUninitialized: true,
  cookie: { maxAge: 60000 }
}))

app.use(bodyParser.json())

app.get('/', (req, res) => {
  if (req.session.username) {
    res.render('pages/home')
  } else {
    res.render('pages/index')
  }
}).post('/login', (req, res) => {
  if (req.xhr) {
    req.session.username = req.body.username
    res.send({ success: true })
  } else {
    res.sendStatus(500)
  }
})

客户端:

let response = await fetch('/login', {
  method: 'post',
  headers: {
    'X-Requested-With': 'XMLHttpRequest',
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: new FormData((document.getElementById('login-form'))).toJson()
})

let json = await response.json()
if (json.success) {
  window.location.href = '/'
}

当我发出 Ajax 请求时,我得到以下 header :

set-cookie:connect.sid=s%3At25S_TmjwL6vVkhyJ9LuKIyy4EH1LTcy.Zu4fBpMibfjmMofxQI5K%2FmgAYHWFqQf3x8HPzcQbDH4; Path=/; Expires=Sun, 23 Jul 2017 15:29:26 GMT; HttpOnly

Cookie

编辑

所以在我的代码中注释掉所有内容并慢慢取消注释并测试这些行之后,我发现这不起作用:

req.session.username = req.body.username // body.username Contains a string

但是,这确实有效:

req.session.username = 'Billy'

我不确定为什么要这样做。有什么建议吗?

最佳答案

所以我想出了我的问题,它与服务器无关,而是与 ajax fetch() 请求有关。

我需要像这样向它添加选项 credentials: 'include':

let response = await fetch('/login', {
  method: 'post',
  credentials: 'include',
  headers: {
    'X-Requested-With': 'XMLHttpRequest',
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: new FormData(document.getElementById('login-form')).toJson()
})

关于javascript - 快速 session 不会在页面之间持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45260581/

相关文章:

javascript - 如何实现多方向滚动跟随效果?

session - node.js 通过身份验证状态

node.js - 跨多个服务器持久化websocket连接对象

javascript - Babel-node : one await works, 不止一个没有;因语法错误而中断:意外的标记

javascript - 为什么链接 promise 不起作用?

session - 为什么关闭浏览器后cookies不会过期?

c# - 超出 WCF MaxConcurrentSessions

javascript - KendoUI 数据属性事件处理程序和 'this' 范围

javascript - 鼠标悬停导航链接不起作用

javascript - 计算多个圆片段旋转