【JavaWeb】Cookie和Session

一、会话概念

会话:一个浏览器客户端和web服务器连续发生的一系列请求和相应的过程。一次会话中包含多次请求和响应。

会话要解决的问题:每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序需要想办法为每个用户保存这些数据。

会话的功能:在一次会话的范围内的多次请求间共享数据

会话的方式

  • 客户端:Cookie
  • 服务端:Session

二、Cookie介绍

        Cookie是客户端技术,程序把每个用户的数据以Cookie的形式返回给用户各自的浏览器。当前用户再次访问同一web资源时,就会带着各自的数据访问。这样,web资源处理的就是用户各自的数据了。

1、Cookie的使用步骤:

① 创建Cookie对象,绑定数据

new Cookie(String name, String value)

② 发送Cookie对象

response.addCookie(Cookie cookie)

③ 获取Cookie对象,取出数据

Cookie[] cookie = request.getCookies()

注:cookie的返回值是一个数组。

2、Cookie的实现原理

        基于响应头set-cookie和请求头cookie实现,web服务器通过在http相应消息中增加cookie响应头字段将cookie信息发送给浏览器,浏览器通过在htto请求消息中添加cookie请求头字段将cookie回传给web服务器。

3、Cookie的使用细节

① 多个Cookie 

        一次可以发送多个Cookie,创建多个Cookie对象,使用response调用多次addCookie方法发送Cookie。

② Cookie的保存时长

        默认关闭浏览器则销毁Cookie数据,但可设置Cookie,使其持久化存储,setMaxAge(int seconds),参数分为:

          丶正数:将Cookie写入硬盘文件,数值大小表示存活时间,单位秒。

          丶负数:默认值。关闭即销毁。

           丶:删除Cookie数据。

③ 存储中文

        Tomcat8之前,Cookie中不能存储中文数据,需要将中文进行转码,使用URL。Tomcat8之后允许,但不支持特殊数据,建议使用URL编码存储,使用URL解码解析。

4、Cookie共享

①同一个Tomcat       

        同一个tomcat服务器中部署的多个web项目的Cookie能共享。默认情况是不能共享,但是通过setPath(String path)可以设置Cookie的获取范围,默认情况下是当前的虚拟目录,若需要共享可设置为"/",为当前服务器。

②不同的Tomcat

        setDomain(String path):设置以及域名相同,即可在多个Tomcat之间共享Cookie。比如:setDomain(".baidu.com"),则tieba.baidu.com中的Cookie也可共享。

        注:一个而域名下只能存储20个cookie最多

三、保存用户上次访问时间(代码)

新建一个cookie.com.hbnu包,并创建一个servlet

package com.hbnu.cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet("/cookieServlet1")
public class CookieServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、解决中文乱码
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html; charset=utf-8");

        //4、获取cookie,并判断是不是我们的cookie
        Cookie[] cookies = req.getCookies();
        if (cookies != null){       //4.1如果不为空则说明访问过
            // 5、如果cookie内有我们的visitedTime的cookie则执行
            for (Cookie cookie : cookies) {     //把cookies的每一个值赋值给cookie
                if (cookie.getName().equals("visitedTime")) {       //5.1如果条件为真,说明用户上次登陆过
                    /*6、获取cookie
                    此时获取到的是我们的cookie,存储的是系统时间,因为是string类型所以转成long
                    并且是毫秒的时间戳,需要转变成日期,且格式化成自己习惯的形式
                    String value = cookie.getValue();*/
                    long time = Long.parseLong(cookie.getValue());  //获取用户上次访问本网站的时间
                    Date date = new Date(time);     //将时间戳转成日期
                    //格式化
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
                    resp.getWriter().println("您上次访问本网站的时间是:" + simpleDateFormat.format(date));
                }
                //8、判断输出
                if (cookie.getName().equals("username")) {
                    resp.getWriter().println("</br>您的用户名是:" + cookie.getValue());
                }

            }
        }else {     //4.2否则
            resp.getWriter().println("这是您第一次访问本网站...");
        }

        //2、创建我们的cookie,并绑定数据当前的系统时间,到cookie中
        Cookie cookie = new Cookie("visitedTime", System.currentTimeMillis() + "");
        //7、保存多个cookie
        Cookie cookie1 = new Cookie("username","落叶");

        //3、将创建好的Cookie返回给浏览器客户端
        resp.addCookie(cookie);
        //7.1、记得新建的cookie也返回给浏览器
        resp.addCookie(cookie1);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

启动,访问这个servlet可以f12查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaWeb中的CookieSession是用于在服务器和客户端之存储和传递数据的机制。 Cookie是在客户端(浏览器)保存少量数据的文本文件,它由服务器发送给浏览器,并在浏览器下一次向同一服务器发送请求时被浏览器携带过去。Cookie可以用于实现用户认证、记住登录状态、记录用户行为等功能。在JavaWeb中,可以使用`javax.servlet.http.Cookie`类来创建和设置CookieSession是在服务器端存储用户信息的一种机制。当用户第一次访问服务器时,服务器会为该用户创建一个唯一的会话标识(Session ID),并将该标识保存在Cookie中发送给客户端。客户端在后续的请求中会带上这个Session ID,服务器通过这个Session ID可以获取到对应的会话信息。在JavaWeb中,可以使用`javax.servlet.http.HttpSession`类来创建、获取和操作SessionCookieSession的区别主要有: 1. 存储位置:Cookie存储在客户端,Session存储在服务器端。 2. 容量限制:Cookie有大小限制,一般为4KB左右;Session可以存储较大量的数据。 3. 安全性:Cookie数据存储在客户端,容易被恶意篡改;Session数据存储在服务器端,相对较安全。 4. 生命周期:Cookie可以设置过期时间,可以长期保存在客户端;Session默认情况下会在一段时间内保持活跃,超过时间会被销毁。 在实际应用中,CookieSession常常结合使用,通过Cookie存储Session ID来实现用户的身份验证和状态管理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值