session探讨

日期:2016-2-18 13:51 | 标签: session express-session http | 阅读:656

大家都知道,http是一种无状态的协议,session的作用,简而言之就是为了保持客户端与服务端的连接,使用cookie在本地保存sessionid,具体信息保存在服务端。 本质是对http的一种拓展。

概念:连接与会话

客户端第一次会话时,服务端即创建session,主要做以下几个工作

说到session就不得不说cookie了。
cookie也是作为http协议的扩展,cookie会自动在浏览器和服务器之间传输。默认在用户关闭浏览器时清除数据,cookie设置案例为:

document.cookie = 'name=名称; max-age=过期时间; path=路径; domain=域名; secure';

注意:

  1. 指定为secure是,只有在https才传递到服务器端,http不会传递。
  2. max-age为0可以删除指定cookie
  1. 都会在浏览器端保存,有大小限制,同源限制
  2. cookie会在请求时发送到服务器,作为会话标识,服务器可修改cookie;web storage不会发送到服务器
  3. cookie有path概念,子路径可以访问父路径cookie,父路径不能访问子路径cookie
  4. cookie在设置的有效期内有效,默认为浏览器关闭;sessionStorage在窗口关闭前有效,localStorage长期有效,直到用户删除
  5. sessionStorage不能共享,localStorage在同源文档之间共享,cookie在同源且符合path规则的文档之间共享 localStorage的修改会促发其他文档窗口的update事件
  6. cookie有secure属性要求HTTPS传输
  7. 浏览器不能保存超过300个cookie,单个服务器不能超过20个,每个cookie不能超过4k。web storage大小支持能达到5M

express-session

此插件基于cookieParser ,支持两种方式存储

  1. 存放于内存中,缺点是不持久,断电消失
    app.use(session({
      secret: 'key',
      name: 'session-name',
      cookie: {maxAge: 60 * 60 * 1000 },
      resave: false,
      saveUninitialized: true
    }));
    
  2. 存放于数据库中,只需配置mongodb数据库连接即可
    app.use(session({
      ...
      store: new MongoStore({  
          url:数据库url
      })
    }));
    

问题

  1. 我在req.session中保存的信息放到哪了呢,数据库中没见到啊?
  2. 可能会出现会话劫持。

版权声明: 署名-非商业性使用-禁止演绎 4.0 国际(CC BY-NC-ND 4.0
Copyright ©2013-2017 | 粤ICP备14081691号 | yipeng手工打造 | 联系方式