欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

session & cookie

程序员文章站 2022-05-28 22:27:47
...

会话技术

概述:服务器与浏览器进行数据交互的时候往往会产生一些数据、将这些数据保存起来、就需要使用到javaWeb中提供的会话技术。产生的数据如果保存在浏览器端我们使用cookie、如果保存在服务器端我们使用session。

一次会话
  阶段一:打开了京东网站 会话开始
  阶段二:我们在京东网站中点击了多个超链接资源这个过程称为会话中
  阶段三:我们关闭浏览器这个过程称为 会话结束

Cookie

Cookie对象

概述:服务器与浏览器通讯过程中产生的重要数据保存在浏览器端、这个技术就是cookie

应用场景:
 记录用户信息
 购物车

Cookie的基本使用

API:
Cookie
  new Cookie(str,str) 创建cookie
Response
  addCookie(cookie) 将cookie写回浏览器
session & cookie

获取cookie信息

Request
Cookie[] request.getCookies(); 获取当前项目下所有的cookie
Cookie
  getName() 获取cookie键
  getValue() 获取cookie值session & cookie

Cookie的携带路径

浏览器存储着大量的cookie我们在访问项目都会将所有的cookie带入服务器?
不会。
如果我想让day14工程下的cookie在day15中也获取获取可以不可以呢?
可行 需要设置cookie有效访问路径
Cookie
  setPath( )默认情况下 值是当前项目表示当前项目有效 / 表示当前服务器下所有的项目都会携带
session & cookie

Cookie的生存时间

setMaxAge(秒)
cookie默认在浏览器关闭的时候销毁、我们可以设置cookie最大存活时间达到浏览器关闭的时候不销毁cookie
session & cookie

如何清空Cookie

步骤
 1、创建一个一模一样的cookie 键必须一样 值为空字符串
 2、设置cookie存活为0
 3、设置相同的有效路径(创建的时候没设置就可以省略这步)
 4、将cookie重新写回浏览器
session & cookie

案例-记住登录信息

1、在webContent目录下创建一个jsp文件 里面创建了一个login.html页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath }/login" method="post">
		<p style="color:red;"> ${msg }</p>
		用户名:<input type="text" name="username" value="${cookie.username.value }"><br>
	         密码:<input type="password" name="password" value="${cookie.password.value }"><br>
	     <input type="checkbox" name="remember" value="yes"  
	     <c:if test="${cookie.remember.value=='yes' }">checked</c:if>
	     >记住我
	      <input type="submit" value="登录"> 
	</form>
</body>
</html>

2、开发LoginServlet

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
	
	UserService service =new UserService();
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//用户名和密码
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		//调用业务 根据用户名和密码查询用户信息
		User user =service.login(username,password);
		if(user==null) {
			//登录失败
			req.setAttribute("msg", "用户名或密码错误");
			req.getRequestDispatcher("/jsp/login.jsp").forward(req, resp);
		}else {
			//获取用户是否勾选了记住我
			String remember = req.getParameter("remember");
			//记住是否勾选的状态
			Cookie c3 = new Cookie("remember", "yes");
			resp.addCookie(c3);
			
			//勾选了
			if(remember!=null && remember.equals("yes")) {
				//创建cookie
				Cookie c1 = new Cookie("username", username);
				Cookie c2 = new Cookie("password", password);
				//设置存活时间
				c1.setMaxAge(60*60);
				c2.setMaxAge(60*60);
				//写回浏览器
				resp.addCookie(c1);
				resp.addCookie(c2);
				
			}else {
				//清空cookie
				Cookie c1 = new Cookie("username", "");
				Cookie c2 = new Cookie("password", "");
				Cookie c4 = new Cookie("remember", "");
				//设置存活时间
				c1.setMaxAge(0);
				c2.setMaxAge(0);
				c4.setMaxAge(0);
				//写回浏览器
				resp.addCookie(c1);
				resp.addCookie(c2);
				resp.addCookie(c4);
			}
			
			//登录成功将用户信息放入session中   
			req.getSession().setAttribute("user", user);
			//重定向到首页面
			resp.sendRedirect(req.getContextPath()+"/index.jsp");
		}
		
	}
}

Session

Session对象

概述:浏览器与服务器进行数据交互将产生的重要信息放在服务器端这种技术就是session

应用场景
 记住用户信息
 购物车

使用session满足条件以及session和cookie的联系

必须满足
  1、浏览器没有禁用cookie
  2、浏览器支持cookie

session原理:

每一个用户访问我们系统、我们都会给他创建一个session对象、为了区分不同的session每一个session都有唯一的JESSIONID。当用户第一次访问服务器获取session的时候、我们会给这个用户创建一个session 对象其中JESSIONID会交给Cookie进行存储,将cookie保持在用户的浏览器中,当用户第二次访问服务器的时候、就会携带这个cookie中的信息JESSIONID访问服务器找到用户的session对象。

session 和 cookie 区别:

安全性: cookie信息存放在浏览器不安全、session将信息存放服务器安全
数据量: 大小:cookie有大小限制最大4kb、session没有大小限制
位置上: cookie存在浏览器、session存在服务器

session的基本使用

API
request.getSession() 创建session
Session
  setAttribute(str,object) 添加内容
  removeAttribute(str) 移除内容
  getAttribute(str)获取内容
  invalidate()销毁session

持久化session对象

步骤
 1、新建一个session
 2、创建一个cookie 其中key必须叫JSESSIONID 值是新建的session的id
 3、将这个cookie设置存活时长
 4、将cookie重新写回浏览器
 5、往session中存一个内容
session & cookie

销毁session

session & cookie

session生命周期

1、在使用request.getSession()这个对象时候创建
2、 1-1在调用invalidate()sesion销毁 主动
  1-2 ssesion在默认存活30后消失
tomcat的conf目录中的web.xml中
session & cookie