`
Flyaway_921
  • 浏览: 13476 次
  • 来自: 杭州
社区版块
存档分类

关于cookie不得不说的事儿

阅读更多

    在网站开发中经常要用到cookie来存放一些用户信息,比如登录密码,购物列表啊等等

接下来简要剖析一下cookie

Cookies有以下几个特点:

1、只能是文本内容,而且长度不得大于4KB

2、客户端可以阻止cookie的写入,故而用cookie来实现功能存在一些不稳定因素

3、子路径设置的cookie,父路径不能读取,相反父路径设置的cookie,子路径可以读取。这一点十分重要,也比较容易犯错误。

 

接下来手动创建几个cookies:

package cookies;

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

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

public class Setcookies extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("GBK");
		resp.setContentType("text/html;charset=GBK");
		for (int i = 0; i < 3; i++) {
			// 生成3个临时cookies,该cookie存放在内存中,一旦浏览器被关闭则被自动清除
			Cookie cookie = new Cookie("Session-Cookie-" + i, "Cookie-Value-S"
					+ i);
			// 将cookie放入应答消息中,返回给客户端,临时cookie就存放于客户端内存
			resp.addCookie(cookie);
			// 生成3个有生命周期的cookie,存放于文本中(ie浏览器的cookie文本中),即使浏览器关闭也不会消失
			cookie = new Cookie("Persisten-Cookie-" + i, "Cookie-Value-P" + i);
			// setMaxAge(int t)设置一个生命周期,t为其值,以秒为单位
			cookie.setMaxAge(3600);
			// 将cookie放入应答消息中,返回给客户端,有生命周期的cookie就存放于客户端文本中
			resp.addCookie(cookie);

		}
		// 启用一个输出流,将内容输出到页面上
		PrintWriter out = resp.getWriter();
		out
				.println("<html><head>"
						+ "<meta http-equiv=\"content-type\" content=\"text/html; charset=gbk\">"
						+ "<title>生成cookie</title>" + "</head>"
						+ "<body><a href=\"Showcookies\">查看cookie</a>"
						+ "</body></html>");
		// 记得关闭输出流,节省开销
		out.close();
	}

	// 重写doPost方法,让其调用doGet方法
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doGet(req, resp);
	}

}

   

上面通过Setcookies产生6个cookies,接下来获取这6个cookies并且显示在页面上:

package cookies;

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

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

public class Showcookies extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// 设置编码方式
		req.setCharacterEncoding("gbk");
		resp.setContentType("text/html;charset=gbk");
		// 用一个html表格来显示我们得到的cookie数据
		String title = "Active Cookies";
		PrintWriter out = resp.getWriter();
		out
				.println("<html><head><title>"
						+ "参数客户端Cookie"
						+ "</title>"
						+ "<meta http-equiv=\"content-type\" content=\"text/html; charset=gbk\">"
						+ "</head>" + "<body bgcolor=\"#fdf5e6\">"
						+"<center>"
						+ "<h1 align=\"center\">" + title + "</h1>\n"
						+ "<table border=1 algin=\"center\">\n"
						+ "<tr bgcolor=\"#ffad0o\">\n" + "<th>Cookie Name\n"
						+ "<th>Cookie Value");
		// 从客户端的请求中取本网站的cookie信息,此时http为连接状态
		Cookie[] cookies = req.getCookies();
		// 得到cookie信息,输出到页面上
		if (cookies != null) {
			Cookie cookie;
			for (int i = 0; i < cookies.length; i++) {
				cookie = cookies[i];
				out.println("<tr>\n" + "<td>" + cookie.getName() + "</td>\n"
						+ "<td>" + cookie.getValue() + "</td>\n");
			}
			out.println("</table><center></body></html>");
			out.close();
		}
	}

}

 xml配置文档:

 

<servlet>
		<servlet-name>Setcookies</servlet-name>
		<servlet-class>cookies.Setcookies</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Setcookies</servlet-name>
		<url-pattern>/Setcookies</url-pattern>
	</servlet-mapping>

	<servlet>
		<servlet-name>Showcookies</servlet-name>
		<servlet-class>cookies.Showcookies</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Showcookies</servlet-name>
		<url-pattern>/Showcookies</url-pattern>
	</servlet-mapping>
 

 先启动Setcookies创建6个cookies,再启动Showcookies,成功显示了创建的6个cookies,其中最后一项应该是浏览器默认生成的,于我们的操作无关。

 

 

接下来解释:子路径设置的cookie,父路径不能读取,相反父路径设置的cookie,子路径可以读取。

修改xml配置文件如下:

<servlet>
		<servlet-name>Setcookies</servlet-name>
		<servlet-class>cookies.Setcookies</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Setcookies</servlet-name>
		<url-pattern>/Setcookies</url-pattern>
	</servlet-mapping>

	<servlet>
		<servlet-name>Showcookies</servlet-name>
		<servlet-class>cookies.Showcookies</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Showcookies</servlet-name>
		<url-pattern>/test/Showcookies</url-pattern>
	</servlet-mapping>

 现在,Showcookies成为了url下的test子路径了,而Setcookies此时是一个父路径。执行程序,成功获取cookies信息。

 

 

继续更改xml文件:

	<servlet>
		<servlet-name>Setcookies</servlet-name>
		<servlet-class>cookies.Setcookies</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Setcookies</servlet-name>
		<url-pattern>/test/Setcookies</url-pattern>
	</servlet-mapping>

	<servlet>
		<servlet-name>Showcookies</servlet-name>
		<servlet-class>cookies.Showcookies</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Showcookies</servlet-name>
		<url-pattern>/Showcookies</url-pattern>
	</servlet-mapping>

现在Setcookies成了URL的子路径test下的servlet,而Showcookies为父路径,执行Showcookies此时已经无法获取cookies信息了。

 

 

  • 大小: 10.3 KB
分享到:
评论

相关推荐

    关于java应用cookie

    ### 关于Java应用Cookie知识点详解 #### 一、Cookie简介 Cookie是一种常用的技术,用于存储用户的访问信息。在Web开发中,服务器可以将少量的信息发送到客户端浏览器,并存储在客户端,这种信息就是Cookie。当...

    Extjs 关于 cookie的操作

    ### Extjs 中关于 Cookie 的操作 #### 一、引言 在 Web 开发中,Cookie 是一种常用的数据存储方式,用于保存用户的一些基本信息或者状态,从而实现网站的个性化设置或登录状态保持等功能。Extjs 作为一种强大的 ...

    FlashCookie 不被浏览器清除的Cookie

    由于它们不遵循浏览器的隐私策略,即使用户选择清空浏览器Cookie,FlashCookie仍然存在,这使得它们成为一种强大的用户跟踪工具。 然而,这种特性引发了一些隐私和安全问题。因为用户可能不清楚这些FlashCookie的...

    cookie读写,子cookie

    理解Cookie的读写和子Cookie的概念,以及如何利用工具类进行操作,对于任何Web开发者来说都是至关重要的技能。通过熟练掌握这些知识,你可以更有效地构建和维护具有用户会话管理等功能的Web应用。

    EditThisCookie.crx cookie编辑导入导出利器

    总之,EditThisCookie.crx是一款高效且灵活的Cookie管理工具,结合curl的使用,可以实现Cookie的跨平台管理和网络请求的模拟,对于开发者和高级用户来说,无疑是一把利器。在日常工作中善用这些工具,可以提升工作...

    cookie cookie cookie cookie cookie cookie

    cookie cookie cookie cookie cookie cookie cookie cookie cookie cookie cookie cookie cookie cookie

    C#操作cookie,解密加密cookie

    对于Cookie的管理,尤其是其安全性,是现代Web开发中不可忽视的一环。通过合理运用.NET Framework提供的工具和方法,可以有效提升应用程序的安全性和用户体验。 最后,需要注意的是,虽然加密可以增加安全性,但并...

    Cookie浏览器

    Session Cookie不存储在硬盘上,仅存在于内存中,关闭浏览器后即消失;Persistent Cookie则被保存在硬盘上,有设定的过期时间。 - Cookie通常包含键值对,如用户名、登录状态等,用于识别用户身份或记录用户偏好。 ...

    完整获取webBrowser1.Document.Cookie取不到HttpOnly的Cookie

    完整获取webBrowser1的Cookie HttpOnly的Cookie

    最全如何安全的处理cookie,不让cookie被利用

    史上最全如何安全的处理cookie,不让cookie被利用最全如何安全的处理cookie,

    微信小程序cookie维护插件 实现自动设置获取cookie功能

    2. 合理设置Cookie的生命周期,既不能太短导致频繁登录,也不能太长带来安全风险。 3. 在处理Cookie超时事件时,要确保用户体验流畅,尽量减少对用户操作的干扰。 总之,微信小程序cookie维护插件通过自动化设置和...

    获取cookie非常好用的google插件

    这种插件对于开发者、网络安全专家或需要频繁切换账户的用户来说非常实用,能帮助他们快速导出、导入或删除Cookie,从而实现快速登录、隐私保护或测试目的。 描述中的“可以安装到google浏览器,方便快速导出cookie...

    JS cookie Java cookie regex 整理结果

    总结来说,JS和Java Cookie提供了在客户端和服务器端存储和读取数据的方法,而Regex则作为一种强大的文本处理工具,用于处理和验证Cookie的格式。掌握这些技术,对于Web开发人员来说至关重要,能够帮助他们构建更加...

    cookie记住账号密码

    - **跨站脚本攻击(XSS)**:防止恶意脚本读取Cookie,可以使用HttpOnly标志,使Cookie不可被JavaScript访问。 - **跨站请求伪造(CSRF)**:为每个需要验证的请求添加随机的CSRF令牌,以防止未经授权的请求。 3....

    QT访问网页获取Cookie

    在QT中访问网页并获取Cookie是网络编程的一个重要部分,尤其对于需要实现自动化登录、跟踪用户状态或者进行Web服务交互的应用来说。 Cookie是一种在客户端和服务器之间传递信息的小型文本文件。服务器在响应HTTP...

    jquery 设置cookie、删除cookie、获取cookie

    ### jQuery 操作 Cookie 的方法详解 #### 一、前言 在前端开发中,通过 JavaScript 操作 Cookie 是一种常见的需求,尤其是为了实现用户状态的持久化存储或网站配置的保存等场景。jQuery 提供了一个非常方便的方式...

    易语言取设cookie

    总结来说,易语言的“取设cookie”功能是网络编程中的核心部分,对于开发基于HTTP协议的Web应用程序至关重要。通过熟练掌握`InternetSetCookieA`和`InternetGetCookieA`函数的使用,可以有效地实现用户身份验证、...

    cookie

    标题中的“cookie”一词指的是Web...以上是关于Cookie技术的基本介绍,具体实现细节和使用技巧可能需要参考原文档或“cookie.jsp”文件的内容。对于开发者来说,理解和熟练使用Cookie是构建高效、安全的Web应用的基础。

    桂林老兵cookie欺骗工具

    这个工具因其在Cookie管理及欺骗技术方面的应用而知名,尤其对于理解Web安全和防御策略的专家来说,它是一个重要的学习和实践平台。 Cookie是网站在用户浏览器上存储的小型文本文件,通常用于识别用户会话、个性化...

    cookie接口 实现本地或客户端的cookie的创建和读取

    以下是关于这个主题的详细解释。 1. **Cookie接口**: Cookie接口在Java的`javax.servlet.http.Cookie`包中定义,它提供了对HTTP Cookie的抽象表示。Cookie接口允许开发人员创建、修改和删除浏览器中的Cookie。它...

Global site tag (gtag.js) - Google Analytics