Node.js 2-cookie 和 session
var express = require('express');
var app = express();
/* var cookieParser = require('cookie-parser'); */
var session = require('express-session');
var path = require('path')
app.use('/static', express.static(path.join(__dirname, '../Web-M-XYS')))
//即 前后端同源才能接收到cookie
app.use(session({
secret: 'hubwiz app', //secret的值建议使用随机字符串
cookie: {maxAge: 10 * 1000 * 30} // 过期时间(毫秒)
}));
var fs = require('fs')
fs.readFile("./src/data.json")
// 主页输出 "Hello World"
app.get('/', function (req, res) {
console.log("主页 GET 请求");
res.send('Hello GET');
})
// POST 请求
app.post('/', function (req, res) {
console.log("主页 POST 请求");
res.send('Hello POST');
})
// /del_user 页面响应
app.get('/del_user', function (req, res) {
console.log("/del_user 响应 DELETE 请求");
//res.send('删除页面');
if (req.session.sign) {//检查用户是否已经登录
console.log(req.session);//打印session的值
res.send('welecome <strong>' + req.session.name + '</strong>, 欢迎你再次登录');
} else {//否则展示index页面
req.session.sign = true;
req.session.name = '汇智网';
res.end('欢迎登陆!');
}
})
// /list_user 页面 GET 请求
app.get('/list_user', function (req, res) {
console.log("/list_user GET 请求");
console.log('session id: ', req.session.id);
res.set({'Content-Type':'application/json','Access-Control-Allow-Origin':'*'})
res.cookie('haha', 'name1=value1&name2=value2', {
maxAge: 20 * 1000, path: '/', httpOnly: false
});
res.send(data.toString());
})
/* // 对页面 abcd, abxcd, ab123cd, 等响应 GET 请求
app.get('/ab*cd', function (req, res) {
console.log("/ab*cd GET 请求");
res.send('正则匹配');
}) */
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
cookie & session
var express = require('express');
var app = express();
/* var cookieParser = require('cookie-parser'); */
var session = require('express-session');
var path = require('path')
app.use('/static', express.static(path.join(__dirname, '../Web-M-XYS')))
//即 前后端同源才能接收到cookie
app.use(session({
secret: 'hubwiz app', //secret的值建议使用随机字符串
cookie: {maxAge: 10 * 1000 * 30} // 过期时间(毫秒)
}));
导入session
var session = require(‘express-session’);
相当于我用这个加密,如果别人获得这个密码,就能对session加密解密
secret: ‘hubwiz app’, //secret的值建议使用随机字符串
创建了session,就会给客户端自动分配给sessionId,(一般session里面包括时间戳和sessionId,并且会根据secret自动加密)服务端可以通过console.log('session id: ', req.session.id);
拿到sessionId的值。
例如:
cookie 一般是服务端自己进行加密
设置cookie:
res.set({'Content-Type':'application/json','Access-Control-Allow-Origin':'*'})
res.cookie('haha', 'name1=value1&name2=value2', {
maxAge: 20 * 1000, path: '/', httpOnly: false
});
注意 (前端ajax收不到session问题)
方法1.前后台同源
var path = require('path')
app.use('/static', express.static(path.join(__dirname, '../Web-M-XYS')))
//即 前后端同源才能接收到cookie
这里的index.js是Node文件下的index.js 是node.js的入口文件
可参考:https://www.cnblogs.com/slovey/p/9213631.html
方法2.
参考:https://blog.****.net/fortunegrant/article/details/79534831
xhrFields 大概的意思是,默认情况下,标准的跨域请求是不会发送cookie等用户认证凭据的。所以,当你再次访问远程api的时候,cookie是不会被带上的,于是乎,服务器理所当然地认为你还没有登录。MDN上的简单介绍 credentials 。用XMLHttpRequest请求的时候,我们需要设置属性 withCredentials=true ;
$(function () {
$.ajax({
type:'get',
url:'http://localhost:8081/list_user',
dataType:'json',
xhrFields: {
withCredentials: true
},
success:function(data){
console.log("data:",data);
},
error:function(err){
console.error(err)
}
})
});