关于Session和cookie个人见解
背景:因为HTTP是无状态的协议,这样我们无法推断同一个用户多次请求时记录用户的信息从而须要频繁的身份校验,包含开启多个浏览器浏览同一个站点依然须要不停的都身份验证。这样就产生了session机制,能够理解成Session基于保持状态的Webserver的方法,那么cookie就是基于保持状态的client方法。因为一般的Session唯一标示SessionID又依赖于cookie的存储(这里仅仅是相对,因为sessionID也能够通过url重定向实现)。
第一:cookie採用的是client保持状态的方案,而session採用的是server保持的状态。
当client第一次发送请求给server的时候,此时server就产生一个sessionId并存入cookie中返回给client,但client再次訪问的时候。请求携带cookie。这样就能够依据cookie里的sessionId来推断是否服务端有相应的session。假设存在则,身份验证成功,反之失败。我们能够发现,实际上Session是存入在server端的。而cookie是存入在client的。
第二:Session不区分路径,同一个用户在訪问同一个站点,在其它地方都能够使用。而cookie假设设定了路径的话,仅仅能在作用域中有效。
假设cookie所声明的作用域大于请求的所在资源时候,是须要附在HTTP请求Header上。
第三:假设不设定会话时间的话,cookie的生命周期在浏览器关闭结束,这种cookie能够称之为会话cookie。也是默认的cookie形式;还有一种就是将cookie设定超时时间。存入磁盘,这种话。称之为persistent cookie,当然一般不这么做这样能够通过cookie欺骗来攻击。而session存入在server端,而session数据存入server端,当用户请求服务端的时候,server通过请求中cookie携带的SessionId来检索对应的sesion。这样一来Session非常安全。同一时候这里也阐释了但浏览器关闭的时候,并不会使得Session失效。由于Session是存在服务端的,仅仅是Session cookie随着会话cookie在浏览器关闭后也失效。
第四:Session的创建并不能觉得是有client訪问就须要创建,实际上在调用HttpServletRequest.getSession(true)的时候才会被创建,
第五:使用session的步骤:1. 启动session:使用session_start()函数来启动。
2. 注冊会话:直接给$_SESSION数组加入元素就可以。
3. 使用会话:推断session是否为空或者是否已经注冊,假设已经存在则像普通数组使用就可以。4. 删除会话:1.能够使用unset删除单个session。2.使用$_SESSION=array()的方式。一次注销全部的会话变量。3.使用session_destroy()函数来彻底销毁session。
第六: cookie的使用步骤: 1) 创建Cookie对象 ;2) 设置最大时效 ; 3) 将Cookie放入到HTTP响应报头
Cookie cookie = new Cookie("Mytest", "22222"); cookie.setDomain("172.20.40.73"); cookie.setMaxAge(30000); cookie.setPath("/"); response.addCookie(cookie); javax.servlet.http.Cookie[] diskCookies = request.getCookies(); response.sendRedirect("ReciveCookie");
第七:关于cookie的读取:
String cookieName = “userName”; Cookie cookies[] = request.getCookies(); if (cookies!=null) { for(int i=0;i<cookies.length;i++) { Cookie cookie = cookies[i]; if (cookieName.equals(cookie.getName())) doSomethingWith(cookie.getValue()); } }第八:关于cookie与Session的使用场合:
1、cookie不是非常安全。别人能够分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
2、session会在一定时间内保存在server上。当訪问增多,会比較占用你server的性能
考虑到减轻server性能方面,应当使用COOKIE。
3、单个cookie保存的数据不能超过4K,非常多浏览器都限制一个网站最多保存20个cookie。
4、将登陆信息等重要信息存放为SESSION,其它信息假设须要保留。能够放在COOKIE中