JSP与Servlet中的Cookie和Session的区别
Cookie的工作原理:
浏览器第一次访问服务器时,服务器端创建cookie对象返回给客户端浏览器存储,再次访问服务器时,客户端需要将cookie对象传递给服务器端。服务器端再对此cookie对象进行操作。
Session的工作原理:
浏览器第一次访问服务器时,服务器端创建session对象,同时将此session对象的id号返回给客户端浏览器存储,再次访问服务器时,客户端需要将此session对象的id号传递给服务器端。服务器端再根据此session id与服务器端的session对比调用其中的session对象进行操作。
具体的区别:
(1)信息的存储位置不同:
Cookie:存放在客户端。
Session:存放在服务器端。但是有时也依赖Cookie存储sessionid
(2)存储形式、数据量、创建形式不同:
Cookie:最大4k的文本。
如:cookie = new Cookie(
String name,
String value
)
response.addCookies(cookie)
Session:无大小限制的对象。
如:HttpSession session=request.getSession(true)
session.setAttribute(String str,Object o)
(3)访问的限制上不同:
一个servlet/jsp设置的cookie能够被同一路径下面或者子路径下面设置的servlet/jsp读取到,相反则不能。
一个servlet/jsp设置的session不存在cookie那样的访问限制方式,只要是父子关系的一套窗口,都可以访问session对象的内容的。
HttpSession session=request.getSession(true)//此session对象是在服务器端存储的。session.setAttribute()、session.getAttribute()。
注意:对于核心业务逻辑应该使用session编程,不要使用cookie来编程,因为客户端有可能禁用cookie,所以使用cookie来实现核心业务逻辑就会造成无法使用。
URL重写:
禁用cookie后,session的id无法写到客户端,此时解决的办法就是rewritenURL(URL重写)。如下所示:
response.encodeURL(request.getRequestURL().toString())
//它是针对于浏览器中的cookie被禁用后才调用的,如果没有禁用cookie,此方法是是什么都不做的。
//request.getRequestURL().toString()是请求的地址。
//response.encodeURL(url)是将session的id号写到参数中代表的url地址后面。
javascript中的Cookie对象
Cookie文件的格式:
IE:用户名@域名.txt
NS:Cookie.txt
向客户端 写入cookie:
格式:document.cookie=”关键字=值 [ ;expires=有效日期]"
var exdate=new Date();
exdate.setDate(exdate.getDate()+30); //设置有效期为30天
document.cookie= "name=liuanxin;expires="+exdate.toGMTString();