一,session简介

    session是另一种记录客户状态的机制,cookie保存在客户端,session保存在服务器

    session运行在服务器,客户端第一次访问服务器时,就可以将客户的登录信息保存。

     当客户访问其他界面时,可以判断客户的登录状态,做出提示,相当于登录拦截。

session可以和Redis或者数据库等结合做持久化操作,当服务器挂掉可不会导致信息丢失(购物车)

   当重新打开浏览器信息不保存

二,session工作流程

       当浏览器向服务器发送请求时,会在服务器建立一个session对象,相当于一个key,value的键值对,然后将key(cookie)f返回到客户端,当浏览器再次访问时,携带key(cookie)找到对应的session(value),客户的信息都存在session中。

前端可以主动存储session吗_服务器

       用来实现sessionb,设置sessionid标识的方式一般有2种,URL重写和cookie

       URL重写:“;sessionid=xxx”再次请求这个url的时候, sessionid会被传到服务器

      cookie:在服务器response返回的时候,会把sessionid放在http头部放在cookie属性里传到客户端

                  再次访问服务器的时候,sessionid会随着cookie一起请求

三,express-session的使用

    (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

五,express-session的常用方法

前端可以主动存储session吗_前端可以主动存储session吗_02

 

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,把session保存到数据库里面

(负载均衡:假如北京的一台计算机访问北京的一台服务器,处于登录状态时,又去访问北京的另一台服务器,为了不让数据丢失,就把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
    })
}))

 7,session和cookie,webstorage的区别

     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的存储时间,为什么限制大小(我说的是浏览器限制)