第五章 Cookie与session会话技术

本文详细介绍了Cookie和Session的使用,包括创建Cookie、设置有效期、从请求中获取Cookie信息,以及Session的API、生命周期和有效期设置。讨论了两者在存储位置、安全性、存储量和性能上的区别。Cookie数据存储在客户端,易被篡改,而Session存储在服务器端,安全性更高,但会增加服务器负担。
摘要由CSDN通过智能技术生成

1.cookies:

Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。
特点作用:减少服务器端存储压力,安全性不好,客户端可以清除。
1.2

1.2.1、如何创建Cookie对象

Cookie cookie = new Cookie(String name,String value);

– 其中name是cookie的名字, 用来区分cookie

– 其中value是cookie的值, 正是我们要保存的数据

1.2.2、如何将Cookie对象添加到响应中

response.addCookie(Cookie cookie)
– 将指定的Cookie对象添加到响应中,最后随响应发送给浏览器保存(底层还是通过set-Cookie响应头将Cookie值发送给浏览器)
–可以多次调用该方法,添加多个cookie,发送给浏览器

1.2.3、如何获取请求中的Cookie信息

request.getCookies()
– 返回请求中所有的Cookie对象组成的数组,如果请求中没有任何Cookie信息,该方法将会返回null。
– 如果请求中没有携带任何cookie,此处将会返回null.

1.2.4、setMaxAge方法 – 设置Cookie的最大生存时间(秒)

(1)如果不设置该方法,Cookie默认是会话级别的Cookie,是保存在浏览器的内存中, 随着浏览器关闭、内存的释放,Cookie也会跟着销毁。
(2)如果设置了该方法,并且是一个有效的时间,Cookie将会以文件的形式保存在浏览器的临时文件夹中。这样即使浏览器关闭,内存释放,保存在硬盘上的cookie文件会一直存在,当浏览器再次开启时,cookie仍然可以获取到。

1.2.5、Cookie的常用方法

(1)cookie.getName() – 获取Cookie的名字,没有setName方法,因为名字一旦确定就无法修改. 
(2)cookie.getValue() – 获取Cookie的值 
(3)cookie.setValue() – 设置Cookie的值
(4)cookie.setMaxAge() – 设置Cookie的最大生存时间,

2.session:

将数据存储到服务器端,安全性相对较好,增加服务器的压力。

2.1.Session API

long getCreationTime();【获取Session被创建时间】
String getId();【获取Session的id】
long getLastAccessedTime();【返回Session最后活跃的时间】
ServletContext getServletContext();【获取ServletContext对象】
void setMaxInactiveInterval(int var1);【设置Session超时时间】
int getMaxInactiveInterval();【获取Session超时时间】
Object getAttribute(String var1);【获取Session属性】
Enumeration getAttributeNames();【获取Session所有的属性名】
void setAttribute(String var1, Object var2);【设置Session属性】
void removeAttribute(String var1);【移除Session属性】
void invalidate();【销毁该Session】
boolean isNew();【该Session是否为新的】

2.2Session的生命周期和有效期

Session在用户第一次访问服务器Servlet,jsp等动态资源就会被自动创建,Session对象保存在内存 里,这也就为什么上面的例子可以直接使用request对象获取得到Session对象。
如果访问HTML,IMAGE等静态资源Session不会被创建。
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,无论是否对Session进行读写,服务器都会认为Session活跃了一次。
由于会有越来越多的用户访问服务器,因此Session也会越来越多。为了防止内存溢出,服务器会把长时间没有活跃的Session从内存中删除,这个时间也就是Session的超时时间。
Session的超时时间默认是30分钟,有三种方式可以对Session的超时时间进行修改

第一种方式:在tomcat/conf/web.xml文件中设置,时间值为20分钟,所有的WEB应用都有效

<session-config>
                <session-timeout>20</session-timeout>
            </session-config>   
第二种方式:在单个的web.xml文件中设置,对单个web应用有效,如果有冲突,以自己的web应用为准。


        <session-config>
            <session-timeout>20</session-timeout>
        </session-config>   




第三种方式:通过setMaxInactiveInterval()方法设置


    //设置Session最长超时时间为60秒,这里的单位是秒
    httpSession.setMaxInactiveInterval(60);

    System.out.println(httpSession.getMaxInactiveInterval());

3.Session与Cookie的区别

		    Cookie	               										Session

存储位置 浏览器 服务器端
安全性 可以分析存放在本地的Cookie进行Cookie欺骗,不安全 安全
存储数据量 不超过4k,并且很多浏览器都限制一个站点最多保存20个Cookie 没有限制
存储数据方式 只能存储字符串 可以存储对象
性能 存放在浏览器不占用服务器性能 占用服务器性能

思考与心得:

怎么利用Cookies保持状态呢?
cookie的特点:它的信息是存储在客户端的,每一次向服务器发送请求,cookie都会一起提交。它的优点是响应速度快;缺点就比较明显,它的安全性较低。

第五章思维导图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kokotao

你的鼓励就是的创作的最大动力,

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值