浅谈session与cookie——登陆验证

小鸡
阅读236 喜欢0 cookie 更新2019-8-6

前端面试的时候总会有这种问题,谈一谈session,谈一谈cookie,谈一谈他们两的区别。

什么是cookie

cookie是将用户信息或者浏览网页时的交互信息保存在本地客户端的一种文件,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。

  • 内存Cookie(非持久Cookie):由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。
  • 硬盘Cookie(持久Cookie):保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。


一个典型的案例就是网上购物,用户在某个商品页面将某个商品加入购物车,将数据传送到服务器的同时也将数据写入本地cookie,当用户准备清理购物车的时候,浏览器就读取cookie中的购物内容并显示在页面上。

另一个典型案例就是登陆验证,用户在登陆页面输入账号密码发送登陆请求后,服务器端验证完登陆用户的密码后进行一系列操作并在本地生成一个session文件,然后发送一个登陆凭证(sessionID),通常是一个字符串,最后浏览器将其保存在本地cookie中。


当下次浏览器打开网页的时候,浏览器会将当前网页的cookie内容放在请求体中一起发送到服务器,服务器接收到请求后,读取请求体中的sessionID,并在本地cookie文件列表中查询是否有对应的文件(有的cookie文件是存储在服务器文件中,有的是存储在数据库中的),如果找到相应文件的话,就读取其中内容并做对应的操作,返回登陆成功的标志。

什么是session

其实上面的登陆验证案例中也已经提到了,session是一个存储在服务器端的保存用户信息的文件(当然也可能是数据库的表项,看存储方式),session的特殊之处在于,和浏览器端通过一个sessionID作为凭证进行交互,如果用这个sessionID可以在服务器端可以查询到session数据,那么验证成功,继续后续操作。


以上是小鸡博客的登陆session内容,存放在网站根目录,是以sessionID命名的json文件。可以看到,session文件中的值有expires(过期时间),path(路径),httponly(禁止js操作),loginUser(登陆用户)

这里的路径,是指当前的session可以使用的页面路径,session是有页面路径限制的,不能跨路径使用。而httponly是用来防止xss攻击的,增加一点点安全性。

当然cookie和session也不是绝对的安全,后面我会继续研究跨域和同源的问题