老生常谈java中cookie的使用

1 什么是cookie

浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接。因此当一个请求发送到WEB服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待,这样的不好之处可想而知。为了弥补这个缺陷,Netscape开发出了cookie这个有效的工具来保存某个用户的识别信息,因此人们昵称为“小甜饼”。cookies是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段:Netscape Navigator使用一个名为cookies.txt本地文件保存从所有站点接收的Cookie信息;而IE浏览器把Cookie信息保存在类似于C:\windows\cookies的目录下。当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。

2 cookie的四个属性

max-age   指定Ccookie的生存周期(以秒为单位)!默认情况下,Cookie的值只在浏览器的会话期间存在,当用户退出浏览器这些值就消失了!

path   指定与Cookie关联在一起的网页.默认情况下,cookie会和创建它的网页以及与这个网页处于同一个目录下的网页和处于该目录下的子目录关联。

domain   设置访问域   举个例子:位于order.example.com的服务器要读取catalog.example.com设置的cookie.这里就要引入domain属性,假定由位于catalog.example.com的页面创  的cookie把自己的path属性设置为"/",把domain属性设置为".example.com",那么所有位于"catalog.example.com"的网页和所有位于"orders.example.com"的网页以及所有位于example.com域的其他服务器上得网页都能够访问这个cookie.如果没有设置cookie的domain值,该属性的默认值就是创建cookie的网页所在的  服务器的主机名。   注意:不能将一个cookie的域设置成服务器所在的域之外的域.

seure   指定在网络上如何传输cookie的值

3 java Cookie操作

创建Cookie

// new一个Cookie对象,键值对为参数
Cookie cookie = new Cookie("key", "cookie的value值");
   如果cookie的值中含有中文时,需要对cookie进行编码,不然会产生乱码,使用
      URLEncoder.encode("cookie的value值","utf-8");

// 设置Cookie最大生存时间,以秒为单位,负数的话为浏览器进程,关闭浏览器Cookie消失
cookie.setMaxAge(*24*60*60); // 一天
// 将Cookie添加到Response中,使之生效
response.addCookie(cookie); //addCookie后,如果已经存在相同名字的cookie,则最新的覆盖旧的cookie

注意:在Struts中可以使用 ServletActionContext.getResponse()获得respone对象

读取cookie

读取Cookie只能从request中获取全部Cookie,然后循环迭代。

在Struts中可以使用 ServletActionContext.getRequest()获得request对象

// 从request中获取Cookie,拿到的是一个Cookie数组
Cookie[] cookies = request.getCookies();
// 然后迭代之
if (cookies != null && cookies.length > 0) { //如果没有设置过Cookie会返回null
  for (Cookie cookie : cookies) {...}
}

删除cookie

删除Cookie的话,只需要将Cookie的生存期设为0即可

Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
  for (Cookie cookie : cookies) {
    String name = cookie.getName();
    // 找到需要删除的Cookie
    if (name.compareTo("target-key") == 0) {
      // 设置生存期为0
      cookie.setMaxAge(0);
      // 设回Response中生效
      response.addCookie(cookie);
    }
  }
}

4 cookie的setPath方法使用:

正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。

1.可在同一应用服务器内共享方法:设置cookie.setPath("/");

本机tomcat/webapp下面有两个应用:webapp_a和webapp_b,

1)原来在webapp_a下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。

2)若在webapp_a下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/");

就可以在webapp_b下面获取到cas设置的cookie了。

3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此cookie.setPath("/");之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath("/webapp_b/");

是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的webapp_a应用也不可以。

4)设置cookie.setPath("/webapp_b/jsp")或者cookie.setPath("/webapp_b/jsp/")的时候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得cookie。

5)设置cookie.setPath("/webapp_b");,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用webapp_a下面获取cookie了

6)有多条cookie.setPath("XXX");语句的时候,起作用的以最后一条为准。

5 cookie.setDomain方法设计跨域共享

A机所在的域:home.langchao.com,A有应用webapp_a

B机所在的域:jszx.com,B有应用webapp_b

1)在webapp_a下面设置cookie的时候,增加cookie.setDomain(".jszx.com");,这样在webapp_b下面就可以取到cookie。

2)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080/webapp_b,可以获取webapp_a在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/webapp_b则不可以获得cookie。

3)设置了cookie.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享

以上这篇老生常谈java中cookie的使用就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • cookie、session和java过滤器结合实现登陆程序

    cookie.session和过滤器通常都是用在web应用中,cookie和session用来保存一定的数据,过滤器Filter则是在浏览器发出请求之后,而后台执行特定的请求之前发生一定的作用.之所以把这三个放一起,是因为有很多时候都会是把他们结合在一起使用,例如有些登陆程序. cookie是浏览器的机制,session是服务器的机制,但是实际上cookie也是由服务器生成的,之后返回给浏览器的,并不是浏览器本身生成.当浏览器发送某个请求时,如果拥有有效的cookie则会把这个cookie带在一

  • 详细学习Java Cookie技术(用户登录、浏览、访问权限)

    本章文章详细讲解: 1.Cookie基本用法演示 2.演示Cookie的访问权限 3.演示Cookie的删除 4.利用Cookie显示用户上次登录的时间 5.利用Cookie技术显示用户最近浏览的若干个图片 6.测试火狐浏览器到底支持多少个Cookie和一个Cookie最大为多大 1.Cookie基本用法演示 index.jsp: <%@ page language="java" import="java.util.*" pageEncoding="

  • Java中Cookie和Session的那些事儿

    Cookie和Session都是为了保持用户的访问状态,一方面为了方便业务实现,另一方面为了简化服务端的程序设计,提高访问性能.Cookie是客户端(也就是浏览器端)的技术,设置了Cookie之后,每次访问服务端,请求中都会带上Cookie:Session是服务端技术,在服务端存储用户的访问信息. 使用Cookie传递信息,随着Cookie个数增多和访问量增大,它占用的带宽会越来越大:使用Session保存信息,最大的弱点就是不容易在多台服务器之间共享. 1 Cookie 通俗地讲,当用户使用H

  • Java用Cookie限制点赞次数(简版)

    本文简单利用Cookie技术来简单的限制点赞次数,并不能杜绝游客的恶意点赞. 好了,不啰嗦了,先来看看基础知识: ajax+springMVC+cookie 中间框架你随意,楼主这里用了springMVC,只要取得HttpServletRequest和HttpServletResponse你就可以操作cookie啦 什么是Cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScript 来创建和取回

  • Java 创建cookie和删除cookie

    //写cookie操作 Cookie cooki; cooki=new Cookie("bbs_0001",String.valueOf(num));//用户ID cooki.setMaxAge(60*60*24*365);//cookie时间 cooki.setPath("/"); //根据个人的不用,在不同功能的路径下创建 response.addCookie(cooki); //清空Cookie操作 Cookie[] cookies=request.getCo

  • java操作cookie示例(删除cookie)

    1.设置Cookie 复制代码 代码如下: Cookie cookie = new Cookie("key", "value");cookie.setMaxAge(60); 设置60秒生存期,如果设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效. 复制代码 代码如下: cookie.setPath("/test/test2"); 设置Cookie路径,不设置的话为当前路径(对于Servlet来说为request.getC

  • java模拟cookie登陆操作

    在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆.那么,如何解决这个问题呢? 方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时时将cookie发送过去用以表明身份,这样就能够访问带有权限的URL了. 下面首先介绍使用java模拟登陆. // 连接地址(通过阅读html源代码获得,即为登陆表单提交的URL) String surl = "http://login.goodjobs.cn/index.php/action/UserLo

  • Java读写Cookie记录的方法

    本文实例讲述了Java读写Cookie记录的方法.分享给大家供大家参考.具体如下: 写Cookie ,cookie的value可以使String, list , map,int : Cookie usernameCookie = new Cookie("username_" + schoolId, encodedUsername); usernameCookie.setMaxAge(60 * 60 * 24 * 365); response.addCookie(usernameCook

  • Java 是如何读取和写入浏览器Cookies的实例详解

    首先我们认识下什么是cookies: cookie实际上是一个存在你硬盘里的数据,但是这些数据很特殊,只能由web应用提交给浏览器帮助存储,并且我们还能读取浏览器的cookie web应用一般只在cookie中存储一些用户信息等少量且暂时的数据,数据量大则不适合存储在cookies 一般浏览器对于每个web应用会分别给予他们40个cookie用来存储数据,并且每个cookie的大小不超过4K(听说部分浏览器的cookie能存很大的数据,不过我们一般不会存这么大的数据,因为数据提取的效率不高,影响

  • JavaWeb使用Cookie模拟实现自动登录功能(不需用户名和密码)

    其中包含两个jsp文件,分别为login.jsp和index.jsp 代码如下: login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "

  • 解决java后台登录前后cookie不一致问题

    最近公司安全组提了一个bug,要求我们登录前后cookie不一致,这是一个奇葩的bug. 需求如下: 思路分析: 我的解决方案:在登录页面把Cookie中的JSESSIONID 删除掉,就可以实现cookie前后不一致,这种做法是治标不治本,简单粗暴,但是还是满足了需求. //删除cookie中的JSESSIONID document.cookie = "JSESSIONID=0;path=/;expires="+(new Date(0)).toGMTString(); 另外一种解决方

随机推荐