session是另一种记录客户状态的机制,cookie保存在客户端,session保存在服务器
session运行在服务器,客户端第一次访问服务器时,就可以将客户的登录信息保存。
当客户访问其他界面时,可以判断客户的登录状态,做出提示,相当于登录拦截。
session可以和Redis或者数据库等结合做持久化操作,当服务器挂掉可不会导致信息丢失(购物车)
当重新打开浏览器信息不保存
当浏览器向服务器发送请求时,会在服务器建立一个session对象,相当于一个key,value的键值对,然后将key(cookie)f返回到客户端,当浏览器再次访问时,携带key(cookie)找到对应的session(value),客户的信息都存在session中。
用来实现sessionb,设置sessionid标识的方式一般有2种,URL重写和cookie
URL重写:“;sessionid=xxx”再次请求这个url的时候, sessionid会被传到服务器
cookie:在服务器response返回的时候,会把sessionid放在http头部放在cookie属性里传到客户端
再次访问服务器的时候,sessionid会随着cookie一起请求
(1)安装 npm i session
(2)引入var session=require("express-session")
(3)设置中间件
app.use(session({
secret:'this is a string key',//加密的字符串,里面内容可以随便写
resave:false,//强制保存session,即使它没变化
saveUninitialized:true //强制将未初始化的session存储,默认为true
}))
(4)使用
设置值 req.session.username=“lhj”
获取值 req.session.username
1,cookie的使用
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires+"; path=/" 这个很重要代表在那个层级下可以访问cookie
console.log(d)
}
//获取cookie
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while(c.charAt(0) == ' ') c = c.substring(1);
if(c.indexOf(name) != -1) return c.substring(name.length, c.length);
}
return "";
}
//删除 cookie
function clearCookie(name) {
setCookie(name, "", -1);
}
2,sessionStrorage的使用
localStorage.setItem('name','li')
req.localStorage.getItem('name')
sessionStorage.removeItem('name');
localStorage.clear()
(负载均衡:假如北京的一台计算机访问北京的一台服务器,处于登录状态时,又去访问北京的另一台服务器,为了不让数据丢失,就把session保存到数据库,用户的key(session的id)是一样的)
(1)安装 npm i connect-mongo/express-session
(2)引入 var session=require("expression-session")
var MongoStore=require("connect-mongo")(session)
(3)配置中间件
app.use(session({
secret:'this is a string key',//加密的字符串,里面内容可以随便写
resave:false,//强制保存session,即使它没变化
saveUninitialized:true //强制将未初始化的session存储,默认为true
store:new MongoStore({
url:'mongodb://127.0.0.1:27017/orderShop',
touchAfter:24*3600
})
}))
ps:cookie相当于通行证,session相当于身份明细表 ,webstorage是H5的新特性包括sessionstorage和localStorage
(1)存储位置:cookie数据存放在客户的浏览器上,session数据放在服务器上,webstorage存储在本地
(2)存储时间:session默认是30min,负数或0为不限制session失效时间,是根据服务端可以设置的(tomcat中)
cookie是看maxage,如果不设置时间,默认是浏览器关闭或者设置的时间小于0就销毁
sessionstorage窗口关闭,localStorage手动删除
(3)cookie不是很安全,如果cookie被拦截了就会获取session的信息,即使加密也没用,因为拦截者只需照样转发
(3)session会在一定时间内保存在服务器上,当访问增多时,会比较占用服务器的性能
(4)单个cookie保存的数据不能超过4k,浏览器限制一个站点最多保存20个cookie
>说一下cookie和localeStorage,sessionStorage。
因为我是先答了为什么要有storage(存储空间大,不需要随着请求发送),于是面试官细问了一下那cookie又小又要跟着请求发送,为什么还要有cookie。
我之前没有准备过,就说了下我自己的理解,就是标识身份,记录一些客户端的信息这样,举了几个例子,可能说的不太好。
还有就是问到了cookie的存储时间,为什么限制大小(我说的是浏览器限制)