post请求session和get请求session的区别
发布于 3 年前 作者 lzboyue 5667 次浏览 来自 问答

在Nodejs Express框架中,在post请求中设置的session值,为什么只能在post类型的请求中获取,而不能再get类型请求中获取?请大家帮帮我

15 回复

这个session本来不是共用的吗,为什么在get类型请的求中获取不到?

中间件写错位置了吧?从 session 中间件这块调试一下吧

@alsotang

这就是使用session中间件的位置

var express = require(‘express’); var http=require(‘http’); var path=require(‘path’);

var cookieParser = require(‘cookie-parser’); var session = require(‘express-session’); var methodOverride =require(‘method-override’); var bodyParser = require(‘body-parser’);

var config = require(’./config/config.js’); var _ = require(‘underscore’);

var AV=require(‘leanengine’); var cloud=require(’./cloud’); var async=require(‘async’);

var app = express();

app.set(‘views’,path.join(__dirname,‘views’)); app.set(‘view engine’,‘html’);

app.use(cookieParser()); app.use(session({ secret:‘12345’, key:‘name’, cookie:{maxAge:1000602}, resave:false, saveUninitialized:true }));

app.use(cloud);

app.use(AV.Cloud.CookieSession({secret: ‘wDdejdbGekenvUsoNen’, maxAge: 3600000, fetchUser: true})); app.use(methodOverride(’_method’)) app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(express.static(path.join(__dirname, ‘public’)));

app.use(cookieParser()); app.use(session({ secret:‘12345’, key:‘name’, cookie:{maxAge:1000602}, resave:false, saveUninitialized:true })); 这就是配置session中间件的代码,这个代码有问题吗?

你的 session 和 AV.Cloud.CookieSession 冲突了吧,你上他们的论坛问问啊

saveUninitialized改为false试试呢?

@htoooth 恩,有可能,谢谢

这个问题还有其他的思路吗?

@lzboyue 你怎样调用的方法?在AVCloud中云函数等,都是post的形式调用的。get 获得不了session 你是调用自己的方法吧。

@htoooth 下面就是调用的代码.其中req.session.user在app.post请求中赋的值 app.get(’/ajax/validate’,function(req,res) { if(req.session.user) { var str={ “status”:“success”, “code”:40015, “user”:req.session.user } return res.json(str); } else { return res.json(statusInfoArray[15]); } });

@lzboyue post 使用和设置session 的方法呢?

@htoooth 下面就是post使用的代码: app.post(’/user/signin’,function(req,res) { var user1=req.session.user; var username=req.body.UserName; var password=req.body.Password; var findUser=new AV.Query(User); findUser.equalTo(“username”,username); findUser.select(“objectId”); findUser.find({ success:function(results) { if(results.length == 0) { //不存在该用户 return res.json(statusInfoArray[12]); } else if(results.length == 1){ AV.User.logIn(username,password,{ success:function(user) { var user={‘username’:username}; req.session.user=user; //登录成功 var str={ “user1”:user1, “user”:user } return res.json(str); }, error:function(user,error) { //登录失败 return res.json(statusInfoArray[15]); } }); } else { //出现异常 return res.json(statusInfoArray[7]); } }, error:function(error) { //查询数据出错 return res.json(statusInfoArray[4]); } }) });

你这是做接口的吧,客户端发送请求的时候,cookie有带吗?

@htoooth 前端使用的是Angularjs,是通过http获取后台数据的

回到顶部