java_Cookie和Session

1、Cookie出现的背景

http协议的请求是无状态的,客户端与服务器在通讯的时候,是无状态的,其实就是客户端在第二次来访的时候,服务器根本就不知道这个客户端有没有来访问过。为了更好的用户体验,更好的交互。

Cookie的简单使用

Cookie cookie = new Cookie("aa","bb");
response.addCookie(cookie);
Cookie[] cookies = request.getCookies();
if(cookies != null){
	for(Cookie c : cookies){
		String cookieName = c.getName();
		String cookieValue = c.getValue();
		System.out.println(cookieName + "=" + cookieValue);
	}
}

Cookie的有效期

`默认情况下,关闭浏览器cookie就没有了。
cookie.setMaxAge(expiry),expiry以秒计算。
正值:表示在这个数字过后,cookie就会失效。
负值:表示关闭浏览器后,那么cookie就失效,默认值是-1

赋值新的值
cookie.setValue(newValue);

用于指定只有请求了指定的域名,才会带上该cookie
cookie.setDomain(“www.baidu.com”);

用于指定只有访问该域名下的cookieDemo这个路径才会带上cookie
cookie.setPath("/CookieDemo");

案例:登录时间:

搜索Cookie的工具类

package login;

import javax.servlet.http.Cookie;

public class Tool {
	public static Cookie findCookie(Cookie[] cookies,String name){
		if(cookies != null){
			for (Cookie cookie : cookies) {
				if(cookie.getName().equals(name))
					return cookie;
			}
		}
		return null;
	}
}

servlet

package login;

import java.io.IOException;
import java.util.Date;

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 loginServlet
 */
@WebServlet("/login")
public class loginServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		
		if("admin".equals(username) && "123".equals(password)){
			
			Cookie[] cookies = request.getCookies();
			
			Cookie cookie = Tool.findCookie(cookies, "last");
			
			if(cookie == null){
				Cookie c = new Cookie("last",System.currentTimeMillis() + "");
				c.setMaxAge(60 * 60);
				response.addCookie(c);
				response.getWriter().write("歡迎您,"+ username);
			}else{
				long lastVisitTime =Long.parseLong(cookie.getValue());
				
				response.getWriter().write("歡迎您,"+ username +",上次的來訪時間是:"+ new Date(lastVisitTime));
				cookie.setValue(System.currentTimeMillis() + "");
				response.addCookie(cookie);
			}
		}else{
			response.getWriter().write("登陆失败!!!");
		}
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

	}
}



由于Cookie会保存在客户端上,所以有安全隐患问题,还有一个问题,Cookie的大小与个数有限制,为了解决这个问题出现了session。

2、Session

会话,Session是基于Cookie的一种会话机制。Cookie是服务器返回一小份数据给客户端,并且存放在客户端上。Session是将数据存放在服务器端。

常用的API

HttpSession session = request.getSession();
//得到会话id
String id = session.getId();
//存值
session.setAttribute(name,value);
//取值
session.getAttribute(name);
//移除值
session.removeAttribute(name);

session的创建和销毁

创建:
如果有在servlet里面调用了request.getSession();
销毁:
session是存放在服务器内存中的一份数据,当然可以持久化,.redis,即使关了浏览器,session也不会销毁。
1、关闭服务器
2、session会话时间过期,默认有效期:30分钟。

猜你喜欢

转载自blog.csdn.net/weixin_44588495/article/details/89445255