关于nodejs session 丢失的问题
发布于 8 年前 作者 berss 5987 次浏览 来自 问答

我刚刚接触编程。写了个小网站,每一个坑我都爬过了, 但最后增加管理员后台的时候,seesion丢失的问题却一直没能解决, 在百度谷歌接近五天了,各种什么放图标啊,记录sessionid啊,加入redis啊,都试过了,还是照样丢失。 实在没有办法,我想应该是我写得不对,希望给为大神教导我正确的方式方法。 症状:在login页面正确登录后,跳转到管理首页index,但是,一点其他管理页面,就立刻跳回login页。 代码如下: start.js

	var koa = require('koa');
	var favicon = require('koa-favicon');
	var vhost = require('koa-vhost');
	var render = require('koa-ejs');
	var session = require('koa-session-redis');
	var bodyParser = require('koa-bodyparser');
	var server = koa();
	server.use(favicon(__dirname+'/favicon.ico'));	//设置favicon
	var mma = require('./mma');	//管理后台
	server.keys=['mma12haha'];
	server.use(session({
		store: {
			host: '127.0.0.1',
			port: 6379,
			ttl: 3600,
		}
	}));
	server.use(bodyParser());	
	server.use(vhost('mma.test.com', mma));
	server.listen(80, function() {
    	console.log('管理后台启动。');
	});

mma.js

	var koa = require('koa');
	var serve = require('koa-static');
	var app = koa();
	app.use(serve(__dirname + '/static'),{maxage:86400000});	//静态文件夹
	app.use(function *(next){
		if(this.request.url == '/favicon.ico'){
			return;
		}
		yield next;
	});
	//设置路由
	app.use(require('./route/manage.js').routes());	//管理
	module.exports = app;

routes.js

	var router = require('koa-router')();
//如果session不对,则跳转会登陆页
router.all('*', function *(next) {
	console.log(this.request.url);
	var _parse = path.parse(this.request.url);
	var _dir = _parse.dir.substr(1);
	var _sep = _dir.split(path.sep);
	if(_sep == "m"){
		var n = this.session.mlogin || 0;
		if(n == 0){
			this.redirect("/login");
			this.status = 301;
			return;
		}else if(this.session.mlogin != 'e3f08c66bc9'){
			this.session.mlogin = null;
			this.redirect("/login");
			this.status = 301;
			return;
		}
	}
	yield next;
});
//获取登录页面
router.get('/login', function *(next) {
	yield this.render('mma/login');
});	
//提交登录表单
router.post('/login', function *(next) {
	if(this.request.body.u!='admin'){
		this.redirect("/login");
		this.status = 301;
		return;
	}
	if(this.request.body.p!='123456'){
		this.redirect("/login");
		this.status = 301;
		return;
	}
	//验证正确,写入session,跳转管理首页
	this.session.mlogin = "e3f08c66bc9";
	this.redirect("/admin/index");
	this.status = 301;
});
\n
5 回复

server.use(bodyParser())挪到server.use(session({上面去

@SinalVee 好,我试试看。😊

我又回来了。这个问题我本以为解决了,但今天又出现了……看来并不是代码位置的关系。。。

12.png

实际情况是这样……我都要哭了

这个问题最后解决了吗?我也遇到这个问题啦 ,求指导。

回到顶部