Session和cookie的区别与联系:
在了解这两个技术时首先应清楚以下定义:
1、http协议
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,
超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从
web服务器传送到客户端的浏览器。
HTTP协议是无状态的协议,一旦数据交换完毕,客户端和服务端的连接就会关闭,再次
交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪绘画。
2、会话(session)跟踪
在javaweb中,客户向某一服务器发出某一个请求开始,会话就开始了,直到客户关闭了
浏览器会话结束。在一个会话的多个请求中共享数据,这就是会话跟踪技术。常用的会话
跟踪技术是session和cookie,session通过在服务器端记录信息确定用户身份,cookie通过
在客户端记录信息确定用户身份。
Cookie:
一、什么是cookie
cookie是一种在客户端保存信息的技术,cookie是在浏览器访问某个web资源时,由web服务
器在HTTP响应消息头中通过Set-Cookie字段发送给浏览器的一组信息。
二、cookie工作流程
浏览器会根据Set-Cookie字段中的cookie数据决定是否保存这些cookie,当浏览器下一次访
问这个web资源时,会自动读取这些被保存的cookie,并加到HTTP请求消息头的cookie字段中,
web服务器会根据cookie字段的内容做出相应的处理,
三、cookie注意细节
*:一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
*:一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
*:浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
*:如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),
用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时 间。将最大时效设为0则是命令浏览器删除该cookie。
四、Cookie类的主要方法:
1
Cookie(String name, String value)
构造方法
实例化Cookie对象,传入cooke名称和cookie的值
2
public String getName()
普通方法
取得Cookie的名字
3
public String getValue()
普通方法
取得Cookie的值
4
public void setValue(String newValue)
普通方法
设置Cookie的值
5
public void setMaxAge(int expiry)
普通方法
设置Cookie的最大保存时间,即cookie的有效期,当服务器给浏览器回送一个cookie时,如果在服务器端没有调用 setMaxAge方法设置cookie的有效期,那么cookie的有效期只在一次会话过程中有效,用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一次会话,当用户关闭浏览器,会话就结束了,此时cookie就会失效,如果在服务器端使用setMaxAge方法设置了cookie的有效期,比如设置了30分钟,那么当服务器把cookie发送给浏览器时,此时cookie就会在客户端的硬盘上存储30分钟,在30分钟内,即使浏览器关了,cookie依然存在,在30分钟内,打开浏览器访问服务器时,浏览器都会把cookie一起带上,这样就可以在服务器端获取到客户端浏览器传递过来的cookie里面的信息了,这就是cookie设置maxAge和不设置maxAge的区别,不设置maxAge,那么cookie就只在一次会话中有效,一旦用户关闭了浏览器,那么cookie就没有了,那么浏览器是怎么做到这一点的呢,我们启动一个浏览器,就相当于启动一个应用程序,而服务器回送的cookie首先是存在浏览器的缓存中的,当浏览器关闭时,浏览器的缓存自然就没有了,所以存储在缓存中的cookie自然就被清掉了,而如果设置了cookie的有效期,那么浏览器在关闭时,就会把缓存中的cookie写到硬盘上存储起来,这样cookie就能够一直存在了。
6
public int getMaxAge()
普通方法
获取Cookies的有效期
7
public void setPath(String uri)
普通方法
设置cookie的有效路径,比如把cookie的有效路径设置为"/xdp",那么浏览器访问"xdp"目录下的web资源时,都会带上cookie,再比如把cookie的有效路径设置为"/xdp/gacl",那么浏览器只有在访问"xdp"目录下的"gacl"这个目录里面的web资源时才会带上cookie一起访问,而当访问"xdp"目录下的web资源时,浏览器是不带cookie的
8
public String getPath()
普通方法
获取cookie的有效路径
9
public void setDomain(String pattern)
普通方法
设置cookie的有效域
10
public String getDomain()
普通方法
获取cookie的有效域
五、在cookie中存取中文
要想在cookie中存储中文,那么必须使用URLEncoder类里面的encode(String s, String enc)方法进行中文转码,例如:
1 Cookie cookie = new Cookie("userName", URLEncoder.encode("孤傲苍狼", "UTF-8"));
2 response.addCookie(cookie);
在获取cookie中的中文数据时,再使用URLDecoder类里面的decode(String s, String enc)进行解码,例如:
1 URLDecoder.decode(cookies[i].getValue(), "UTF-8")
session:
一、什么是session
简单来说就是服务器给客户端的一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。
当每个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,
用以标识这个用户的唯一身份。这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串,
二、session的主要方法
void setAttribute(String attribute, Object value) 设置Session属性。value参数可以
为任何Java Object。通常为Java Bean。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的超时时间。单位为秒
void putValue(String attribute, Object value) 不推荐的方法。已经被setAttribute
(String attribute, Object Value)替代
Object getValue(String attribute) 不被推荐的方法。已经被getAttribute(String attr)替代
三、session的创建
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了sessionId,如果已包含则说明以前已经为此客户端创建过session,服务
器就按照sessionId把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含sessionId,则为此客户端创建一个session并且生成一个与此session相关
联的sessionId,sessionId的值是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionId将被在本次响应中返回给客户端保存。
sesson和cookie的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。