쿠키 기술의 탄생 이후, 쿠키는 인터넷 사용자와 웹 개발자 사이에서 논쟁의 초점이 되었습니다. 다음 기사에서는 서블릿의 쿠키 도입에 대한 관련 정보를 주로 소개합니다. 기사의 소개는 매우 상세합니다. 도움이 필요한 친구들이 함께 살펴보겠습니다.
먼저 "대화"가 무엇인지 이해해 봅시다. 세션은 웹 기술의 용어입니다. 사용자가 브라우저를 열고 여러 하이퍼링크를 클릭하고 서버의 여러 웹 리소스에 액세스한 다음 브라우저를 닫는 것으로 간단히 이해할 수 있습니다.
브라우저를 열어 페이지를 방문한 다음 브라우저를 열어 동일한 페이지를 방문하는 경우 두 가지 세션이 있으며, 브라우저를 열어 페이지를 방문한 후 이 페이지의 하이퍼링크를 통해 열리면 새 브라우저를 사용하더라도 여전히 하나의 세션으로 계산됩니다.
모든 사용자는 브라우저와 서버 간의 대화 중에 필연적으로 일부 데이터를 생성하게 되며, 프로그램은 각 사용자를 위해 이 데이터를 저장할 방법을 찾아야 합니다. 예를 들어, 사용자가 상품 서블릿을 통해 상품을 구매하기 위해 하이퍼링크를 클릭했다면, 프로그램은 사용자가 결제 하이퍼링크를 클릭했을 때 결제 서블릿에서 해당 상품을 볼 수 있도록 상품을 저장할 수 있는 방법을 찾아야 하며, 그것을 지불하십시오.
상품 클릭과 결제를 위한 서블릿은 서로 다른 두 개의 Request 요청 객체를 전송하기 때문에 Request 객체를 사용하여 데이터를 저장하는 것은 불가능하며, ServletContext 객체를 사용하면 전달을 사용하는 경우 이론적으로 여러 사용자에게 스레드 안전 문제가 발생합니다. 기능 가능하지만 사용자 경험이 크게 줄어들며 항목을 클릭할 때마다 비용을 지불하라는 메시지가 표시됩니다. 따라서 위의 요구사항을 바탕으로 세션 중에 생성된 데이터를 저장하는 기술에는 두 가지가 있습니다. 하나는 쿠키이고 다른 하나는 세션 기술입니다. 다음 장에서 소개하겠습니다.
이 기사에서는 주로 서블릿의 쿠키 기술에 대해 설명합니다. 쿠키 기술은 클라이언트측 기술이며, 프로그램은 각 사용자의 데이터를 쿠키 형태로 사용자의 해당 브라우저에 기록합니다. 사용자가 브라우저를 사용하여 서버에 액세스할 때 자신의 데이터를 가져오므로 웹 서버는 사용자 자신의 데이터를 처리합니다.
다음 그림은 세션 중 마지막 액세스 시간으로 쿠키를 설정하는 간단한 프로세스입니다.
쿠키 개체를 생성하는 것은 Java 개체를 생성하는 것만큼 간단합니다.
사용 시 전달합니다. 생성자 쿠키 이름과 값의 키-값 쌍을 입력하기만 하면 됩니다. 서버 측에서 브라우저에서 전송된 쿠키 데이터를 얻으려면 요청의 request.getCookies
메소드를 사용할 수 있습니다. 쿠키 배열을 얻기 위해 객체를 사용하고, 브라우저에 쿠키를 출력하려는 경우 응답 객체의 response.addCookie(Cookie)
메소드를 사용할 수 있습니다. request.getCookies
方法获得一个Cookie数组,而我们想向浏览器输出Cookie时可以使用响应对象的response.addCookie(Cookie)
方法。
同时Cookie对象还有如下一些方法:
getName方法用来获取某个Cookie对象的名称。
setValue方法和getValue方法分别用来设置和获取某个Cookie对象的值。
setMaxAge(int expires
)方法是设置Cookie的有效期,如果没有这句代码,Cookie的有效期就是一个会话时间(即关闭浏览器该Cookie就不存在了),当设置了Cookie的有效期后,Cookie会保存在浏览器指定的硬盘文件中,同时在这段时间内,每次访问服务器都会带着Cookie过去。如果将该方法参数置为“0”,则服务器会指示浏览器删除该Cookie。
setPath方法是设置Cookie的有效路径。表示在访问某些特定URL时才会带Cookie过去。假设某个web应用为【myservlet】,如果我们将setPath方法中的参数设置为“/myservlet”,那么访问该web应用下所有的资源都会使浏览器发送Cookie过去;而如果我们将setPath方法中的参数设置为“/myservlet/pages”,那么只有访问该web应用中的【pages】下的资源才会带Cookie过去,而访问该web应用中的其他资源则不会带Cookie给服务器。如果我们没有设置setPath方法,那么该Cookie的有效路径默认为创建Cookie对象的当前程序所在目录。注意,Cookie的路径是给浏览器使用的(详见《Servlet的学习之web路径问题》)
setDomain方法是设置Cookie的有效域名,如: .sina.com

setMaxAge(intexpires
) 메소드는 쿠키의 유효 기간을 설정하는 것입니다. 이 코드가 없으면 쿠키의 유효 기간은 한 세션 시간입니다. 브라우저가 닫히는 경우) 쿠키가 설정된 경우, 쿠키는 브라우저가 지정한 하드 디스크 파일에 저장되며, 이 기간 동안 귀하가 서버를 방문할 때마다 쿠키가 함께 전달됩니다. . 이 메소드 매개변수가 "0"으로 설정되면 서버는 브라우저에 쿠키를 삭제하도록 지시합니다. 🎜🎜 setPath 메소드는 쿠키 설정을 위한 유효한 경로입니다. 특정 특정 URL을 방문할 때만 쿠키가 전달됨을 나타냅니다. 웹 애플리케이션이 [myservlet]이라고 가정해 보겠습니다. setPath 메소드의 매개변수를 "/myservlet"으로 설정하면 웹 애플리케이션의 모든 리소스에 액세스하면 브라우저가 쿠키를 전송하게 됩니다. 매개변수가 "/myservlet/pages"로 설정된 경우 웹 애플리케이션의 [페이지] 아래 리소스에 액세스할 때만 쿠키를 가져오고, 웹 애플리케이션의 다른 리소스에 액세스하면 쿠키를 서버로 가져오지 않습니다. setPath 메소드를 설정하지 않으면 쿠키의 유효 경로는 기본적으로 쿠키 객체를 생성한 현재 프로그램이 있는 디렉터리로 설정됩니다. 쿠키 경로는 브라우저에서 사용됩니다(자세한 내용은 "서블릿 학습 웹 경로 문제" 참조). 🎜🎜 setDomain 메소드는 .sina.com과 같은 쿠키의 유효 도메인 이름을 설정하는 것입니다. code> (참고 앞에 점이 있습니다.) 브라우저가 도메인 이름에 액세스할 때 쿠키가 전달됨을 나타냅니다. 하지만 이제 브라우저는 안전하지 않다고 간주될 수 있는 이 기능을 기본적으로 완전히 차단하므로 거의 포기되었습니다. 🎜<p> 举例:我们访问某个Servlet,而在访问这个Servlet时会将当前访问时间作为Cookie中的值返回给客户端,同时下次再次访问该Servlet时,会显示上一次客户端来访问的时间:</p>
<p class="jb51code"><br></p><pre class='brush:php;toolbar:false;'>public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.write("您上次访问的时间是:");
//获取用户上一次的访问时间并显示
Cookie[] cookies = request.getCookies(); //从请求中获取客户端发来的Cookie
for(int i=0;cookies!=null && i<cookies.length;i++) {
if(cookies[i].getName().equals("lastAccessTime")) { //获取最后访问时间的Cookie
Long mTime = Long.parseLong(cookies[i].getValue());
String lastAccessTime = new Date(mTime).toLocaleString();
writer.write(lastAccessTime);
}
}
//将本次登录时间重新装载进Cookie中并返回给客户端
Cookie timeCookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");
timeCookie.setMaxAge(1*24*60*60); //将Cookie有效期置为一天
response.addCookie(timeCookie); //将Cookie传回客户端
}</pre><p>第一次访问是没有Cookie的,所以看不到访问时间:</p>
<p style="text-align: center"><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/194/98adc163f83cb489dcaf44ec21626730-3.png?x-oss-process=image/resize,p_40" class="lazy" alt="" style="max-width:90%" style="max-width:90%"> </p>
<p>但是我们通过HttpWatch观察Response响应包中的内容已经有了“Set-Cookie”响应头:</p>
<p style="text-align: center"><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/194/720f344d77dead6a105696519b916df7-4.png?x-oss-process=image/resize,p_40" class="lazy" alt="" style="max-width:90%" style="max-width:90%"> </p>
<p>刷新后的第二次访问就可以看到了:</p>
<p style="text-align: center"><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/194/720f344d77dead6a105696519b916df7-5.png?x-oss-process=image/resize,p_40" class="lazy" alt="" style="max-width:90%" style="max-width:90%"> </p>
<p>同时观察HttpWatch中Request请求包的“Cookie”请求头可以发现:</p>
<p style="text-align: center"><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/194/720f344d77dead6a105696519b916df7-6.png?x-oss-process=image/resize,p_40" class="lazy" alt="" style="max-width:90%" style="max-width:90%"> </p>
<p> 现在我们再来通过一个案例来学习Cookie,这是一个很常见的案例,比如我们在访问购物网站的时候经常会发现当浏览了这个网站内的某个商品的时候,下次继续来访问这个网站,会有一个上次浏览物品的显示。</p>
<p> 如果我们不是用登录后将记录保存在服务器端,而是使用Cookie技术来将记录保存在客户端的浏览器中(现实生活中当然很少这样使用,这里只是作为案例学习),那么我们应该怎么做呢?</p>
<p> 首先我们必须在服务器要有两个Servlet,一个在用户眼中是用来显示所有商品的,一个是用来显示点击某个商品之后详细信息的。</p>
<p> ⑴.用来显示所有商品的Servlet需要完成如下功能:</p>
<p> ① 在一个部分以超链接形式将数据库中所有的商品显示在该Servlet上。</p>
<p> ② 在另一个部分获取用户请求中的Cookie将之前浏览过的商品(通过Cookie中的商品id)显示在该Servlet上。</p>
<p> ⑵. 用来显示点击某个商品之后详细信息的Servlet需要完成如下功能:</p>
<p> ① 在页面上通过超链接的URL跟随的参数(即商品id)来获取该商品对象,同时将该商品对象的详细信息输出到Servlet页面上。</p>
<p> ② 如果是用户首次访问,将用户浏览商品的id作为Cookie直接返回,而如果是用户再次访问,则需要根据一定的条件来将这些Cookie的值进行调整,以便易于显示和满足用户体验。</p>
<p> 当然,在这之前我们还需要做些准备工作,我们需要建立商品对象,这里简单的以书为商品建立对象:</p>
<p class="jb51code"><br></p><pre class='brush:php;toolbar:false;'>public class Product {
private String id;
private String name;
private String author;
public Product() {
super();
}
public Product(String id, String name, String author) {
super();
this.id = id;
this.name = name;
this.author = author;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}</pre><p>我们还需要一个数据库来保存商品,这里我们先用一个类来来保存(数据库还没学嘛T_T!),保存数据采用Map集合,这是因为如果有检索会方便:</p>
<p class="jb51code"><br></p><pre class='brush:php;toolbar:false;'>public class ProductDatabase {
private static Map<String,Product> map = new HashMap<String, Product>();
static{
map.put("1", new Product("1","《Java编程思想》","JB"));
map.put("2", new Product("2","《Java核心技术》","fdaf"));
map.put("3", new Product("3","《Java并发编程》","什么鬼"));
map.put("4", new Product("4","《Head first 设计模式》","老王"));
map.put("5", new Product("5","《HTML5权威手册》","hhaa"));
}
public static Map<String,Product> getMap() {
return map;
}
}</pre><p>做完了这两步,那么我们可以安心的去搞Servlet了,首先是在显示所有商品的Servlet:</p>
<p class="jb51code"><br></p><pre class='brush:php;toolbar:false;'>response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
//从数据库中取出要显示在购物网站首页的商品
Map<String,Product> map = ProductDatabase.getMap();
if(map == null) {
writer.print("您访问的宝贝已下架");
return ;
}
for(Map.Entry<String, Product> en : map.entrySet()) {
writer.print("<a href=&#39;/CookieProductProject/servlet/DetailGoodServlet?id="+en.getKey()+"&#39; target=&#39;_blank&#39; >"
+en.getValue().getName()+" <br/>");
}
//显示用户之前浏览过的商品,要从用户发送的请求中的Cookie里取得
writer.print("<br/><br/>");
writer.print("您最近浏览过的商品: <br/>");
Cookie[] cookies = request.getCookies();
for(int i=0;cookies!=null && i<cookies.length;i++ ) {
if(cookies[i].getName().equals("productHistory")) {
Cookie cookie = cookies[i];
String productId = cookie.getValue();
String[] splitId = productId.split("\\_");
for(String sId:splitId) {
Product book = ProductDatabase.getMap().get(sId);
writer.print(book.getName()+"<br/>");
}
}
}
}</pre><p>最后是点击某个商品显示详细信息的Servlet:</p>
<p class="jb51code"><br></p><pre class='brush:php;toolbar:false;'>response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
//通过用户点击商品的超链接而跟随URL来的ID参数来获取商品的详细信息
String productId = request.getParameter("id");
Map<String, Product> map = ProductDatabase.getMap();
Product book = map.get(productId);
writer.print("商品名:"+book.getName()+"<br />");
writer.print("作者:"+book.getAuthor());
//同时通过Cookie将用户观看的商品以Cookie的形式回传给用户浏览器
Cookie[] allCookies = request.getCookies();
Cookie cookie = creCookie(book.getId(),allCookies);
cookie.setMaxAge(24*60*60);
response.addCookie(cookie);</pre><p>其中<code>creCookie(String,Cookie[])
是自定义方法,用于获取用户的cookie并添加本次浏览商品id再作为cookie返回:
private Cookie creCookie(String id, Cookie[] cookies) { Cookie cookie = null; if(cookies == null) { //如果cookies为空,说明用户首次访问 cookie = new Cookie("productHistory", id); System.out.println(cookie.getValue()); return cookie; } for(int i=0; i<cookies.length; i++) { if(cookies[i].getName().equals("productHistory")){ cookie = cookies[i]; } } String historyStr = cookie.getValue(); //此时获取到的之前浏览过数据的历史记录,有多种情况 String[] produIds = historyStr.split("\\_"); //为了检测数组中是否有包含当前的id,建议使用集合,而且是使用链表结构的集合 LinkedList<String> list = new LinkedList<String>(Arrays.asList(produIds)); if(list.contains(id)) { list.remove(id); } else if(list.size()>=3){ list.removeLast(); } list.addFirst(id); StringBuilder sb = new StringBuilder(); for(String sId :list) { sb.append(sId+"_"); } sb.deleteCharAt(sb.length()-1); cookie.setValue(sb.toString()); System.out.println(cookie.getValue()); return cookie; }
我们在浏览器中进行首次访问:
随便点击个连接,可以看到该商品的详细信息(其实浏览器也偷偷将该商品的id以cookie传回了浏览器):
我们访问商品显示页面再次【刷新】就可以看到刚才浏览过的商品了:
总结
위 내용은 Java의 서블릿 쿠키에 대한 간략한 소개(그림 및 텍스트)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
![修复:谷歌浏览器请求太多错误 429 [已解决]](https://img.php.cn/upload/article/000/887/227/168160812385289.png)
近期很多Windows用户反映,当他们尝试访问某个URL时,PC上的GoogleChrome浏览器显示错误429。这是因为每次用户尝试在短时间内通过浏览器。通常,此错误是由网站生成的,以避免通过向服务器发送过多请求而被机器人或黑客入侵病毒。用户对在这个阶段可以做什么感到困惑,并因此感到失望。导致此错误的因素可能很多,我们在下面列出了其中一些因素。缓存内存和其他站点数据未清除从第三方来源安装的扩展系统上的一些有害软件病毒攻击在研究了上面列出的因素之后,我们在这篇文章中收集了一些修复程序,这

如果您在Windows10或11PC上遇到语法问题,本文将帮助您解决此问题。Grammarly是最流行的打字助手之一,用于修复语法、拼写、清晰度等。它已经成为写作专业人士必不可少的一部分。但是,如果它不能正常工作,它可能是一个非常令人沮丧的体验。许多Windows用户报告说此工具在他们的计算机上运行不佳。我们做了深入的分析,找到了这个问题的原因和解决方案。为什么Grammarly无法在我的PC上运行?由于几个常见原因,PC上的Grammarly可能无法正常工作。它包括以下内

Servlet生命周期是指servlet从创建直到毁灭的整个过程,可分为3个阶段:1、初始化阶段,调用init()方法实现Servlet的初始化工作;2、运行阶段(处理请求),容器会为指定请求创建代表HTTP请求的ServletRequest对象和代表HTTP响应的ServletResponse对象,然后将它们作为参数传递给Servlet的service()方法;3、销毁阶段。

每个网站都通过创建cookie使用户更容易浏览他们的网页和浏览他们的网站。然而,网站创建了一些第三方cookie,使他们能够跟踪访问其他网站的用户,以便更好地了解他们,从而有助于展示广告和其他帖子。一些用户可能认为他们的数据遭到破坏或存在安全风险,而另一些用户可能认为允许这些第三方cookie跟踪他们以在浏览器上获取更多内容是很好的。所以我们在这篇文章中解释了如何在谷歌浏览器中启用或禁用第三方cookies,详细步骤如下。如何在GoogleChrome中启用第三方Cookie如果您认为要

JavaServlet可用于:1.动态内容生成;2.数据访问与处理;3.表单处理;4.文件上传;5.会话管理;6.过滤器。示例:创建一个FormSubmitServlet来处理表单提交,将name和email作为参数,并重定向到success.jsp。

php curl设置cookie的方法:1、创建PHP示例文件;2、通过“curl_setopt”函数设置cURL传输选项;3、在CURL中传递cookie即可。

JavaServlet中实现分布式会话管理的方法有两种:1.会话复制:将会话数据复制到各个服务器。2.会话分布:使用集中式存储服务存储会话数据,由多个服务器访问。具体实现方式有:会话复制配置web.xml文件中的true;会话分布使用Redis:引入jedis库,编写Servlet使用Jedis存储和检索会话数据;使用SpringSession:引入spring-session依赖,注入SessionRepository,通过它操作会话数据。

在编写PHP程序时,使用cookie是一种常见的处理方式。cookie是一种在客户端存储数据的机制,它可以使Web应用程序在多个页面或浏览器会话之间保持状态。设置cookie的有效时间并实时生效是使用cookie时的一个关键因素,因为如果有效时间设置不正确,可能会导致身份验证问题、数据损坏等。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
