jsp开发网站使用cookie的一点经验 选择自 idilent 的 Blog

news/2024/4/27 18:05:45/文章来源:https://blog.csdn.net/houzy/article/details/320516
在开发网站应用程序的过程中,使用cookie记录用户的一些信 息是比较常用的一种方法,而cookie的使用也非常简单 。如果我们在jsp程序中希望得到cookie的值 ,只需要使用HttpRequest.getCookies( )即可得到所有cookie的值,而把值写入客户端的cooki e文件也非常容易,是需要创建一个cookie,然后调用Htt pReponse.addCookie(Cookie
c)即可。但是我们在使用过程中往往会忽略一个问题 ,就是如果在一个页面中多次写一个cookie,那么结果如何呢

我们现在看一下下面两个页面的代码,
test.jsp代码如下:
<%
      Cookie c = new Cookie("test_cookie_name","test_cookie_value");
      response.addCookie(c);
      Cookie c1 = new Cookie("test_cookie_name","test_cookie_value_new");
      response.addCookie(c1);
%>
<a href="test1.jsp">show cookie value</a>

test1.jsp代码如下:
<%
<script type="text/javascript"> &lt;!-- D(["mb","&lt;span class=q&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; Cookie[] cs = request.getCookies();&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i=0;i&amp;lt;cs.length;i++){&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; out.println(cs[i].getName()+&amp;quot; &amp;nbsp;&amp;quot;+cs[i].getValue()+&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br&gt;%&amp;gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;",1] ); D(["mb","我们打开test.jsp,然后点击链接,进入test1.jsp,我们会发现&lt;wbr&gt;,页面里的内容如下:&lt;br&gt;",1] ); D(["mb","&lt;span class=q&gt;test_cookie_name &amp;nbsp;test_cookie_value&lt;br&gt;&lt;/span&gt;",1] ); D(["mb","JSESSIONIDQiv2X8CVzyA6T0hNzrVN&lt;wbr&gt;HFJUepeAiG8magiz2bREKiUP1Pyiie&lt;wbr&gt;bq!-1263017589!-1062731417!80&lt;wbr&gt;!443&lt;br&gt;&lt;br&gt;我们可以看到test_cookie_name的值是test&lt;wbr&gt;_cookie_value,这说明我们第二次调用respon&lt;wbr&gt;se.addCookie()没有起到任何作用。为了更加确定这&lt;wbr&gt;一说法我把test.jsp的代码做了一定的改动:&lt;br&gt;&amp;lt;%&lt;br&gt;for(int i=0;i&amp;lt;8;i++){&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; Cookie c = new Cookie(&amp;quot;test_cookie_name&amp;quot;,&lt;wbr&gt;&amp;quot;test_cookie_value&amp;quot;+i);&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; response.addCookie(c);&lt;br&gt; &amp;nbsp; &amp;nbsp; }&lt;br&gt;%&amp;gt;&lt;br&gt;&amp;lt;a href=&amp;quot;test1.jsp&amp;quot;&amp;gt;test&amp;lt;/a&amp;gt;&lt;br&gt;&lt;br&gt;通过测试可知结果还是一样,已有第一次赋的值真正的被写入了co&lt;wbr&gt;okie。有人也许会说,我们可以通过request&lt;wbr&gt;.getCookies()得到所有cookie&lt;wbr&gt;,然后找出这个要写的cookie,然后改变值,测试代码如下:&lt;br&gt;test.jsp代码:&lt;br&gt;&amp;lt;%&lt;br&gt;",1] ); //--&gt; </script>       Cookie[] cs = request.getCookies();
      for(int i=0;i<cs.length;i++){
              out.println(cs[i].getName()+"  "+cs[i].getValue()+"<br>");
      }
%>

我们打开test.jsp,然后点击链接,进入test1.jsp,我们会发现 ,页面里的内容如下:
test_cookie_name  test_cookie_value
JSESSIONIDQiv2X8CVzyA6T0hNzrVN HFJUepeAiG8magiz2bREKiUP1Pyiie bq!-1263017589!-1062731417!80 !443

我们可以看到test_cookie_name的值是test _cookie_value,这说明我们第二次调用respon se.addCookie()没有起到任何作用。为了更加确定这 一说法我把test.jsp的代码做了一定的改动:
<%
for(int i=0;i<8;i++){
      Cookie c = new Cookie("test_cookie_name", "test_cookie_value"+i);
      response.addCookie(c);
    }
%>
<a href="test1.jsp">test</a>

通过测试可知结果还是一样,已有第一次赋的值真正的被写入了co okie。有人也许会说,我们可以通过request .getCookies()得到所有cookie ,然后找出这个要写的cookie,然后改变值,测试代码如下:
test.jsp代码:
<%
<script type="text/javascript"> &lt;!-- D(["mb","&lt;span class=q&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; Cookie c = new Cookie(&amp;quot;test_cookie_name&amp;quot;,&lt;wbr&gt;&amp;quot;test_cookie_value&amp;quot;);&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; response.addCookie(c);&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; Cookie c1 = new Cookie(&amp;quot;test_cookie_name&amp;quot;,&lt;wbr&gt;&amp;quot;test_cookie_value_new&amp;quot;);&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; response.addCookie(c1);&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; Cookie c2 = new Cookie(&amp;quot;test_cookie_name1&amp;quot;,&lt;wbr&gt;&amp;quot;test_cookie_value1&amp;quot;);&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; response.addCookie(c2);&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; Cookie[] cs = request.getCookies();&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i=0;i&amp;lt;cs.length;i++){&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(cs[i].getName().equals(&lt;wbr&gt;&amp;quot;test_cookie_name1&amp;quot;)){&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cs[i].setValue(&amp;quot;test_cookie&lt;wbr&gt;_value1_new&amp;quot;);&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; response.addCookie(c2);&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br&gt;&lt;br&gt;%&amp;gt;&lt;br&gt;&lt;/span&gt;",1] ); D(["mb","&amp;lt;a href=&amp;quot;test1.jsp&amp;quot;&amp;gt;show cookie value&amp;lt;/a&amp;gt;&lt;br&gt;&lt;br&gt;测试结果还是证明这种做法不能解决我们遇到的问题,test&lt;wbr&gt;_cookie_name1的值仍是test_cookie&lt;wbr&gt;_value1,而不是test_cookie_value1&lt;wbr&gt;_new,其实我们仔细想一下就可以知道,这个解决方案是行不通&lt;wbr&gt;的。&lt;br&gt;&lt;br&gt;===================&lt;br&gt;Sincerely yours,&lt;br&gt;",1] ); //--&gt; </script>       Cookie c = new Cookie("test_cookie_name","test_cookie_value");
      response.addCookie(c);
      Cookie c1 = new Cookie("test_cookie_name","test_cookie_value_new");
      response.addCookie(c1);
      Cookie c2 = new Cookie("test_cookie_name1","test_cookie_value1");
      response.addCookie(c2);
      Cookie[] cs = request.getCookies();
      for(int i=0;i<cs.length;i++){
              if(cs[i].getName().equals("test_cookie_name1")){
                      cs[i].setValue("test_cookie_value1_new");
                      response.addCookie(c2);
                      break;
              }
      }

%>
<a href="test1.jsp">show cookie value</a>

测试结果还是证明这种做法不能解决我们遇到的问题,test _cookie_name1的值仍是test_cookie _value1,而不是test_cookie_value1 _new,其实我们仔细想一下就可以知道,这个解决方案是行不通 的。因为我们知道,对于一个页面中的request和respons e,是一次http请求产生的,request是http请求中 的所有参数,因此包含了发出这次http请求时cookie的值 ,而response是对于这次http请求web
application产生的反应,所以它可以写cookie的 值,这样看来,request得到的cookie的值 ,和response要写的cookie的值可以说是完全不同的 ,简单地说request得到的cookie的值是在这次htt p请求之前的cookie的值,而response要写得值是这 次http请求之后的cookie的值。所以上面的解决方案是无 法行得通的。

而我现在还没有发现有什么好的解决方案能够是的cookie记录 下我们最后一次写入的值,因此对于这个问题我们只能在代码中做到 ,对于每个http请求,对于每个cookie的值,只写一次 ,从而保证cookie的正确性。
版权所有:idilent 网站转载请注明作者 其他转载方式请与作者联系( idilent@yahoo.com.cn)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_883738.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

18个配色(色彩搭配)资源网站——设计师福利

无论是在品牌视觉形象的展示&#xff0c;还是传统广告和数字营销领域的推广&#xff0c;色彩搭配实在太重要了&#xff01;然而&#xff0c;我们通常所说的&#xff1a;这个品牌真高端&#xff01;真大气&#xff01;最重要因素是由色彩搭配决定的&#xff0c;这个是给人最直接…

网站的关键!教你13步打造漂亮的WEB字体

今天&#xff0c;大多数浏览器已经默认支持Web字体&#xff0c;日趋增多的字体特性被嵌入最新版HTML和CSS标准中&#xff0c;Web字体即将迎来一个趋于复杂的崭新时代。这意味着网页设计师需要重新审视经典的字体规则——而这并非故事的结束。 印刷字体是静态的&#xff0c;而网…

大型网站架构系列:电商网站架构案例(1)

大型网站架构是一个系列文档&#xff0c;欢迎大家关注。本次分享主题&#xff1a;电商网站架构案例。从电商网站的需求&#xff0c;到单机架构&#xff0c;逐步演变为常用的&#xff0c;可供参考的分布式架构的原型。除具备功能需求外&#xff0c;还具备一定的高性能&#xff0…

大型网站架构系列:电商网站架构案例(2)

电网网站架构案例系列的第二篇文章。主要讲解网站架构分析&#xff0c;网站架构优化&#xff0c;业务拆分&#xff0c;应用集群架构&#xff0c;多级缓存&#xff0c;分布式Session。 五、网站架构分析 根据以上预估&#xff0c;有几个问题&#xff1a; 需要部署大量的服务器&…

大型网站架构系列:电商网站架构案例(3)

本文章是电商网站架构案例的第三篇&#xff0c;主要介绍数据库集群&#xff0c;读写分离&#xff0c;分库分表&#xff0c;服务化&#xff0c;消息队列的使用&#xff0c;以及本电商案例的架构总结。 6.5数据库集群&#xff08;读写分离&#xff0c;分库分表&#xff09; 大型网…

大型网站架构系列:负载均衡详解(1)

面对大量用户访问、高并发请求&#xff0c;海量数据&#xff0c;可以使用高性能的服务器、大型数据库&#xff0c;存储设备&#xff0c;高性能Web服务器&#xff0c;采用高效率的编程语言比如(Go,Scala)等&#xff0c;当单机容量达到极限时&#xff0c;我们需要考虑业务拆分和分…

大型网站架构系列:负载均衡详解(3)

本次分享大纲 软件负载均衡概述Ngnix负载均衡Lvs负载均衡Haproxy负载均衡本次分享总结 一、软件负载均衡概述 硬件负载均衡性能优越&#xff0c;功能全面&#xff0c;但是价格昂贵&#xff0c;一般适合初期或者土豪级公司长期使用。因此软件负载均衡在互联网领域大量使用。常用…

大型网站架构系列:负载均衡详解(4)

本文是负载均衡详解的第四篇&#xff0c;主要介绍了LVS的三种请求转发模式和八种负载均衡算法&#xff0c;以及Haproxy的特点和负载均衡算法。具体参考文章&#xff0c;详见最后的链接。 三、LVS负载均衡 LVS是一个开源的软件&#xff0c;由毕业于国防科技大学的章文嵩博士于19…

大型网站架构系列:分布式消息队列(一)

以下是消息队列以下的大纲&#xff0c;本文主要介绍消息队列概述&#xff0c;消息队列应用场景和消息中间件示例&#xff08;电商&#xff0c;日志系统&#xff09;。 本次分享大纲 消息队列概述消息队列应用场景消息中间件示例JMS消息服务&#xff08;见第二篇&#xff1a;大…

大型网站架构系列:消息队列(二)

本文是大型网站架构系列&#xff1a;消息队列&#xff08;二&#xff09;&#xff0c;主要分享JMS消息服务&#xff0c;常用消息中间件&#xff08;Active MQ&#xff0c;Rabbit MQ&#xff0c;Zero MQ&#xff0c;Kafka&#xff09;。【第二篇的内容大部分为网络资源的整理和汇…

12个最佳的免费学习编程的游戏网站

在这篇文章中&#xff0c;我们对 200 多个编程游戏网站的各个方面进行了评估&#xff0c;包括是否免费、是否自由开源、是面对菜鸟还是有经验的程序员、支持的编程语言等等&#xff0c;然后遴选出这 12 个上佳的免费的编程游戏网站&#xff0c;希望能让你或你的朋友(或者你的孩…

11个最值得Java开发者收藏的网站

Java是一种面向对象的编程语言&#xff0c;由Sun Microsystems公司在1995年的时候正式发布。直到今天&#xff0c;Java都一直是最受欢迎的编程语言之一。如今&#xff0c;Java应用于各种各样的技术领域&#xff0c;例如网站开发、Android开发、游戏开发、大数据等等。 在世界各…

2020-08-27 KK日记,记录一下使用flask做的看小说网站

1、前言 虽然一直干着运维的工作&#xff0c;但是对编程却有莫名的兴趣&#xff0c;于是就依仗着大学时的一些编程基础&#xff0c;在空闲时间自学了python、flask框架、bootstrap、jquery&#xff0c;html等。并用此写了一个看爽文的“工具”。 2、设计思路 通过爬虫爬取感兴…

【易懂教程】在Github上搭建网站

首先&#xff0c;还是要说一下“写在前面的话”&#xff0c;文章属于个人学习笔记&#xff0c;抛砖引玉&#xff0c;希望能对你有微薄的帮助。 操作步骤&#xff1a; 既然是易懂教程&#xff0c;当然是图文并茂更能让你理解&#xff0c;将会大量采用图文形式进行讲解。 首先你…

手把手教你搭建网站环境——基于node后台的web服务

战前准备 下载好xftp(必备&#xff0c;用于上传你要部署的文件)&#xff1b;xshell作为windows而言是个非常好用的工具&#xff0c;不过像阿里本来就有控制台&#xff0c;倒不是必备&#xff0c;但是那个控制塔的字符丑得一匹&#xff0c;实在看不下去&#xff0c;我用xhell只…

网站/织梦首页或文章分享微信带缩略图和简介

1.在微信公众号号的基本设置里 2.公众号设置-功能设置-绑定好对应的域名 3.然后下载wechat.php文件下载&#xff0c;放在网站根目录&#xff08;下方提供了下载地址&#xff09; 4.把这段代码放到需要的页面里&#xff0c;url改成自己的域名 ig({ debug: 0,//如果分享失败&a…

如何实现分享网站文章到微信朋友圈时显示指定缩略图或LOGO

微信在分享第三方网站是不显示缩略图和描述的&#xff0c;如下图所示 要解决这个问题必须调用微信JS-SDK接口&#xff0c;下面讲一下如何调用接口 方法一&#xff1a; 第一部分 准备步骤 注册微信公众号。 通过左侧导航“开发”–“基本配置”进入。通过开发者ID及密码调用获取…

我的第一篇文章 ^_^庆祝我的个人网站开张

长沙开始下雨了&#xff0c;早上出去冻的不行&#xff0c;这就是南方的天气&#xff0c;没办法。想想我将要去读研的哈尔滨&#xff0c;现在已经在10度一下了&#xff0c;真不知道到时候怎么过。 下午去交研究生登记表&#xff0c;一份成绩单要盖4个章&#xff0c;每次办个什么…

discuz网站没备案无执照接入支付宝充值功能

discuz个人网站没备案无执照接入支付宝充值功能 文章目录 事情是这样的一、支付宝当面付是什么&#xff1f;二、如何申请当面付接口1.登录 支付宝商家中心2.点击“产品中心”&#xff0c;支付产品中选择当面付3.点击“立即开通”4.按步骤填写 三、创建应用及生成公钥和私钥1.登…