Cookie和Session
1.Cookie:缓存
Cookie是浏览器提供的一种技术,通过服务器的程序能将一些只需保存在客户端的数据,放在本地的计算机上,不需要提高网页的处理效率,可以有效地减少服务器的负载,但是相对来说,Cookie的安全性也很差。
cookie是存储在客户端的,而且一般是有服务器创建和设定的。
1.Cookie的创建
Cookie cookie = new Cookie("A",a);
response.addCookie(cookie);
2.Cookie的获取
Cookie[] cookies = req.getCookies():
if(null != cookies&&Cookies.length !=0){
for(Cookie cookie:cookies){
Sysout("cookie.getName");
Sysout("Cookie.getValue");
}
}
3.设置cookie的失效时间
setMaxAge中的参数的意义:
| 数值 | 状态 |
|---|---|
| 负整数 | 一旦关闭浏览器就被清除 |
| 正整数 | 设置指定的时间,单位为秒,超过时间则清除,关闭浏览器或电脑依旧有效 |
| 零 | 刚创建就被销毁,通常用来删除cookie |
//cookie的maxAge属性的默认值是-1,即一旦关闭浏览器,cookie就被清除
cookie.setMaxAge(1800);
4.解决cookie中的中文乱码
string name="张三";
string value = "男"
name = URLEncoder.encode(name,"utf-8");
Cookie cookie =new Cookie(name,value);
response.addCookie(cookie);
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookie){
String name =URLDecoder.decode(cookie.getName(),"utf-8");
String value =URLDecoder.decode(cookie.value(),"utf-8");
sysout(name+":"+value);
}
}
5.cookie的路径
在servlet中保存的cookie如果没有设置path,那么他的path默认为当前servlet的所在路径;当访问路径包含了cookie的路径时,则该请求将带上该cookie;如果访问路径不包含cookie路径,则该请求不会携带该cookie。
2.session:会话对象
客户端第一次请求服务端时,服务端会产生一个session对象(用于保存该客户的信息);并且每一个session对象都会有一个唯一的sessionID(用于区分其他session);服务端又会产生一个cookie,并且该cookie的name=JSESSIONID,value=服务端sessionID的值;然后,服务端会在响应客户端的同时,将该cookie发送给客户端,至此,客户端就有了一个cookie(JSESSIONID);因此.客户端的cookie就可以和服务端的session一一对应(即JSESSIONID与sessionID进行对应).
客户端第二次或第n次请求服务端时,服务端会先根据客户端cookie中的JSESSIONID去和服务端的session中的sessionID进行匹配,如果匹配成功,说明用户登陆过,则无需登录.
session的特点:
-
session存储在服务端
-
session在同一用户请求时共享(即用户可以不限量的访问它)
-
实现机制:第一次客户请求时,产生一个sessionID并赋值给cookie的JSESSIONID,然后发送给客户端.(主要就是利用sessionID与JSESSIONID的对应关系)
session中常用的方法:
-
String getID():获取sessionID的值
-
boolean isNew():判断是否是新用户(第一次访问)
-
void invalidate():使session失效(退出,注销时使用)
-
void setAttribute():设置session的属性
-
Object getAttribute():获取session的属性
-
void getMaxInactiveInterval(秒):获取最长有效时间,非活动时间
-
void setMaxInactiveInterval(秒):设置最长有效时间,非活动时间
3.cookie与session的区别:
| Session | Cookie | |
|---|---|---|
| 保存的位置 | 服务端 | 客户端 |
| 安全性 | 较安全 | 较不安全 |
| 保存的内容 | Object | String |
4.范围对象
1.pageContext:Jsp页面容器==(当前对象有用,跳转无效)==
2.request:请求对象==(同一次请求有效,且请求转发有效,重定向无效)==
3.session:会话对象==(同一次会话有效,无论怎么跳转都有效;关闭或切换浏览器时无效;从登陆到退出之间都有效)==
4…application:全局对象==(项目运行期间一直有效)==
公共的方法:
Object getAttribute(String name):根据属性名或属性值
void setAttribute(String name,Object obj):设置属性值(创建或修改)
Void removeAttribute(String name):删除属性值
以上的范围对象的由1->4的作用范围依次增大,当我们需要使用范围对象的时候,尽量使用范围小的对象,因为使用的对象的范围越大,损耗的资源也就越多。
本文深入解析了Cookie和Session的工作原理及应用,包括Cookie的创建、获取、失效时间设置及中文乱码解决方案,以及Session的创建过程和特点。对比了Cookie与Session在保存位置、安全性、保存内容上的区别,并介绍了pageContext、request、session和application四种范围对象的特性和使用场景。

927

被折叠的 条评论
为什么被折叠?



