Cookie对象

Posted So istes immer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cookie对象相关的知识,希望对你有一定的参考价值。

目录

Cookie是一种会话跟踪机制。

Cookie对象不是JSP的内置对象,需要显示创建。

Cookie是WEB服务器通过浏览器在客户机的硬盘上存储的一小段文本。JSP可以将用户登录的用户名、密码、登录时间等信息保存在客户机的Cookie中。

当用户再次登录此网站时,浏览器根据用户输入的网址,在本地寻找与该网址匹配的Cookie,将该网站的Cookie和请求参数一起发送给服务器做处理,实现各种各样的个性化服务。

Cookie对象是javax.servlet.http.Cookie类的实例

JSP将信息存储在客户机Cookie的方法:

①使用构造方法声明一个Cookie对象
Cookie cookie = new Cookie("username", "Jack")

②通过response对象的addCookie()方法将该Cookie对象加入到response
response.addCookie(cookie)

JSP读取客户端Cookie信息的方法:

①request.getCookies()从request中读入Cookie对象数组
②再遍历该数组的各个cookie元素

Cookie存取中文时可能会出现乱码

保存时,需要对中文进行编码 java.net.URLEncoder.encode(String s, String enc)
读取时,需要对中文进行解码 java.net.URLDecoder.decode(String s, String enc)
这个转码需要导入java.net.*包

cookiesave.jsp

<%@ page language="java" import="java.net.*,java.text.*,java.util.*" contentType="text/html; charset=utf-8"%>
<html>
<head>
	<title>Cookie-Save</title>
</head>
<body>
<%
	Cookie cookie = new Cookie(URLEncoder.encode("姓名", "UTF-8"),URLEncoder.encode("杰克", "UTF-8"));
	cookie.setMaxAge(60*60);		//设定该cookie在用户机器硬盘上的存活期为1小时
	response.addCookie(cookie);
	
	String userIP = request.getRemoteAddr();
	cookie = new Cookie("userIP",userIP);
	cookie.setMaxAge(10*60);
	response.addCookie(cookie);
	
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日h:m:s");
	Date date = new Date();
	String logintime = sdf.format(date);
	cookie = new Cookie("loginTime", URLEncoder.encode(logintime,"UTF-8"));
	cookie.setMaxAge(20*60);
	response.addCookie(cookie);
 %><br>
 <a href="cookieread.jsp">去读取Cookie</a>
</body>
</html>

cookieread.jsp

<%@ page language="java" import="java.net.*" contentType="text/html; chartset=utf-8" pageEncoding="utf-8"%>
<html>
<head>
	<title>Cookie-Read</title>
</head>
<body>
	使用foreach循环读取Cookie数组,并输出其中所有的cookie<br>
	<%
		if(request.getCookies() != null) {
			for(Cookie cookie : request.getCookies()) {
				String name = URLDecoder.decode(cookie.getName(), "UTF-8");
				String value = URLDecoder.decode(cookie.getValue(), "UTF-8");
				out.println("<br>cookie属性:"+name+"="+value);
			}
		}
	 %>
	 <p>使用for循环,查找某个cookie<br>
	 <%
	 		Cookie myCookie[] = request.getCookies();
	 		Cookie cookie = null;
	 		for(int i=0;i<myCookie.length;i++) {
	 			cookie = myCookie[i];
	 			if(cookie.getName().equals("userIP")) {
	 	%>
	 			您好,您上次登录的IP地址是<%=cookie.getValue() %>!
	  <%} }%>
</body>
</html>

 我们在浏览器中可以看到我们的cookie

也可以根据安全性的需求去设置是否允许在客户端生成cookie

以上是关于Cookie对象的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript单行代码,也就是代码片段

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段——JS中的面向对象编程

XSS:如何从 C# 中的字符串中删除 JS 片段?

VSCode自定义代码片段9——JS中的面向对象编程