六、JSP——Cookie

本文介绍了Cookie的基本概念及其在用户状态保存中的应用,并提供了一个使用Cookie实现登录记录的具体例子。同时,文章还比较了Cookie与Session的区别,帮助读者理解两者的特点及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

保存用户状态的机制
  • session
  • cookie
Cookie介绍:

称为“小甜饼”,是Web服务器中保存在客户端的一系列文本信息

应用:
  • 典型应用1:判断注册用户是否已经登入网站
  • 典型应用2:“购物车”的处理
    作用:
    1.对特定对象的追踪
    2.保存用户网页浏览记录与习惯
    3.简化登入
    风险:容易泄漏用户信息

一、cookie的创建与使用

创建cookie步骤
  • 创建Cookie对象:Cookie newCookie=new Cookie(String key,Object value);

  • 写入Cookie对象:response.addCookie(newCookie);

  • 读取Cookie对象:Cookie[ ] cookies=request.getCookie( );

获取cookie

通过request.getCookies()方法获取cookie的内容,cookie的内容是数组

<!--获取cookie-->
Cookie[] cookies = request.getCookies();

<!--循环遍历输出cookies-->
for(Cookie c:cookies){
   system.out.println(c.getName()+" ,"+c.getValue());
}
常用方法
setMaxAge(int expiry);//设置Cookie有效时间,以秒为单位
getMaxAge();//获取cookie的有效时间,以秒为单位
setValue(String value);//在cookie创建后,对cookie进行赋值
getValue();//获取cookie的值
getName();//获取cookie的名称

二、使用cookie实现登入记录的例子

这里写图片描述
1.创建login.jsp

<%@ page language="java" import="java.util.*,java.net.*" pageEncoding="UTF-8"%>

<body>
//登入勾选cookie后将用户名和密码保留在登入框中 
<%
    String username="";
    String password=""; 
    Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0) {
            for (Cookie c : cookies) {
                if (c.getName().equals("username")) {
                        username=URLDecoder.decode(c.getValue(), "utf-8");
                    }
                if(c.getName().equals("password")){
                         password=URLDecoder.decode(c.getValue(), "utf-8");
                    }
                }
            }
    %>
    <form action="dologin.jsp" method="post">
        用户:<input type="text" name="username" value="<%=username %>">
            <br>
            密码:<input type="password" name="password" value="<%=password %>">
            <br>
            <br>
            <input type="checkbox" checked="checked" name="usecookie">十天内记住我的登录状态
            <br>
            <input type="submit" value="登入">
    </form>
</body>

2.创建dologin.jsp

<body>
    <%request.setCharacterEncoding("utf-8"); %>
    <%
    String[] cookie = request.getParameterValues("usecookie");
            if (cookie != null && cookie.length>0) {
                //获取表单用户名和密码,URLEcoder编码cookie的中文字符串为UTF-8
                String username = URLEncoder.encode(request.getParameter("username"),"utf-8");
                String password = URLEncoder.encode(request.getParameter("password"),"utf-8");

                //将信息保存在cookie中
                Cookie usernameCookie = new Cookie("username", username);
                Cookie passwordCookie = new Cookie("password", password);
                //设置Cookie的有效时间
                usernameCookie.setMaxAge(864000);
                passwordCookie.setMaxAge(864000);
                response.addCookie(usernameCookie);
                response.addCookie(passwordCookie);

            } else {
                //获取cookie的内容
                Cookie[] cookies = request.getCookies();
                if (cookies != null && cookies.length > 0) {
                    //循环遍历查找cookie中的username和password
                    for (Cookie c : cookies) {
                        //如果c.getName()获取cookie的名称和username
                        if (c.getName().equals("username")|| c.getName().equals("password")) {
                            c.setMaxAge(0);//将生命期限设置成0秒失效
                            response.addCookie(c);//将c保存在cookie
                        }
                    }
                }
            }
        %>
        <a href="user.jsp">查看用户信息</a>
    </body>

3.创建user.jsp

    <body>
        <%
        request.setCharacterEncoding("utf-8");
        String username="";
        String password="";
        Cookie[] cookies = request.getCookies();
            if (cookies != null && cookies.length > 0) {
                for (Cookie c : cookies) {
                    if (c.getName().equals("username")) {
                        //URLDecoder方法解码成ut-8
 username=URLDecoder.decode(c.getValue(),"utf-8");
                    }
                    if(c.getName().equals("password")){
     password=URLDecoder.decode(c.getValue(),"utf-8");
                    }
                }
            }
        %>

        用户名:<%=username %>
        密码:<%=password %>

    </body>

三、session和cookie对比

sessioncookie
在服务器端保存用户信息在客户端保存用户信息
session中保存的是Object类型cookie保存的是String
随会话的结束而将其存储的数据销毁cookie可以长期保存客户端
保存重要信息保存不重要的用户信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值