美文网首页
Cookie与HttpSession

Cookie与HttpSession

作者: Binary_r | 来源:发表于2019-05-06 16:53 被阅读0次

一、Cookie

特点:Cookie技术:会话数据保存在浏览器客户端。

1、 Cookie技术核心

Cookie类:用于存储会话数据

1)构造Cookie对象
Cookie(String name, String value)
2)设置cookie
void setPath(java.lang.String uri) :设置cookie的有效访问路径
void setValue(java.lang.String newValue) :设置cookie的值
void setMaxAge(int expiry) : 设置cookie的有效时间

    正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。
    负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!
    零:表示删除同名的cookie数据

3)发送cookie到浏览器端保存
void response.addCookie(Cookie cookie) : 发送cookie
4)服务器接收cookie
Cookie[] request.getCookies() : 接收cookie(浏览器返回的cookie)

2、Cookie原理

1)服务器创建cookie对象,把会话数据存储到cookie对象中。
new Cookie("name","value");
2) 服务器发送cookie信息到浏览器
response.addCookie(cookie);
举例: set-cookie: name=eric (隐藏发送了一个set-cookie名称的响应头)
3)浏览器得到服务器发送的cookie,然后保存在浏览器端。
4)浏览器在下次访问服务器时,会带着cookie信息
举例: cookie: name=eric (隐藏带着一个叫cookie名称的请求头)
5)服务器接收到浏览器带来的cookie信息
request.getCookies();

保存Cookie
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>保存Cookie</h1>
<%
    Cookie cookie = new Cookie("aaa","AAA");
    response.addCookie(cookie);

    Cookie cookie2 = new Cookie("bbb","BBB");
    response.addCookie(cookie2);
%>
</body>
</html>
获取Cookie
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>获取Cookie</h1>
<%
    Cookie[] cookies = request.getCookies();
    if (cookies != null){
        for (Cookie c:cookies) {
            out.println(c.getName()+"="+c.getValue());
            out.print("<br>");
        }
    }
%>
</body>
</html>

二、HttpSession

Session特点:会话数据保存在服务器端。(内存中)
session是jsp的内置对象之一
1、HttpSession域相关方法

void setAttribute(java.lang.String name, java.lang.Object value) 保存数据
java.lang.Object getAttribute(java.lang.String name) 获取数据
void removeAttribute(java.lang.String name)清除数据

注意

request.getSession(false)如果session缓存中(如果Cookie不存在),不存在session,那么返回null,而不会创建session对象

2、HttpSession的其他方法

void setMaxInactiveInterval(int interval) 设置session的有效时间,默认30分服务器自动回收

全局修改session有效时间
<!-- 修改session全局有效时间:分钟 -->
    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>

void invalidate() 销毁session对象
java.lang.String getId() 得到session编号

登录案例
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException {
        //处理中文问题
        resp.setCharacterEncoding("utf-8");
        //获取表单数据
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //校验用户名和密码是否正确
        if (!"itcast".equalsIgnoreCase(username)){
            /**
             * 把用户名保存在Cookie中发送到客户端浏览器
             * 当再次打开login.jsp,login.jsp会读取Cookie并把它显示到用户名文本框中
             */
            Cookie cookie = new Cookie("uname",username);//创建Cookie
            cookie.setMaxAge(60*60);//设置Cookie命长为一个小时
            resp.addCookie(cookie);//保存Cookie
            /**
             *如果成功,保存登录信息到session中
             * 重定向到succ1.jsp
             */
            HttpSession session = req.getSession();//获取session
            session.setAttribute("username",username);//保存信息到session域
            resp.sendRedirect("/JavaWeb_1/Session/succ1.jsp");//重定向
        }else{
            /**
             * 如果失败,保存错误信息到request域中
             * 转发到login.jsp页面
             */
            req.setAttribute("msg","用户名或者密码错误");
            RequestDispatcher qr = req.getRequestDispatcher("/Session/login.jsp");//得到转发器
            qr.forward(req,resp);//转发
        }
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
<%--本页面提供登录表单,还要显示错误信息--%>
<h1>登录</h1><br>
<%
    /**
     * 读取名为uname的Cookie
     */
    String uname = "";
    Cookie[] cs = request.getCookies();//获取到所有Cookie
    for (Cookie c: cs) {//循环遍历所有的Cookie
        if ("uname".equals(c.getName())){
            uname = c.getValue();
        }
    }
%>
<%
    String message = "";
    String msg = (String) request.getAttribute("msg");//获取request域中名为msg的属性的值
    if (msg != null){
        message = msg;
    }
%>
<font color="red"><b><%= message %></b></font>
<form action="/JavaWeb_1/LoginServlet" method="post">
            <%-- 把Cookie中的用户名显示到用户名文本中--%>
    用户名<input type="text" name="username" value="<%=uname%>"><br>
    密 码<input type="password" name="password"><br>
    <input type="submit" value="登录">
</form>
</body>
</html>

相关文章

  • 会话管理

    会话? 使用Cookie实现会话管理 HttpSession HttpSession原理

  • Cookie与HttpSession

    一、Cookie 特点:Cookie技术:会话数据保存在浏览器客户端。 1、 Cookie技术核心 Cookie类...

  • 11 - JSP/cookie/HttpSession

    本文目录: JSP基础 Cookie HttpSession JSP基础 JSP(Java Server Page...

  • HttpServletRequest详解

    一、HttpServletRequest详解 二、会话概述 三、Cookie和HttpSession简介 四、Co...

  • HttpSession相较于Cookie

    看此笔记前提是[(预习)(复习)]过cookie和httpsession,让我们温习一下,url格式:protoc...

  • Cookie和Session详解

    一、Cookie的案例:记录用户最近商品的访问记录 二、HttpSession概述及原理探讨 三、HttpSess...

  • 04_Cookie和HttpSession会话

    1) 会话的概念 2) cookie 的概念 3) 创建、发送、接收、删除 cookie 4) cookie ...

  • 学习笔记二Session 管理

    保持状态的四种方法:网址重写,隐藏域,Cookie和HttpSession对象 2.1网址重写 一种session...

  • 控制器支持的方法参数

    1. servletrequest与httpservletrequest 请求对象 2. httpsession会...

  • HttpSession对象

    初识HttpSession对象 HttpSession对象是javax.servlet.http.HttpSess...

网友评论

      本文标题:Cookie与HttpSession

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