cookie的使用

cookie 的创建使用
查看 java ee API :Cookie类在javax.servlet.http.Cookie包中

  1. Cookie 的创建格式
    (1) Cookie 的构造方法
Cookie(String name, String value) 
name就是cookie的名称,value就是cookie要保存的值;

(2) 在服务器端,需要使用 response 对象的 addCookie 方法,将 cookie 响应给浏览器

addCookie(Cookie cookie) :void
Adds the specified cookie to the response.
  1. Cookie 中的方法
    2.1 常用方法:
    (1) 修改 cookie 的路径:
setPath(String uri) :void
设置访问服务器的什么路径时,携带cookie;  通常直接写/
假如设置cookie的路径为 “/项目名/资源名称”, 那么访问“/项目名/资源名称”或者“/项目名/资源名称/XXXX/yyyy...” 子目录都会携带当前cookie

(2) 修改 cookie 的存活时间:(默认情况下,cookie 仅在一次会话中(从浏览器打开到浏览器关闭)中生效,时间单位是秒):

setMaxAge(int expiry) : void
设置存活时间,如果是负数,代表会话范围内有效,如果是0代表立刻死亡,如果是正数,代表存活指定的秒数;

(3) 在 request 对象中有关于获取 cookie 对象的方法:(浏览器已经有 cookie , 要在服务器上获取或修改)

getCookies() :Cookie[]
获取浏览器携带过来的所有cookie对象

(4) Cookie 的方法:(获取 cookie 对象后 使用的方法)

getName() :String
    获取cookie的名称
getValue() :String
    获取cookie保存的值

(5) 删除 cookie :为了通知浏览器删除哪个cookie, cookie的name属性和path属性必须一致。当MaxAge属性设置为 零 时,即通知浏览器 立即删除。

1、将cookie的name(key)保持一致,value 设置为 ""; 
cookie = new Cookie("username","")
2、路径要发送cookie时保持一致。
cookie.setPath("/");
3、设置存活时间为0,
cookie.setMaxAge(0)
4、将cookie发送给浏览器。
response.addCookie(cookie)

2.2 非常用方法:
(1) 给当前 cookie 重新赋值

setValue(String newValue):void

(2) 对该cookie进行描述的信息(说明作用),浏览器显示cookie信息时能看到

setComment(String purpose):void

(3) 域名正则 使用

setDomain(String pattern):void  
符合该pattern(域名正则)的就可以访问该Cookie的域名。如果设置为“.google.com”,则所有
以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”

(4) 设置只通过 http 进行访问

setHttpOnly(boolean httpOnly):void  
设为true后,只能通过http访问,javascript无法访问,还可防止xss读取cookie

(5) 是否使用安全传输协议

setSecure(boolean flag):void    
是否使用安全传输协议。为true时,只有当是https请求连接时cookie才会发送给服务器端,而http时不会,但是服务端还是可以发送给浏览端的。

注意: 如果cookie值为Unicode字符,需要为字符编码。如果cookie值为二进制数据,则需要使用BASE64编码

cookie自动登录

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.net.URLDecoder" %>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>通过cookie保存并读取用户登录信息</title>
</head>
<body>
<%
    Cookie[ ]   cookies = request.getCookies();//从request中获得Cookie对象的集合
    String user = "";   //登录用户
    String date = "";   //注册的时间
    if (cookies != null) {
        for (int i = 0; i < cookies.length; i++) {  //遍历cookie对象的集合
            if (cookies[i].getName().equals("mrCookie")) {//如果cookie对象的名称为mrCookie
                user = URLDecoder.decode(cookies[i].getValue().split("#")[0],"UTF-8");//获取用户名
                date = cookies[i].getValue().split("#")[1];//获取注册时间
            }
        }
    }
    if ("".equals(user) && "".equals(date)) {//如果没有注册
%>
        游客您好,欢迎您初次光临!
        <form action="deal.jsp" method="post">
            请输入姓名:<input name="user" type="text" value="">
            <input type="submit" value="确定">
        </form>
<%
    } else {//已经注册
%>
        欢迎[<b><%=user %></b>]再次光临<br>
        您注册的时间是:<%=date %>
<%
    }
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>写入cookie</title>
<script type="text/javascript">window.location.href="index.jsp"</script>
</head>
<body>
<%
    request.setCharacterEncoding("utf-8");

    String user=URLEncoder.encode(request.getParameter("user"),"UTF-8");    //获取用户名
    Date date = new Date();
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd——hh:mm:ss");
    String currentTime = format.format(date);
    Cookie cookie = new Cookie("mrCookie", user+"#"+currentTime);
    cookie.setMaxAge(60*60*24*30);      //设置cookie有效期30天
    response.addCookie(cookie); //保存cookie
%>

</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 10,952评论 1 49
  • Cookie语法: Cookie通常是作为HTTP 应答头发送给客户端的,下面的例子展示了相应的语法(注意,Htt...
    CXYMichael阅读 9,737评论 0 0
  • 什么是Cookie Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 sessi...
    Longshihua阅读 10,428评论 0 5
  • 1.OpenGL 简介 OpenGL是一种用于创建实时3D图像的编程接口。 OpenGL(全写Open Graph...
    ClementGu阅读 3,443评论 0 1
  • 本文实现依赖python2.7、tensorflow、opencv、dlib,训练生成对抗模型(GAN),实现图像...
    斯坦因和他的狗阅读 16,247评论 20 30