cookie
cookie是HTTP的一个性质,不优雅的解决了HTTP无连接,服务器对客户端的识别问题
HTTP是无连接的,无记忆性的。
服务器在response
的报文头设置一个set-cookie的报文头,今后浏览器每次访问服务器的时候,都要带着这个cookie字段上去,服务器就变相的记住客户端电脑曾经的行为。
express框架中的cookie
var express=require("express");
var app=express();
app.get("/",function(req,res){
//设置cookie
res.cookie("a",100,{maxAge:90000,httpOnly:true});
res.send("首页");
});
//监听
app.listen(3000);
使用
cookie-parser
npm包识别cookie ,安装该npm包,来格式化cookie,即可在控制台读取cookie;
//识别cookie ,旅游小足迹案例
var express=require("express");
var app=express();
//引入包
var cookieParser=require('cookie-parser');
//中间件
app.use(cookieParser());
app.set("view engine", "ejs");
app.get("/",function(req,res){
//设置cookie
//res.render("index");
// res.send("首页");
res.send("你的旅游足迹"+req.cookies.travel);
});
app.get("/:city",function(req,res){
//读cookie
var travel=req.cookies.travel;
if(!travel){
travel=[];
}
//改cookie
var city=req.params.city;
travel.push(city);
//设cookie
res.cookie("travel",travel);
res.send(city+"旅游攻略");
})
//监听
app.listen(3000);
Session
session依赖cookie,是一种特殊的cookie,通常用于制作登录验证。
cnpm 安装express-session
包$ cnpm express-session install --save
文档地址:https://npm.taobao.org/package/express-session
//session基本用法
var express=require("express");
var app=express();
var session=require("express-session");
app.set("trust proxy",1);
app.use(session({
secret:"kaola",
resave:false,
saveUninitialized:true,
cookie:{maxAge:60000}
}))
app.get("/",function(req,res){
console.log(req.session);
if(!req.session.a){
req.session.a=parseInt(Math.random()*10000);
}
res.send("随机数是"+req.session.a);
})
//监听
app.listen(3000);
//session登录小案例
var express=require("express");
var app=express();
//引入包
var session=require("express-session");
//引入包
var formidable=require('formidable');
app.set("trust proxy",1);
app.use(session({
secret:"kaola",
resave:false,
saveUninitialized:true,
cookie:{maxAge:60000}
}))
app.get("/",function(req,res){
//根据session情况来判断用户是否登录
if(!req.session.login){
//请登录提示
res.set('Content-Type','text/html');
res.write("你没有登录,请登录");
res.write("<form action='/login' method='post'>");
res.write("<p><input type='text' name='username'/></p>");
res.write("<p><input type='password' name='password'/></p>");
res.write("<p><input type='submit' value='登录'/></p>");
res.write("</form>");
res.end("");
}else{
res.write("这是首页,欢迎你");
res.end("");
}
});
//登录接口
app.post("/login",function(req,res){
var form=new formidable.IncomingForm();
form.parse(req,function(err,fields,files){
//console.log(fields);
//验证账号密码
if(fields.username=="admin" && fields.password=="123"){
//下发session
req.session.login=true;
res.send("登录成功");
}else{
res.send("登录失败");
}
});
})
//监听
app.listen(3000);