10、Cookie与SeSSion

1、Cookie
1.向客户端添加Cookie
package com.jiang.servlet;
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;
@WebServlet("/MyServlet6")
public class MyServlet6 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //(1).向客户端添加Cookie
        Cookie cook = new Cookie("name","value");
        //Cookie cookie=new Cookie("name", URLEncoder.encode("撒阿斯顿","UTF-8"));//如果输入中文无法识别,则可以用此方法进行编码,读取时需要进行对应的解码
        cook.setMaxAge(10);  //设置该cookie在客户端的存活时间,秒,设置为Integer.MAX_VALUE表示一直存活;不设置则只能同一个浏览器窗口中才能获取Cookie的值
        //年龄为正数,在那段时间中,任何浏览器窗口可以取该值;年龄为0,将客户端存在的当前Cookie对象删除,任何窗口都不能取值
        cook.setPath("/");//可在同一应用服务器内共享
        resp.addCookie(cook);  //用响应对象向客户端添加cookie
        System.out.println("新增Cookie成功");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
}
2.后台从Cookie中取出需要得数据
package com.jiang.servlet;
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;
@WebServlet("/MyServlet7")
public class MyServlet7  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //(2)后台从Cookie中取出需要得数据
        Cookie[] cos = req.getCookies();
        if(cos!=null) {//cks为NULL则没有与该web程序相关的Cookie
            for (int i = 0; i < cos.length; i++) {//用循环遍历cookie数组
                System.out.println("cos[i].getName()=" +cos[i].getName());
                if (cos[i].getName().equals("name")){//将名字与需要得到得数据得名字一样得值取出来
                    String a=cos[i].getValue().toString();//取出来的值要toString()
                    //a=URLDecoder.decode(a,"UTF-8");//已UTF-8进行解码
                    System.out.println("我找到了cookie的name的值=" +a );
                }
            }
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
}
3.前台从Cookie中取出需要得数据
<%@ page import="java.net.URLDecoder" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--(3)前台从Cookie中取出需要得数据--%>
<h1>结果=${cookie.name.value}</h1>								<%--//从cookie中取值--%>
<%--当cookie.name.value中的值需要中文转码时,可在前台将它转换为request,再进行取值(一般不建议这样做)--%>
<%
    Cookie[]cos=request.getCookies();
    if(cos!=null) {
        out.println("cos!=null"+" <br/>");
        for (int i = 0; i < cos.length; i++) {
            out.println("cos[i].getName()=" +cos[i].getName()+" <br/>");
            if (cos[i].getName().equals("name")){
                String a=cos[i].getValue().toString();
                a= URLDecoder.decode(a,"UTF-8");
                request.setAttribute("name",a);
                out.println("我找到了cookie的name的值=" +a+" <br/>" );
            }
        }
    }
%>
<h1>结果=${requestScope.name.toString()}</h1>
<%--打印所有cookie--%>
<c:forEach var="cookieVal" items="${requestScope.cookies}" >
    <tr>
        <td align="right">${cookieVal.name}</td>
        <td>${cookieVal.value}</td>
    </tr>
</c:forEach>
</body>
</html>
4.Cookie的优缺点

优点:

	1.能在规定的时间内保存用户的相关信息,主要为登录名
	2.定向广告

缺点:

	1.只能往Cookie中写字符串,不能放对象
	2.放在客户端不安全
	3.一个WEB程序只支持200多个Cookie
	4.用户有权限禁止cookie
2、Session
1.后台设置与获取Session
package com.jiang.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet("/MyServlet8")
public class MyServlet8 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        session.setAttribute("name","小江");//设置session的值
        String name = (String)session.getAttribute("name");//获取session的值
        System.out.println(name);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
}
2.前台从Session中取出需要得数据
<%@ page import="java.net.URLDecoder" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--(3)前台从Cookie中取出需要得数据--%>
<h1>结果=${sessionScope.name.value}</h1>								<%--//从cookie中取值--%>
<%--当cookie.name.value中的值需要中文转码时,可在前台将它转换为request,再进行取值(一般不建议这样做)--%>
<%
  HttpSession ses=request.getSession();
  String val = (String)ses.getAttribute("name");//获取session的值
  val= URLDecoder.decode(val,"UTF-8");
  request.setAttribute("name",val);
  out.println("我找到了Session的name的值=" +val+" <br/>" );
%>
<h1>结果=${requestScope.name.toString()}</h1>
</body>
</html>
3.Session的优缺点

优点:

	1.Session中可以写字符串、对象、数组等object
	2.放在服务器端,信息安全

缺点:

	1.用户禁止cookie时,就无法使用这个Session变量
	2.随着站点访问量的增大,服务器将会因此而无法正常运行
	3.过度使用session变量将会导致代码不可读而且不好维护
3、cookie与session区别
  • cookie:(string,string)。存储在客户端中。cookies文件的内容大致上包括了诸如用户名、密码、设置等。cookie存储的数据不超过3 K
  • session:(string,object)。存储在服务端。可以任意存储数据,但是数据过多会影响性能
  • session是一种特殊的cookie。
  • 当客户端第一次请求服务器的时候,服务器生成一份session保存在服务端,将该数据(session)的id以cookie的形式传递给客户端;以后的每次请求,浏览器都会自动的携带cookie来访问服务器(session数据id)。
  • cookie的简单使用
  • Session的简单使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值