美文网首页
2019-04-28 JavaWeb之Cookie

2019-04-28 JavaWeb之Cookie

作者: 果冻_4c9b | 来源:发表于2019-04-28 19:01 被阅读0次

在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。
而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。
Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。

Cookie默认是会话级别的,关闭浏览器就在浏览器内存中消失

重要方法

  • 创建Cookie
    Cookie cookie1 = new Cookie("java2_username", username);

  • 设置持久化Cookie,以秒为单位,持久化的Cookie会保存在本地磁盘
    cookie1.setMaxAge(60*60);

颁发Cookie
response.addCookie(cookie1);

典型应用 -- 记录登录名和密码

reLogin.java

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>ReLogin Page</h1>
    <form action="${ pageContext.request.contextPath }/login2" method="post">
        <p><input type="text" name="username" value="${ java2_username }"></p>
        <p><input type="password" name="password" value="${ java2_password }"></p>
        <button>提交</button>
    </form>
</body>
</html>

Login2Servlet.java

package com.servlet;
import java.io.IOException;
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;

/**
 * Servlet implementation class Login2Servlet
 */
@WebServlet("/login2")
public class Login2Servlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        Userinfo user = new Userinfo();
        user.setUsername(username);
        user.setPassword(password);
        request.getSession().setAttribute("loginUser", user);
        
        // new
        Cookie cookie1 = new Cookie("java2_username", username);
        Cookie cookie2 = new Cookie("java2_password", password);
        // 磁盘
        cookie1.setMaxAge(60*60);
        cookie2.setMaxAge(60*60);
        response.addCookie(cookie1);
        response.addCookie(cookie2);
        
        response.sendRedirect(request.getContextPath()+"/success.jsp");
    }
}

GoReloginServlet.java

package com.servlet;
import java.io.IOException;
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;
/**
 * Servlet implementation class GoReloginServlet
 */
@WebServlet("/relogin")
public class GoReloginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    /**
     * @see HttpServlet#HttpServlet()
     */
    public GoReloginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = "";
        String pass = "";
        Cookie cookies[] = request.getCookies();
        for(Cookie cookie : cookies){
            if(cookie.getName().equals("java2_username")){
                name = cookie.getValue();
            }
            if(cookie.getName().equals("java2_password")){
                pass = cookie.getValue();
            }
        }
        request.setAttribute("java2_username", name);
        request.setAttribute("java2_password", pass);
        request.getRequestDispatcher("/reLogin.jsp").forward(request, response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}
  • 存在的问题
    只能保存文本信息,有内容长度限制,默认是明文

相关文章

  • 2019-04-28 JavaWeb之Cookie

    在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则...

  • JavaWeb之Cookie

    在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则...

  • JavaWeb——Cookie

    1.会话技术 1.会话:一次会话中包含多次请求和响应。 浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开...

  • JavaWeb之Cookie和Session

    Cookie 概念: 完成会话跟踪的一种机制 cookie 机制采用的是在客户端保持 HTTP 状态信息的方案。 ...

  • JavaWeb之Cookie和Session

    七、Cookie和Session 目录:会话、Cookie、Session(重点) 1.会话 会话:用户打开一个浏...

  • JavaWeb(九)Cookie

    1、提出问题 (1)HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 ,浏览...

  • JavaWeb - Cookie/Session

    Cookie/Session 会话 会话:用户打开一个浏览器,点击了很多超链接,访问了多个web资源,关闭浏览器,...

  • JavaWeb基础之Cookie与Session

    Cookie:Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏...

  • JavaWeb开发之状态管理Cookie

    什么是状态管理 将浏览器与Web服务器之间多次交互当作一个整体来看待,并且将多次交互所涉及的数据保存下来。 如何进...

  • 2019-04-28 JavaWeb之Session

    Session机制 session机制采用的是在服务器端保持 HTTP 状态信息的方案 。 除了使用Cookie,...

网友评论

      本文标题:2019-04-28 JavaWeb之Cookie

      本文链接:https://www.haomeiwen.com/subject/zamjnqtx.html