HTTP状态管理机制Cookie和session

本文介绍了HTTP状态管理中的Cookie和Session技术。详细讲解了Cookie的应用,包括创建、查询、修改及其特点,同时也阐述了Session的工作原理、管理与超时机制。此外,针对浏览器禁用Cookie的情况,探讨了URL重写作为解决方案。
摘要由CSDN通过智能技术生成

一、状态管理概述

HTTP协议是无状态的,不能保存每次提交的信息,即当服务器返回与请求相对应的应答之后,这次事务的所有信息就丢掉了。
如果用户发来一个新的请求,服务器无法知道它是否与上次的请求有联系。
对于那些需要多次提交数据才能完成的Web操作,比如登录来说,就成问题了。

什么是状态管理

WEB应用中的会话是指一个客户端浏览器与WEB服务器之间连续发生的一系列请求和响应过程。
WEB应用的会话状态是指WEB服务器与浏览器在会话过程中产生的状态信息,借助会话状态,WEB服务器能够把属于同一会话中的一系列的请求和响应过程关联起来。
状态管理有两种技术,分别是客户端状态管理Cookie技术和服务器状态管理session技术

二、Cookie应用

1、什么是Cookie

Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一小段数据,WEB服务器传送给各个客户端浏览器的数据是可以各不相同的。

一旦WEB浏览器保存了某个Cookie,那么它在以后每次访问该WEB服务器时,都应在HTTP请求头中将这个Cookie回传给WEB服务器。

WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器。

一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。

一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie

浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB

2、创建Cookie

1)、创建cookie

Cookie cookie = new Cookie("username","booy");

2)、设置属性
setMaxAge():有效期以秒计,默认-1保存在内存中,浏览器关闭销毁,设置0表示立即销毁
setPath():有效路径,空表示同级目录,/表示所有项目
setHttpOnly():表示只有http协议可读

        cookie.setMaxAge(60*60*24*365);
        cookie.setPath("/");
        cookie.setHttpOnly(true);

3)、添加cookie

response.addCookie(cookie);

3、查询Cookie

		//获取所有的Cookie
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
   
            //检索自己的cookie
            if("username".equals(cookie.getName())){
   
                System.out.println(cookie.getValue());
            }
        }

4、修改Cookie

只需要保证Cookie的名和路径一致即可修改

//创建Cookie
Cookie ck=new Cookie("code", code);
ck.setPath("/");//设置Cookie的路径
ck.setMaxAge(-1);//内存存储,取值有三种:>0有效期,单位秒;=0失效;<0内存存储
response.addCookie(ck);//让浏览器添加Cookie

注意:如果改变cookie的name和有效路径会新建cookie, 而改变cookie值、有效期、和httponly会覆盖原有cookie

5、Cookie的编码与解码

中文和英文字符不同,中文属于Unicode字符,在内存中占用4个字符,而英文属于ASCII字符,内存中只占2个字节。Cookie中使用Unicode字符时需要对Unicode字符进行编码,否则会出现乱码。编码可以使用java.net.URLEncoder类的encode(String str,String encoding)方法,解码使用java.net.URLDecoder类的decode(String str,String encoding)方法(不建议cookie使用中文)

代码如下:
保存:Servlet类

	 // 使用中文的 Cookie. name 与 value 都使用 UTF-8 编码. 
    Cookie cookie = new Cookie(
        URLEncoder.encode("姓名", "UTF-8"), 
        URLEncoder.encode("老邢", "UTF-8"));
    // 发送到客户端   
    response.addCookie(cookie);

读取:Servlet读取

    if(request.getCookies() != null)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值