0

问题:我正在尝试检索存储在 aws Dynamodb 中的会话数据,但 sessionID 总是在从同一端点到我的服务器较少的快速应用程序的连续调用之间发生变化。

快递代码:

app.get('/addtocart/:id', (req, res) => {
    let cart;
    const id = req.params.id;
    const sid = req.sessionID;

    Session.getItem({ "sessionId": sid }, function (data, err) {
        if (!err) {
            cart = new Cart(data.attrs.sess.cart);
            console.log('\nTHe new cart is:\n', cart);
            addToCart();
        }
        else {
            cart = new Cart({});
            addToCart();
        }
    })

    function(){
//login to add to cart
    }
    }

Dynamodb 存储配置

const options = {
    "table": {
        "hashPrefix":'',
    },
    "dynamoConfig": {
        "accessKeyId": process.env.AWS_ACCESS_KEY_ID,
        "secretAccessKey": process.env.AWS_SECRET_ACCESS_KEY,
        "region": 'ap-south-1'
    },
    "keepExpired":false,
};

app.use(session({
store: new DynamoDBStore(options),
secret: 'mySecret',
resave: false,
saveUninitialized: true,
cookie:{
    httpOnly:true,
    // expires: new Date(Date.now() + hour),
    maxAge: hour
}
}));

在上面的代码中,我在后端为我添加到购物车的每件商品都点击了“/addtocart/:id”路线。我在端口 8080 上加载我的前端静态 html 页面,在端口 3000 上加载我的服务器)

  • 我已经在 aws lambda 上部署了我的 express 应用程序,并且我正在使用 dynamodb 来存储会话。
  • 我正在尝试构建一个购物车模块,因此当我在前端(在托管在 s3 上的静态 html 页面上)向购物车添加一些商品时,它应该保留以前的购物车配置并将当前商品添加到其中。相反,一旦我创建了一个新的购物车并将其存储在 dynamoDB 中,会话 id 会为添加的每个项目更改并创建一个新的购物车对象并再次存储一个会话,而不是保留旧的购物车并将数据添加到顶部其中。
  • 如果我从后端点击相同的 addproduct 路由,并且如果我将Acess-Control-Allow-Origin标头设置为http://localhost:8080 ,则购物车将被保留。

  • 由于这是一个无服务器应用程序,因此我无法修复端点。因此,在从前端进行 ajax 调用时,我没有将 xhrCredentials 选项设置为 true,并且后端的 orgin 标头也设置为“*”。

  • 有没有一种方法可以保留来自不同用户对服务较少的 lambda express 应用程序的不同调用的购物车信息,购物车数据存储在 dynamodb 中。有关 cookie 和会话管理的任何信息都会有所帮助,并进一步澄清了我的困惑。

我使用express-session管理会话,使用 Dynamodb-store 将会话存储到 db

4

0 回答 0