JavaWeb:Cookie和Session的区别?

文章目录

  • What是什么?
  • 区别与联系?
  • When生命周期与应用场景?
  • How如何使用?
    • Cookie
    • Session

What是什么?

会话跟踪是Web程序中常⽤的技术,⽤来跟踪⽤户的整个会话。**保持对⽤户会话期间的数据管理。**常⽤的会话跟踪技术是Cookie与Session。

  • Cookie通过在客户端记录信息确定⽤户身份(通行证、辨认标识
  • Session通过在服务器端记录信息确定⽤户身份(客户档案

Cookie是客户端(⼀般指浏览器)请求服务器后,服务器发给客户端的**⼀个辨认标识,保存在客户端,当客户端再次向服务器发送请求时,会携带着这个辨认标识,**服务器就可以通过这个标识来识别客户端的身份或
状态等。
Cookie的作⽤:跟踪会话,记录⼀次会话中(即Session,⼀次会话可能会有多次请求,当然也可以有多个Cookie来跟踪不同的信息)的信息,这样服务器就会知道⽤户的状态,⽐如有没有登录成功,付款时购物⻋中的东⻄等,就相当于贴在客户端脑⻔上的纸条,浏览器看不到,但服务器看得到

Session是另⼀种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,⽽Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通⾏证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建⽴的⼀份客户档案,客户来访的时候只需要查询客户档案表就可以了。

区别与联系?

区别:数据保存在客户端还是服务器

联系:

Session是由应⽤服务器维持的⼀个服务器端的存储空间,⽤户在连接服务器时,会由服务器⽣成⼀个唯⼀的SessionID,⽤该SessionID 为标识符来存取服务器端的Session存储空间。⽽SessionID这⼀数据则是保存到客户端,⽤Cookie保存的,⽤户提交⻚⾯时,会将这⼀SessionID提交到服务器端,来存取Session数据。这⼀过程,是不⽤开发⼈员⼲预的。所以⼀旦客户端禁⽤Cookie,那么Session也会失效。

Cookies属于Session对象的⼀种。但有不同,Cookies不会占服务器资源,是存在客服端内存或者⼀个Cookie的⽂本⽂件中;⽽Session则会占⽤服务器资源。所以,尽量不要使⽤Session,⽽使⽤Cookies。但是我们⼀般认为Cookie是不可靠的,Cookies是保存在本机上的,但是其信息的完全可⻅性且易于本地编辑性,往往可以引起很多的安全问题。Session是可靠地。但是⽬前很多著名的站点也都⽤Cookie。

When生命周期与应用场景?

应用

Cookie应用 Session应用
1. 保持用户登录状态 :将⽤户的信息保存到Cookie中,并发送给浏览器,并且将有效时间设置为⼀个较⻓的时间,这样浏览器在以后访问⽹站时,都会带着该Cookie,服务器以此来辨识⽤户,⽤户就不再需要输⼊⽤户名和密码等信息 1. 登录:创建session
2. 记录用户名:⼀旦⽤户登录成功以后,下次再登录时,直接将Cookie中的⽤户名读取并显示出来,这样⽤户就不需要再次输⼊⽤户名,只输⼊密码即可 2. 退出:清除session

生命周期

Cookie有效时间 Session生命周期
Cookie发送给浏览器以后,到了⼀定的时间以后浏览器会⾃动销毁Cookie。Cookie的默认有效时间为⼀次会话(⼀次打开关闭浏览器的过程),我们也可以⼿动指定Cookie的有效时间 1. Session在⽤户第⼀次访问服务器的时候⾃动创建。如果尚未⽣成Session,也可以使request.getSession(true)强制⽣成Session。2. Session⽣成后,只要⽤户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。⽤户每访问服务器⼀次,⽆论是否读写Session,服务器都认为该⽤户的Session“活跃(active)”了⼀次。 3. 由于会有越来越多的⽤户访问服务器,因此Session也会越来越多。为防⽌内存溢出,服务器会把⻓时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就⾃动失效了。

设置cookie有效时间

//setMaxAge⽤来设置Cookie的最⼤有效时间,需要int型的参数,代表有效的秒数
 cookie.setMaxAge(秒数)//当参数⼤于0时,会设置为指定的 秒数
 cookie.setMaxAge(30);
 //当参数等于0时,浏览器 不会保存Cookie,Cookie⽴即失效
 cookie.setMaxAge(0);
 //当参数⼩于0时,和 不设置是⼀样,当前会话有效
 cookie.setMaxAge(-100);
 //设置⼀个永久有效的Cookie,并⾮永久,只是使Cookie的⽣命很⻓⽽已
 cookie.setMaxAge(60*60*24*365*10);

Session的超时时间为maxInactiveInterval属性,可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(longinterval)修改。
Session的超时时间也可以在web.xml中修改。另外,通过调⽤Session的invalidate()⽅法可以使Session失效。

<session-config> 
 <session-timeout>30</session-timeout>
</session-config>

How如何使用?

Cookie

Cookie的设置和获取

方法1: 通过HttpServletResponse.addCookie的⽅式设置Cookie
注意:new Cookie()时两个参数都是字符串

Cookie cookie = new Cookie("jieguo","true");
response.addCookie(cookie);

方法2:浏览器中查看cookie的值

方法3:服务端获取客户端携带的cookie:通过HttpServeltRequest获取

<% 
 Cookie[] cookies = request.getCookies();
 if(cookies != null)
 for(Cookie c : cookies){
     
 String name = c.getName();//获取Cookie名称
 if("jieguo".equals(name)){
     
 String value = c.getValue();//获取Cookie的值
 bool = Boolean.valueOf(value);//将值转为Boolean类型
 }
 }
%>

删除cookie
通过设置同名Cookie的最⼤存活时间为0,删除Cookie是指使浏览器不再保存Cookie,使Cookie⽴即失效
举例:使name为username的Cookie⽴即失效

//1.创建⼀个name为username的Cookie
Cookie cookie = new Cookie("username", "aaa");
//2.设置Cookie的有效时间为0
cookie.setMaxAge(0);//删除cookie的关键
//3.将cookie发送给浏览器,来 替换同名Cookie
response.addCookie(cookie);

Session

创建Session的格式

Session对应的类为javax.servlet.http.HttpSession类。每个来访者对应⼀个Session对象,所有该客户的状态信息都保存在这个Session对象⾥。Session对象是在客户端第⼀次请求服务器的时候创建的。

Session也是⼀种key-value的属性对,通过getAttribute(Stringkey)setAttribute(String key,Objectvalue)⽅法读写客户状态信息。Servlet⾥通过request.getSession()⽅法获取该客户的 Session
例如:

HttpSession session = request.getSession(); // 获取Session对象
session.setAttribute("loginTime", new Date()); // 设置Session中的属性
out.println("登录时间为:" +(Date)session.getAttribute("loginTime")); // 获取Session属性

Session的常用方法

⽅ 法 名 描 述
void setAttribute(Stringattribute, Object value) 设置Session属性。value参数可以为任何Java Object。通常为JavaBean。value信息不宜过⼤
String getAttribute(String attribute) 返回Session属性
Enumeration getAttributeNames() 返回Session中存在的属性名
void removeAttribute(String attribute) 移除Session属性
String getId() 返回Session的ID。该ID由服务器⾃动创建,不会重复
long getCreationTime() 返回Session的创建⽇期。返回类型为long,常被转化为Date类型,例如:Date createTime = new Date(session.getCreationTime())
long getLastAccessedTime() 返回Session的最后活跃时间。返回类型为long
int getMaxInactiveInterval() 返回Session的超时时间。单位为秒。超过该时间没有访问,服务器认为该Session失效
void setMaxInactiveInterval(int second) 设置Session的超时时间。单位为秒
boolean isNew() 返回该Session是否是新创建的
void invalidate() 使该Session失效

你可能感兴趣的:(WEB)