Latest web development tutorials

بريمج تجهيز كوكي

ملف تعريف الارتباط هو ملف نصي المخزنة على جهاز الكمبيوتر العميل، ويحتفظ مجموعة متنوعة من تتبع المعلومات. بريمج جافا دعم واضح كوكي HTTP.

إرجاع هوية المستخدم تتضمن ثلاث خطوات:

  • النصي الخادم يرسل ملف تعريف الارتباط إلى المستعرض. على سبيل المثال: الاسم، العمر أو رقم الهوية.
  • سوف يقوم المتصفح بتخزين هذه المعلومات على الكمبيوتر المحلي لاستخدامها في المستقبل.
  • في المرة القادمة المستعرض بإرسال طلب إلى أي ملقم ويب، فإن المتصفح يرسل معلومات كوكي إلى الخادم، وسوف تستخدم خادم هذه المعلومات لتحديد المستخدمين.

يروي هذا الفصل كيفية تعيين أو إعادة تعيين كوكي، وكيفية الوصول إليها ل، وكيفية إزالتها.

بريمج كوكي تجهيز احتياجات ترميز الصيني وفك شفرة، على النحو التالي:

String   str   =   java.net.URLEncoder.encode("中文");            //编码
String   str   =   java.net.URLDecoder.decode("编码后的字符串");   // 解码

تحليل كوكي

وعادة ما يتم وضع الكعكة في معلومات رأس HTTP (على الرغم من أن جافا سكريبت ويمكن أيضا أن توضع مباشرة في متصفح كوكي). ووضع بريمج كوكي إرسال رأس التالية:

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; 
                 path=/; domain=w3cschool.cc
Connection: close
Content-Type: text/html

كما ترون، يحتوي على رأس تعيين ملف تعريف الارتباط زوج قيمة اسم، تاريخ بتوقيت جرينتش مسار والمجال. اسم وقيمة سيتم ترميز URL. ينتهي الحقل هو التعليمات التي تخبر المتصفح بعد تاريخ ووقت معين إلى "نسيان" كوكي.

إذا تم تكوين المستعرض الخاص بك لتخزين ملفات تعريف الارتباط، فإنه سيتم الإبقاء على هذه المعلومات حتى تاريخ انتهاء الصلاحية. إذا متصفح المستخدم لتتوافق مع أي من المجال كوكي ومسار الصفحة، فإنه سيتم إعادة إرسال كوكي إلى الملقم. قد تظهر معلومات رأس المتصفح على النحو التالي:

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

بريمج يمكن الوصول عن طريق كوكيrequest.getCookiesطريقة الطلب()، والتيترجع صفيف من الكائناتكوكي.

بريمج طرق كوكي

وفيما يلي قائمة من أساليب مفيدة عندما تعمل في بريمج كوكي يمكن استخدامها.

序号方法 & 描述
1public void setDomain(String pattern)
该方法设置 cookie 适用的域,例如 w3cschool.cc。
2public String getDomain()
该方法获取 cookie 适用的域,例如 w3cschool.cc。
3public void setMaxAge(int expiry)
该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。
4public int getMaxAge()
该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。
5public String getName()
该方法返回 cookie 的名称。名称在创建后不能改变。
6public void setValue(String newValue)
该方法设置与 cookie 关联的值。
7public String getValue()
该方法获取与 cookie 关联的值。
8public void setPath(String uri)
该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。
9public String getPath()
该方法获取 cookie 适用的路径。
10public void setSecure(boolean flag)
该方法设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。
11public void setComment(String purpose)
设置cookie的注释。该注释在浏览器向用户呈现 cookie 时非常有用。
12public String getComment()
获取 cookie 的注释,如果 cookie 没有注释则返回 null。

إعدادات ملفات تعريف الارتباط من خلال بريمج

عن طريق وضع ينطوي على بريمج كوكي ثلاث خطوات:

(1) إنشاء كائن كوكي: يمكنك استدعاء منشئ كوكي مع اسم الكعكة وقيمة الكعكة، اسم الكعكة والكعكة القيم هي سلاسل.

Cookie cookie = new Cookie("key","value");

تذكر، بغض النظر عن اسم أو قيمة، يجب أن لا يحتوي على أية مسافات أو الأحرف التالية:

[ ] ( ) = , " / ? @ : ;

(2) تحديد الحد الأقصى للعمر: يمكنك استخدام الأسلوب لتحديد setMaxAge الكعكة قادرة على الحفاظ على وقت صالح (في ثواني).يمكننا تحديد مدة صلاحية أقصاها 24 ساعة في الكعكة.

cookie.setMaxAge(60*60*24); 

(3) لإرسال كوكي رؤوس استجابة HTTP: يمكنك استخدام response.addCookieلإضافة استجابة HTTP رأس كوكي، على النحو التالي:

response.addCookie(cookie);

أمثلة

دعونا تعديل لدينا حالات نموذج البيانات ، تعيين كوكي من الأسماء الأولى والأخيرة.

package com.w3big.test;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloServlet
 */
@WebServlet("/HelloForm")
public class HelloForm extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloForm() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		// 为名字和姓氏创建 Cookie      
		Cookie name = new Cookie("name",
				URLEncoder.encode(request.getParameter("name"), "UTF-8")); // 中文转码
		Cookie url = new Cookie("url",
		              request.getParameter("url"));
		
		// 为两个 Cookie 设置过期日期为 24 小时后
		name.setMaxAge(60*60*24); 
		url.setMaxAge(60*60*24); 
		
		// 在响应头中添加两个 Cookie
		response.addCookie( name );
		response.addCookie( url );
		
		// 设置响应内容类型
		response.setContentType("text/html;charset=UTF-8");
		
		PrintWriter out = response.getWriter();
		String title = "设置 Cookie 实例";
		String docType = "<!DOCTYPE html>\n";
		out.println(docType +
		        "<html>\n" +
		        "<head><title>" + title + "</title></head>\n" +
		        "<body bgcolor=\"#f0f0f0\">\n" +
		        "<h1 align=\"center\">" + title + "</h1>\n" +
		        "<ul>\n" +
		        "  <li><b>站点名:</b>:"
		        + request.getParameter("name") + "\n</li>" +
		        "  <li><b>站点 URL:</b>:"
		        + request.getParameter("url") + "\n</li>" +
		        "</ul>\n" +
		        "</body></html>");
		}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

ترجمة HelloFormبريمج سابقة، وإنشاء الإدخال المناسب في ملف web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet> 
    <!-- 类名 -->  
    <servlet-name>HelloForm</servlet-name>
    <!-- 所在的包 -->
    <servlet-class>com.w3big.test.HelloForm</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloForm</servlet-name>
    <!-- 访问的网址 -->
    <url-pattern>/TomcatTest/HelloForm</url-pattern>
  </servlet-mapping>
</web-app>
آخر محاولة لاستدعاء التالية بريمج صفحة HTML.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action=/TomcatTest/HelloForm method="GET">
站点名 :<input type="text" name="name">
<br />
站点 URL:<input type="text" name="url" /><br>
<input type="submit" value="提交" />
</form>
</body>
</html>

حفظ الملف إلى محتوى HTML فوق /TomcatTest/test.html في.

نحن المقبل زيارة الموقع: // المضيف المحلي: 8080 / TomcatTest / test.html و GIF عرض على النحو التالي:

ملاحظة: بعض من مسار أعلاه يتطلب المزيد من المسار الفعلي تعديل المشروع الخاص بك.

من خلال قراءة بريمج كوكي

لقراءة كوكي، تحتاج إلى إنشاء كائنjavax.servlet.http.Cookieعن طريق استدعاءgetCookiesHttpServletRequest()طريقة المصفوفة. ثم حلقة من خلال مجموعة ويستخدم getName () وطريقة getValue () للوصول إلى قيمة كل الكعكة والأفراد المرتبطين.

أمثلة

كوكي دعونا قراءة مجموعة المثال أعلاه

package com.w3big.test;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ReadCookies
 */
@WebServlet("/ReadCookies")
public class ReadCookies extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ReadCookies() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
    	Cookie cookie = null;
    	Cookie[] cookies = null;
    	// 获取与该域相关的 Cookie 的数组
    	cookies = request.getCookies();
         
         // 设置响应内容类型
         response.setContentType("text/html;charset=UTF-8");
    
         PrintWriter out = response.getWriter();
         String title = "Delete Cookie Example";
         String docType = "<!DOCTYPE html>\n";
         out.println(docType +
                   "<html>\n" +
                   "<head><title>" + title + "</title></head>\n" +
                   "<body bgcolor=\"#f0f0f0\">\n" );
          if( cookies != null ){
            out.println("<h2>Cookie 名称和值</h2>");
            for (int i = 0; i < cookies.length; i++){
               cookie = cookies[i];
               if((cookie.getName( )).compareTo("name") == 0 ){
                    cookie.setMaxAge(0);
                    response.addCookie(cookie);
                    out.print("已删除的 cookie:" + 
                                 cookie.getName( ) + "<br/>");
               }
               out.print("名称:" + cookie.getName( ) + ",");
               out.print("值:" +  URLDecoder.decode(cookie.getValue(), "utf-8") +" <br/>");
            }
         }else{
             out.println(
               "<h2 class=\"tutheader\">No Cookie founds</h2>");
         }
         out.println("</body>");
         out.println("</html>");
		}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

ترجمة ReadCookiesبريمج سابقة، وإنشاء الإدخال المناسب في ملف web.xml.محاولة تشغيلHTTP: // المضيف المحلي: 8080 / TomcatTest/ HelloForm، سوف تظهر النتائج التالية:


إزالة كوكي من قبل بريمج

إزالة كوكي هو بسيط جدا. إذا كنت ترغب في حذف ملف تعريف ارتباط، ما عليك سوى اتباع الخطوات الثلاث التالية:

  • يقرأ ملف تعريف ارتباط القائمة، وتخزينها في كائن كوكي.
  • استخدام أسلوبsetMaxAge () لتعيين عمر الكوكي صفر إلى حذف الكوكيز الموجودة.
  • إضافة ملف تعريف الارتباط إلى رؤوس الاستجابة.

أمثلة

والمثال التالي حذف ملفات تعريف الارتباط الموجودة المسمى "URL"، وهي المرة التالية التي تقوم بتشغيل ReadCookies بريمج، فإنه سيعود رابط لاغيا.

package com.w3big.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class DeleteCookies
 */
@WebServlet("/DeleteCookies")
public class DeleteCookies extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DeleteCookies() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
    	Cookie cookie = null;
  	  Cookie[] cookies = null;
        // 获取与该域相关的 Cookie 的数组
        cookies = request.getCookies();
        
  	  	// 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
   
        PrintWriter out = response.getWriter();
        String title = "删除 Cookie 实例";
        String docType = "<!DOCTYPE html>\n";
        out.println(docType +
                  "<html>\n" +
                  "<head><title>" + title + "</title></head>\n" +
                  "<body bgcolor=\"#f0f0f0\">\n" );
         if( cookies != null ){
           out.println("<h2>Cookie 名称和值</h2>");
           for (int i = 0; i < cookies.length; i++){
              cookie = cookies[i];
              if((cookie.getName( )).compareTo("url") == 0 ){
                   cookie.setMaxAge(0);
                   response.addCookie(cookie);
                   out.print("已删除的 cookie:" + 
                                cookie.getName( ) + "<br/>");
              }
              out.print("名称:" + cookie.getName( ) + ",");
              out.print("值:" + cookie.getValue( )+" <br/>");
           }
        }else{
            out.println(
              "<h2 class=\"tutheader\">No Cookie founds</h2>");
        }
        out.println("</body>");
        out.println("</html>");
		}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

ترجمة DeleteCookiesبريمج سابقة، وإنشاء الإدخال المناسب في ملف web.xml.الآن تشغيلHTTP: // المضيف المحلي: 8080 / TomcatTest/ DeleteCookies، سوف تظهر النتائج التالية: