cookie 和Session的区别

cookie Session的区别

Cookie

会话:用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话。

为什么要使用cookie

1.记录用户的事件

2.浏览历史记录

3.用户名和密码的记录

特点

1.cookie是在服务端创建的

2.cookie是保存在浏览器这端的

3.cookie的生命周期可以通过cookie.setMaxAge();如果不设置,关闭浏览器就destroy

4.cookie可以被多个浏览器共享

5.怎么理解:把cookie假设成一张表 名字(name):值(value

所有共享这张表,名字如果重复了就会替换掉存在的cookie值。

6.一个WEB应用可以保存多个cookie

7.cookie存放的时候是以明文方式存放的,因此安全比较低,我们可以通过加密后保存,可以用md5(不可逆)算法加密(想起了base64),经过md5加密后存放到数据库,用户输入密码后加密然后再和数据库里面的匹配。

一个web应用可以给浏览器发送多个cookie,一个浏览器可以存储多个web应用提供的cookie。一般只允许存放300cookie,每个web应用最多放 20个,每个cookie大小4KB,因此不会塞满硬盘,也不会被用作拒绝服务攻击手段。

服务器只能在客户端保存文本信息。

10 cookies2

 保存在磁盘中有时间规定,(持久根据生命时间,)

 内存中和只有当前的浏览器不关就有效。(暂时 根据浏览器是否关闭)

方法列表

1

public void setDomain(String pattern)
该方法设置 cookie 适用的域,例如 w3cschool.cc

2

public String getDomain()
该方法获取 cookie 适用的域,例如 w3cschool.cc

3

public void setMaxAge(int expiry)
该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。

4

public int getMaxAge()
该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。

5

public String getName()
该方法返回 cookie 的名称。名称在创建后不能改变。

6

public void setValue(String newValue)
该方法设置与 cookie 关联的值。

7

public String getValue()
该方法获取与 cookie 关联的值。

8

public void setPath(String uri)
该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie

9

public String getPath()
该方法获取 cookie 适用的路径。

10

public void setSecure(boolean flag)
该方法设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。

11

public void setComment(String purpose)
该方法规定了描述 cookie 目的的注释。该注释在浏览器向用户呈现 cookie 时非常有用。

12

public String getComment()
该方法返回了描述 cookie 目的的注释,如果 cookie 没有注释则返回 null


Session

数据保存在服务器端

客户端只分配一个SessionId

方法列表

1

public Object getAttribute(String name)
该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null

2

public Enumeration getAttributeNames()
该方法返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称。

3

public long getCreationTime()
该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 月 日午夜算起,以毫秒为单位。

4

public String getId()
该方法返回一个包含分配给该 session 会话的唯一标识符的字符串。

5

public long getLastAccessedTime()
该方法返回客户端最后一次发送与该 session 会话相关的请求的时间自格林尼治标准时间 1970 年 月 日午夜算起,以毫秒为单位。

6

public int getMaxInactiveInterval()
该方法返回 Servlet 容器在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位。

7

public void invalidate()
该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。

8

public boolean isNew(
如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true

9

public void removeAttribute(String name)
该方法将从该 session 会话移除指定名称的对象。

10

public void setAttribute(String name, Object value) 
该方法使用指定的名称绑定一个对象到该 session 会话。

11

public void setMaxInactiveInterval(int interval)
该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。

 

Session的两种实现机制

基于Cookie实现Session

Session对象的原理在于,服务器可以为客户端创建并维护一个所谓的Session对象,用于存放数据。在创建Session对象的同时,服务器将会为该Session对象产生一个唯一编号,这个编号称之为SessionID,服务器以Cookie的方式将SessionID存放在客户端。当浏览器再次访问该服务器时,会将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到以前的Session对象,并对其进行访问。需要注意的是,此时的Cookie中仅仅保存了一个SessionID,而相对较多的会话数据保存在服务器端对应的Session对象中,由服务器来统一维护,这样一定程度保证了会话数据安全性,但增加了服务器端的内存开销。
存放在客户端的用于保存SessionIDCookie会在浏览器关闭时清除。我们把用户打开一个浏览器访问某个应用开始,到关闭浏览器为止交互过程称为一个会话。在一个会话过程中,可能会向同一个应用发出了多次请求,这些请求将共享一个Session对象,因为这些请求携带了相同的SessionID信息。

 

基于URL重写

从上面的介绍可以看出,Session对象的正常使用要依赖于Cookie。如果考虑到客户端浏览器可能出于安全的考虑禁用了Cookie,应该使用URL重写的方式使Session在客户端禁用Cookie的情况下继续生效。
下面有两个JSP页面:1.jsp中向Session对象中存入了名为“hi”的一个String类型对象。通过超级链接可以链接到2.jsp,在2.jsp中将获取Session中名为“hi”的对象,并显示在页面上。需要注意的是:在1.jsp中超级链接的地址并不是直接写了“2.jsp”而是通过resopnseencodeURL方法对这个地址进行了处理。

注意:由于Cookie的禁用,这次请求协议头中虽然没有携带SessionID的信息,但SessionID的信息作为请求地址的一部分传到了服务器端,这就是URL重写的意义所在。
responseencodeURL方法将根据浏览器是否不支持Cookie决定是否将SessionID信息写入链接地址。

区别

cookiesession 都是用来保存用户状态信息的一种方法或手段

二者主要区别是:
        1.保存位置:cookie保存在客户端,session 保存在服务端
        2.安 全 性:cookie 安全性差,session 安全性高
        3.生命周期:在不设置条件的情况下两者都是在浏览器关闭后消失

        (可在客户端设置cookie的存活时间,也可在服务端设置session的存活时间)
         二者关系--session 是通过cookie来实现的 

注:如果客户端禁用了cookie session将无法工作(解决方案:重新URL,就是在URL后加上 ;JSESSIONID=<%=session.getId()%> 

Cookies存放位置

C:\Users\deng\AppData\Roaming\Microsoft\Windows\Cookies


总结:


猜你喜欢

转载自blog.csdn.net/x83853684/article/details/80410681