标签:
背景:由于HTTP是无状态的协议,这样我们无法判断同一个用户多次请求时记录用户的信息从而需要频繁的身份校验,包括开启多个浏览器浏览同一个网站依旧需要不停的都身份验证。这样就产生了session机制,可以理解成Session基于保持状态的Web服务器的方法,那么cookie就是基于保持状态的客户端方法。由于一般的Session唯一标示SessionID又依赖于cookie的存储(这里只是相对,因为sessionID也可以通过url重定向实现)。
第一:cookie采用的是客户端保持状态的方案,而session采用的是服务器保持的状态。
当客户端第一次发送请求给服务器的时候,此时服务器就产生一个sessionId并存入cookie中返回给客户端,但客户端再次访问的时候,请求携带cookie,这样就可以根据cookie里的sessionId来判断是否服务端有对应的session,如果存在则,身份验证成功,反之失败。我们可以发现,实际上Session是存入在服务器端的,而cookie是存入在客户端的。
第二:Session不区分路径,同一个用户在访问同一个网站,在其他地方都可以使用,而cookie如果设定了路径的话,只能在作用域中有效。如果cookie所声明的作用域大于请求的所在资源时候,是需要附在HTTP请求Header上。
第三:如果不设定会话时间的话,cookie的生命周期在浏览器关闭结束,这种cookie可以称之为会话cookie,也是默认的cookie形式;另一种就是将cookie设定超时时间,存入磁盘,这样的话,称之为persistent cookie,当然一般不这么做这样可以通过cookie欺骗来攻击。而session存入在服务器端,而session数据存入服务器端,当用户请求服务端的时候,服务器通过请求中cookie携带的SessionId来检索相应的sesion,这样一来Session很安全。同时这里也阐释了但浏览器关闭的时候,并不会使得Session失效,因为Session是存在服务端的,只是Session cookie随着会话cookie在浏览器关闭后也失效。
第四:Session的创建并不能认为是有客户端访问就需要创建,实际上在调用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会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
3、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
4、将登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/barnetthe/article/details/47405051