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加密后存放到数据库,用户输入密码后加密然后再和数据库里面的匹配。
8 一个web应用可以给浏览器发送多个cookie,一个浏览器可以存储多个web应用提供的cookie。一般只允许存放300个cookie,每个web应用最多放 20个,每个cookie大小4KB,因此不会塞满硬盘,也不会被用作“拒绝服务”攻击手段。
9 服务器只能在客户端保存文本信息。
10 cookies分2种
一 保存在磁盘中有时间规定,(持久根据生命时间,)
二 内存中和只有当前的浏览器不关就有效。(暂时 根据浏览器是否关闭)
方法列表
1 | public void setDomain(String pattern) |
2 | public String getDomain() |
3 | public void setMaxAge(int expiry) |
4 | public int getMaxAge() |
5 | public String getName() |
6 | public void setValue(String newValue) |
7 | public String getValue() |
8 | public void setPath(String uri) |
9 | public String getPath() |
10 | public void setSecure(boolean flag) |
11 | public void setComment(String purpose) |
12 | public String getComment() |
Session
1 数据保存在服务器端
2 客户端只分配一个SessionId
方法列表
1 | public Object getAttribute(String name) |
2 | public Enumeration getAttributeNames() |
3 | public long getCreationTime() |
4 | public String getId() |
5 | public long getLastAccessedTime() |
6 | public int getMaxInactiveInterval() |
7 | public void invalidate() |
8 | public boolean isNew( |
9 | public void removeAttribute(String name) |
10 | public void setAttribute(String name, Object value) |
11 | public void setMaxInactiveInterval(int interval) |
1 基于Cookie实现Session
Session对象的原理在于,服务器可以为客户端创建并维护一个所谓的Session对象,用于存放数据。在创建Session对象的同时,服务器将会为该Session对象产生一个唯一编号,这个编号称之为SessionID,服务器以Cookie的方式将SessionID存放在客户端。当浏览器再次访问该服务器时,会将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到以前的Session对象,并对其进行访问。需要注意的是,此时的Cookie中仅仅保存了一个SessionID,而相对较多的会话数据保存在服务器端对应的Session对象中,由服务器来统一维护,这样一定程度保证了会话数据安全性,但增加了服务器端的内存开销。
存放在客户端的用于保存SessionID的Cookie会在浏览器关闭时清除。我们把用户打开一个浏览器访问某个应用开始,到关闭浏览器为止交互过程称为一个“会话”。在一个“会话”过程中,可能会向同一个应用发出了多次请求,这些请求将共享一个Session对象,因为这些请求携带了相同的SessionID信息。
2 基于URL重写
从上面的介绍可以看出,Session对象的正常使用要依赖于Cookie。如果考虑到客户端浏览器可能出于安全的考虑禁用了Cookie,应该使用URL重写的方式使Session在客户端禁用Cookie的情况下继续生效。
下面有两个JSP页面:1.jsp中向Session对象中存入了名为“hi”的一个String类型对象。通过超级链接可以链接到2.jsp,在2.jsp中将获取Session中名为“hi”的对象,并显示在页面上。需要注意的是:在1.jsp中超级链接的地址并不是直接写了“2.jsp”而是通过resopnse的encodeURL方法对这个地址进行了处理。
注意:由于Cookie的禁用,这次请求协议头中虽然没有携带SessionID的信息,但SessionID的信息作为请求地址的一部分传到了服务器端,这就是URL重写的意义所在。
response的encodeURL方法将根据浏览器是否不支持Cookie决定是否将SessionID信息写入链接地址。
区别
cookie、session 都是用来保存用户状态信息的一种方法或手段
二者主要区别是:
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