初识Cookie和Session

本文深入解析了Cookie和Session的工作原理及应用,包括Cookie的创建、获取、失效时间设置及中文乱码解决方案,以及Session的创建过程和特点。对比了Cookie与Session在保存位置、安全性、保存内容上的区别,并介绍了pageContext、request、session和application四种范围对象的特性和使用场景。

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的区别:

SessionCookie
保存的位置服务端客户端
安全性较安全较不安全
保存的内容ObjectString

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的作用范围依次增大,当我们需要使用范围对象的时候,尽量使用范围小的对象,因为使用的对象的范围越大,损耗的资源也就越多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值