会话技术应用

会话技术

cookie

1 处理post请求乱码问题:

request.setCharacterEncoding(“utf-8”)

2 会话技术

  • 会话:user 打开浏览器,访问web服务器资源,会话建立,直到一方断开连接,会话结束,一次会话中可包含多次请求和响应。
  • 会话跟踪:是维护浏览器状态的方法,辨别多次请求是否来自同一浏览器,以便同一会话多次请求间共享数据。
  • HTTP协议:是无状态的,每次请求都会被视为新的请求,需会话跟踪技术实现会话内数据共享。
  • 实现方法: 1.客户端跟踪技术 Cookie 2.服务器端会话跟踪技术 Session

3 Cookie的基本使用

定义:客户端技术,数据存在客户端,每次请求都携带Cookie数据进行访问。

基本使用:

发送Cookie

1.创建Cookie对象,设置数据

Cookie cookie=new Cookie("key","value");

2.发送Cookie到客户端,使用response对象

response。addCoookie(cookie);

获取Cookie

  1. 获取客户端携带的所有cookie,使用request对象

    Cookie[] cookies = request.getCookies();

  2. 遍历数组,获取每一个Cookie对象:for

    使用Cookie对象方法获取数据

    cookie.getName();
    cookie.getValue();

    创建Maven项目,pom.xml依赖

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    ​
    <dependencies>
        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!--jsp-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
        </dependency>
        <!--jstl-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
        </plugins>
    </build>

4 Cookie原理

  • HTTP协议

  • 响应头:set-cookie

  • 请求头: cookie

过程;
  • AServlet给前端发送Cookie,BServlet从request中获取Cookie的功能

  • 对于AServlet响应数据的时候,Tomcat服务器都是基于HTTP协议来响应数据

  • 当Tomcat发现后端要返回的是一个Cookie对象之后,Tomcat就会在响应头中添加一行数据==Set-Cookie:username=zs==

  • 浏览器获取到响应结果后,从响应头中就可以获取到Set-Cookie对应值username=zs,并将数据存储在浏览器的内存中

  • 浏览器再次发送请求给BServlet的时候,浏览器会自动在请求头中添加==Cookie: username=zs==发送给服务端BServlet

  • Request对象会把请求头中cookie对应的值封装成一个个Cookie对象,最终形成一个数组

  • BServlet通过Request对象获取到Cookie[]后,就可以从中获取自己需要的数据

    Cookie的使用细节

    Cookie存活时间:

    • 默认状态Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁。

    • 设置Cookie存活时间

    • setMaxAge(int seconds):持久储存,提供好了对应的API来完成

      1.正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除

      2.负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁

      3.零:删除对应Cookie

Cookie存储中文

Cookie默认不支持中文,可用URL的编码和解码完成

编码: String value = "张三";
        //对中文进行URL编码
        value = URLEncoder.encode(value, "UTF-8");
        System.out.println("存储数据:"+value);
        //将编码后的值存入Cookie中
        Cookie cookie = new Cookie("username",value);
解码:String value = cookie.getValue();//获取的是URL编码后的值
                //URL解码
                value = URLDecoder.decode(value,"UTF-8");
                System.out.println(name+":"+value);//value解码后为 张三        

session

5.2 Session销毁

session的销毁会有两种方式:

  • 默认情况下,无操作,30分钟自动销毁

    <!--Session销毁时间设置,默认时间为30min-->
        <session-config>
            <session-timeout>30</session-timeout>
        </session-config>
  • 对于这个失效时间,是可以通过配置进行修改的

    //获取数据,从session中
    ​
            //1. 获取Session对象
            HttpSession session = request.getSession();
            System.out.println(session);
            // 销毁
            session.invalidate();
            
            //2. 获取数据
            Object username = session.getAttribute("username");
            System.out.println(username);
        }

Cookie和Session小结

Cookie和Session小结
  • Cookie 和 Session 都是来完成一次会话内多次请求间的数据共享

所需两个对象放在一块,就需要思考:

  • 区别:

    • 存储位置:Cookie 是将数据存储在客户端,Session 将数据存储在服务端

    • 安全性:Cookie不安全,Session安全

    • 数据大小:Cookie最大3KB,Session无大小限制

    • 存储时间:Cookie可以通过setMaxAge()长期存储,Session默认30分钟

    • 服务器性能:Cookie不占服务器资源,Session占用服务器资源

  • 应用场景:

    • 购物车:使用Cookie来存储

    • 以登录用户的名称展示:使用Session来存储

    • 记住我功能:使用Cookie来存储

    • 验证码:使用session来存储

  • 结论

    • Cookie是用来保证用户在未登录情况下的身份识别

    • Session是用来保存用户登录后的数据

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值