session & cookie
目录
会话技术
概述:服务器与浏览器进行数据交互的时候往往会产生一些数据、将这些数据保存起来、就需要使用到javaWeb中提供的会话技术。产生的数据如果保存在浏览器端我们使用cookie、如果保存在服务器端我们使用session。
一次会话
阶段一:打开了京东网站 会话开始
阶段二:我们在京东网站中点击了多个超链接资源这个过程称为会话中
阶段三:我们关闭浏览器这个过程称为 会话结束
Cookie
Cookie对象
概述:服务器与浏览器通讯过程中产生的重要数据保存在浏览器端、这个技术就是cookie
应用场景:
记录用户信息
购物车
Cookie的基本使用
API:
Cookie
new Cookie(str,str) 创建cookie
Response
addCookie(cookie) 将cookie写回浏览器
获取cookie信息
Request
Cookie[] request.getCookies(); 获取当前项目下所有的cookie
Cookie
getName() 获取cookie键
getValue() 获取cookie值
Cookie的携带路径
浏览器存储着大量的cookie我们在访问项目都会将所有的cookie带入服务器?
不会。
如果我想让day14工程下的cookie在day15中也获取获取可以不可以呢?
可行 需要设置cookie有效访问路径
Cookie
setPath( )默认情况下 值是当前项目表示当前项目有效 / 表示当前服务器下所有的项目都会携带
Cookie的生存时间
setMaxAge(秒)
cookie默认在浏览器关闭的时候销毁、我们可以设置cookie最大存活时间达到浏览器关闭的时候不销毁cookie
如何清空Cookie
步骤
1、创建一个一模一样的cookie 键必须一样 值为空字符串
2、设置cookie存活为0
3、设置相同的有效路径(创建的时候没设置就可以省略这步)
4、将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
session生命周期
1、在使用request.getSession()这个对象时候创建
2、 1-1在调用invalidate()sesion销毁 主动
1-2 ssesion在默认存活30后消失
tomcat的conf目录中的web.xml中
上一篇: python2 报错 ImportError: No module named _internal
下一篇: 安装pytorch运行import torch出错ModuleNotFoundError: No module named ‘torch’
推荐阅读
-
session.save_path is correct (/var/lib/php/session) in Unknown on line 0
-
注意:php5.4删除了session_unregister函数
-
Asp.Net 跨域,Asp.Net MVC 跨域,Session共享
-
ThinkPHP实现将SESSION存入MYSQL的方法
-
用session做客户验证时的注意事项
-
解决php中Cannot send session cache limiter 的问题的方法_PHP教程
-
laravel5.2为什么在服务器上获取不到session,storage下的sessions下的文件里面存储的有?
-
php session存入redis,会有并发一致性的问题?redis 写不是原子性的吗?
-
IE上cookie设置无效
-
jQuery基于cookie实现换肤功能实例