加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Java之Cookie介绍

发布时间:2021-11-19 12:10:21 所属栏目:PHP教程 来源:互联网
导读:Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP

Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入JSESSIONID用于标记一个会话(session),这样服务器可以知道该用户是否合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。
 
Cookie是客户端技术,而HttpSession是服务器端技术。
 
Java中Cookie详细介绍:
 
1、Cookie是什么?
 
  一个小信息,由服务器写给浏览器的。由浏览器来保存。
 
  客户端保存的Cookie信息,可以再次带给服务器。
 
  Cookie类:javax.servlet.http.Cookie
 
2、Cookie的属性:
 
  name:必须的
 
  value:必须的
 
  comment:可选的。注释
 
  path: 可选的,如果不设置路径,那么只有设置该cookie的URI及其子路径可以访问
 
      写Cookie的程序的访问路径是:http://localhost:8080/JavaWeb/servlet/CookieDemo
 
      其中:localhost就是域名;/JavaWeb/servlet就是当前Cookie的path
 
      若访问的地址的URI包含着cookie的路径,即URI.startWith(cookie的路径),为true,则客户端将该cookie带给服务器。
 
      比如浏览器存的cookie的路径是/JavaWeb
 
      现在访问的地址是:http://localhost:8080/JavaWeb/servlet/CookieDemo  则带该cookie
 
      现在访问的地址是:http://localhost:8080/JavaWeb/CookieDemo  则带该cookie
 
      若浏览器存的cookie的路径是/JavaWeb/servlet/
 
      访问的地址是:http://localhost:8080/JavaWeb/servlet/CookieDemo  则带该cookie
 
      访问的地址是:http://localhost:8080/JavaWeb/CookieDemo  则不带该cookie
 
      如果一个cookie的路径设置成了/JavaWeb,意味着浏览器访问当前应用下的所有资源时都会带着该cookie给服务器。
 
  domain:可选的。该Cookie所属的网站域名。(apache.org)默认值。
 
  maximum age:可选的。不设置就是会话过程(存在浏览器的内存中)。单位是秒如果是0,说明要删除。
 
  version:可选的。
 
3、如何向客户端写Cookie:
 
HttpServletResponse对象.addCookie(javax.servlet.http.Cookie对象)(就是写了一个响应消息头:Set-Cookie:cookie的信息)
 
Servlet规范中的Cookie API 提供了setMaxAge  setPath setDomain等方法,可以对Cookie状态进行控制
 
特点:一个浏览器针对一个网站最多存20个Cookie;最多存300个Cookie,每个Cookie的长度不能超过4KB(稀缺)。只是规定,但不同的浏览器实现的不同。
 
public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Cookie cookie=new Cookie("name","Tom");
        //设置Maximum Age
        cookie.setMaxAge(1000);
        //设置cookie路径为当前项目路径
        cookie.setPath(request.getContextPath());
        //添加cookie
        response.addCookie(cookie);
    }
 
4、服务器如何得到客户端传来的Cookie:
 
在Java中利用Serlvet或者JSP scriptlet可以向浏览器端写入Cookie,同样,利用Servet或者JSP scriptlet 也可以读取到 Cookie信息
 
Servlet规范中的Cookie API 同样存在getMaxAge  getPath  getDomain等方法,可以获得相应的状态。
 
不过此处存在一个问题:
 
读取Cookie时,发现除了Cookie的key和value外,其他值获取都为null。
 
原因很简单:Cookie从服务器端发送到客户端时,信息是完整的,Cookie从客户器端发送到服务端时,信息只剩下key、value了。(因为Domain不对的Cookie、Path不对的Cookie、过期的Cookie,客户端是不会发送过来的)
 
那为什么Java中提供了相应的get方法呢? 那个方法其实是在生成Cookie后,尚未发送到客户端时使用的
 
服务器端通过HttpServletRequest对象.getCookies()可获取cookies数组。
 
public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        Cookie[] cookies=request.getCookies();
        if(cookies!=null){
            for(Cookie cookie:cookies){
                String name=cookie.getName();
                String value=cookie.getValue();
                out.write(name+"="+value);
            }
        }
    }
 
5、如何区分Cookie:
 
通过名称不行,应通过domain+path+name来区分的。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读