Cookie与Session是俩种常见的缓存机制表现形式,可以传值也可以存储数据,主要是用来存储数据。
1 Cookie是什么?
Cookie指储存在用户本地终端上的数据(通过进过加密),也可以称之为浏览器缓存,占用浏览器独立空间。它的特性如下:有过期时间,可以设置,默认是关闭浏览器清除;有大小限制,一般cookie的条数不超过50条,不同的浏览器也会有差异,单个cookie的大小不能超过2M;cookie是以键值对的形式保存在物理硬盘上,类似json格式。
2 Session是什么?
Session(时域)指一个终端用户 与交互系统进行通信的时间间隔,和物理上的时域差不多,特指一个时间段。它的特性如下:避免多个线程共享一个Session实例;Session实例是轻量级,删除和创建不需要消耗太多资源;每个Session对象内部都有自己的缓存,被称为Hibernate第一缓存。
1 Cookie?
<1>作用?
记录用户名和密码,以及该用户需要保存的一些信息,达到自动登录的效果。
可以使用cookie来记录用户最近的操作以及浏览的信息,有选择性的向用户提供服务。
<2>怎么用?
向客户程序发送cookie:
1 创建cookie对象:Cookie c = new Cookie(“userId”,“李明 ”);
2 设置最大时效,默认浏览器关闭清楚Cookie:c.setMaxAge(60*60*24); //一天,如果设置为0就是清楚cookie。
3 将cookie放入到HTTP响应报头,可以使用HttpServletResponse的addCookie方法,此方法不修改之前指定的Set-Cookie报头,而是创建新的报头 : response.addCookie(c);
从客户端读取cookie:
1 调用HttpServletRequest的getCookies得到一个Cookie对象的数组;
2 对数组进行循环,调用cookie的getName方法,获取具体的cookie的值
Cookie[] cookies = request.getCookies(); if(cookies != null){ for(int i=0;i<cookies.length;i++){ Cookie c = cookies[i]; if("userId".equals(c.getName())){ System.out.println(c.getValue()); } } }
cookie的常用方法:
2 Session?
<1>作用?
存储需要在整个用户会话过程中保持其状态的信息,例如登录信息。
存储只需要在页面重新加载过程中或按功能分组的一组页之间保持其状态对象。
Session主要作用就是在 Web服务器上保持用户的状态信息供在任何时间从任何页访问,不需要在浏览器上存储这些信息。
<2>怎么用?
使用的步骤:1 启动session:使用session_start()函数来启动;
2 注册会话:直接给$_SESSION数组添加元素即可;
3 使用会话:判断session是否为空或者是否已经注册,如果已经存在则像普通数组使用即可
4 删除会话:使用unset删除单个session;使用$_SESSION=array()的方式,一次注销所有的会话变量;使用session_destroy()函数来彻底销毁session。
3 联系与区别?
<1>联系:
session是通过cookie来工作的,即当一个session第一次被启用,一个唯一的标识被存于本地的cookie中
session和cookie都可以用来会话跟踪。
<2>区别:
cookie数据存放在客户端浏览器上,session数据存放在服务器上;
cookie不是很安全,用户可以看到浏览器上显示的信息,但session信息存到服务器上,浏览器不会显示详细信息,只有一个唯一的ID标识,相对安全。
session会在一定时间内保存到服务器上,当访问增多,增大了服务器的压力;
还有存取方式、有效期、浏览器支持方面的区别,详细了解请看下面博客链接点击打开链接。
cookie和session总结来说就是俩种保存用户的临时信息,俩者可以相辅相成,共同使用。概念理解起来不是很复杂,主要还是应用上,在实际代码中使用这俩个机制更好的服务用户,才是主要的。