Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 812|回复: 0

详细介绍以下jsp中的cookies

[复制链接]

该用户从未签到

发表于 2011-7-29 16:36:39 | 显示全部楼层 |阅读模式
在开发网站应用程序的过程中,使用cookie记实用户的一些信息是比较常用的一种方法,而cookie的使用也非常简朴。

    一、Cookie是通过HttpServletResponse的addCookie方法加入到Set-Cookie应答头中的

    例如:

    Cookie userCookie = new Cookie("user", "admin");

    response.addCookie(userCookie);

    和设置有关系的还有以下两个重要方法

    1.setMaxAge

    设置Cookie过时之前的时间,以秒计。假如不设置该值,则Cookie只在当前会话内有效,而且这些Cookie不会保留到磁盘上。

    留意:删除cookie就是通过该方法实现的。将要删除的cookie的过时之前的时间指定为0就可以达到删除该cookie的目的。

    2.setPath

    设置Cookie合用的路径。假如不指定路径,Cookie将返回给当前页面(jsp(SUN企业级应用的首选)页面或者Servlet的映射)所在目录及其子目录下的所有页面。

    留意:

    A:所有的cookie都是有路径的

    B:该方法设置的路径为客户端路径,即“/”代表服务器根目录,而不是WEB应用根目录

    C:该方法设置路径时,“/myWeb/”与“/myWeb”是不同的,要特别留意;前者可以联系关系到服务器的myWeb目录下,而后者则不可以。

    D:该方法设置路径时,没有相对目录可言,即不论在哪个目录下设置setPath(“/myWeb/”),该cookie都将联系关系到服务器的myWeb目录下(setPath(“/myWeb”)则不可以),而不是当前目录的myWeb的子目录下;同样,设置setPath(“myWeb/”)和setPath(“myWeb”)也不能联系关系到当前目录的myWeb的子目录下。

    这里有个希奇的例子,就是在一个web应用下设置的cookie可以在另一个web应用下获得(两个web应用在统一个服务器下)

    目录结构:在服务器根目录上有web1和web2两个目录,在web1下有setcookie.jsp(SUN企业级应用的首选)和getcookie.jsp(SUN企业级应用的首选)、在web2下有getcookie.jsp(SUN企业级应用的首选)

    web1下的setcookie.jsp(SUN企业级应用的首选)

    <%

    Cookie userCookie = new Cookie("user", "admin");

    userCookie.setMaxAge(24*60*60);

    userCookie.setPath("/web2/");

    response.addCookie(userCookie);

    %> web1下的getcookie.jsp(SUN企业级应用的首选)

    <%

    Cookie[] cookie = request.getCookies();

    String user = new String();

    if ( cookie != null )

    {  for (int i = 0; i < cookie.length; i++)

    {  Cookie myCookie = cookie;

    if (myCookie.getName()。equals("user"))

    {  user = myCookie.getValue();

    }

    }

    }

    out.println("user = " + user);

    %>  web2下的getcookie.jsp(SUN企业级应用的首选)

    <%  Cookie[] cookie = request.getCookies();

    String user = new String();

    if ( cookie != null )

    {  for (int i = 0; i < cookie.length; i++)

    {  Cookie myCookie = cookie;

    if (myCookie.getName()。equals("user"))

    {  user = myCookie.getValue();

    }

    }

    }

    out.println("user = " + user);

    %>
[nextpage]
    先访问web1下的setcookie.jsp(SUN企业级应用的首选),然后分别访问web1和web2下面的getcookie.jsp(SUN企业级应用的首选)文件,你会发现希奇的现象,web1下的getcookie.jsp(SUN企业级应用的首选)中user为空而web2下的getcookie.jsp(SUN企业级应用的首选)中user却有值,这就实现了从一个web应用下设置的cookie在另一个web应用下获得。

    大多数人删除cookie不成功都是由于目录原因。一个典型的原因是在某一个目录中设置了cookie(没有调用setPath方法)却在另一个目录中删除该cookie(实在是调用setMaxAge方法)

    3、跨域共享cookie的方法:设置

    cookie.setDomain(".jszx.com");

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

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

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

    2)这个参数必需以“。”开始。

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

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

    二、读取

    从客户端读取Cookie时调用的是HttpServletRequest的getCookies方法。该方法返回一个与HTTP哀求头中的内容对应的Cookie对象数组。得到这个数组之后,一般是用轮回访问其中的各个元素,调用getName检查各个Cookie的名字,直至找到目标Cookie。然后对这个目标Cookie调用getValue,根据获得的结果进行其他处理。

    留意:若jsp(SUN企业级应用的首选)和Servlet所在目录(Servlet为其映射目录)的父目录中有同名cookie,则request.getCookie()方法得到的Cookie数组中保留的是其父目录中的cookie的信息;

    三、说明

    我们知道,对于一个页面中的request和response,是一次http哀求产生的,request是http哀求中的所有参数,因此包含了发出这次http哀求时cookie的值,而response是对于这次http哀求webapplication产生的反应,所以它可以写cookie的值,这样看来,request得到的cookie的值,和response要写的cookie的值可以说是完全不同的。

    简朴地说request得到的cookie的值是在这次http哀求之前的cookie的值,而response要写得值是这次http哀求之后的cookie的值。所以,在统一个request和response中,假如response中增加了新的cookie,request中并不能得到
回复

使用道具 举报

  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-7-29 16:37:08 | 显示全部楼层
    总结得不错,正在学习中。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2011-7-29 16:37:43 | 显示全部楼层
    很好,学习了。。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-13 06:00 , Processed in 0.368928 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表