JavaWeb(七)——Cookie、Session
文章目录
- 1. 会话
- 2. 保存会话的两种技术
- 3. Cookie
- 4. Session(重点)
1. 会话
会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话;
有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话;
一个网站,怎么证明你来过?
客户端——服务端
- 服务端给客户端一个 信件,客户端下次访问服务端带上信件就可以了; cookie
- 服务器登记你来过了,下次你来的时候我来匹配你; seesion
2. 保存会话的两种技术
cookie
- 客户端技术 (响应,请求)
session
- 服务器技术,利用这个技术,可以保存用户的会话信息, 我们可以把信息或者数据放在Session中!
常见:网站登录之后,你下次不用再登录了,第二次访问直接就上去了!
举例详细说明:
3. Cookie
(1)从请求中拿到cookie信息
(2)服务器响应给客户端cookie
Cookie[] cookies = req.getCookies(); //获得Cookie
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie
cookie:一般会保存在本地的 用户目录下 appdata;
一个网站cookie是否存在上限!聊聊细节问题
- 一个Cookie只能保存一个信息;
- 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;
- Cookie大小有限制4kb;
- 300个cookie浏览器上限
删除Cookie:
- 不设置有效期,关闭浏览器,自动失效;
- 设置有效期时间为 0 ;
编码解码:
URLEncoder.encode(“帅币”,“utf-8”)
URLDecoder.decode(cookie.getValue(),“UTF-8”)
案例测试:
- 在java包下创建一个名为CookieDemo01文件
package com.zz.servlet;import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;//保存用户上一次访问的时间
public class CookieDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//服务器,告诉你,你来的时间,把这个时间封装成为一个 信件,你下带来,我就知道你来了//解决中文乱码req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");PrintWriter out = resp.getWriter();//Cookie,服务器端从客户端获取呀;Cookie[] cookies = req.getCookies(); //这里返回数组,说明Cookie可能存在多个//判断Cookie是否存在if (cookies!=null){//如果存在怎么办out.write("你上一次访问的时间是:");for (int i = 0; i < cookies.length; i++) {Cookie cookie = cookies[i];//获取cookie的名字if (cookie.getName().equals("lastLoginTime")){//获取cookie中的值long lastLoginTime = Long.parseLong(cookie.getValue());Date date = new Date(lastLoginTime);out.write(date.toLocaleString());}}}else {out.write("这是您第一次访问本站");}//服务给客户端响应一个cookie;Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");//cookie有效期为1天cookie.setMaxAge(24*60*60);resp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
- 在web.xml 文件中注册:
<servlet><servlet-name>CookieDemo01</servlet-name><servlet-class>com.zz.servlet.CookieDemo01</servlet-class></servlet><servlet-mapping><servlet-name>CookieDemo01</servlet-name><url-pattern>/c1</url-pattern></servlet-mapping>
- 测试访问结果:
4. Session(重点)
什么是Session:
- 服务器会给每一个用户(浏览器)创建一个Seesion对象;
- 一个Seesion独占一个浏览器,只要浏览器没有关闭,这个Session就存在;
- 用户登录之后,整个网站它都可以访问!–> 保存用户的信息;保存购物车的信息……
Session和cookie的区别:
- Cookie是把用户的数据写给用户的浏览器,浏览器保存 (可以保存多个);
- Session把用户的数据写到用户独占Session中,服务器端保存 (保存重要的信息,减少服务器资源的浪费);
- Session对象由服务器创建。
使用场景:
- 保存一个登录用户的信息;
- 购物车信息;
- 在整个网站中经常会使用的数据,我们将它保存在Session中。
Session创建的时候做了如下事情:
- Cookie cookie = new Cookie(“JSESSIONID”,sessionId); //创建cookie
- resp.addCookie(cookie); //把cookie响应回去
(1)创建Session:
session.setAttribute("name",new Person("帅币",17));
- 在java包下创建一个名为SessionDemo01文件:
package com.zz.servlet;import com.zz.pojo.Person;import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;public class SessionDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码问题req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");//得到SessionHttpSession session = req.getSession();//给Session中存东西session.setAttribute("name",new Person("帅币",17));//获取Session的IDString sessionId = session.getId();//判断Session是不是新创建if (session.isNew()){resp.getWriter().write("session创建成功,ID:"+sessionId);}else {resp.getWriter().write("session已经在服务器中存在了,ID:"+sessionId);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
- 在web.xml 文件中注册:
<servlet><servlet-name>SessionDemo01</servlet-name><servlet-class>com.zz.servlet.SessionDemo01</servlet-class></servlet><servlet-mapping><servlet-name>SessionDemo01</servlet-name><url-pattern>/s1</url-pattern></servlet-mapping>
测试访问结果:
(2)获取Session里的内容:session.getAttribute("name");
在java包下创建一个名为SessionDemo02文件:
package com.zz.servlet;import com.zz.pojo.Person;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;public class SessionDemo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码问题req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");//得到SessionHttpSession session = req.getSession();//取Session中存东西Person person = (Person) session.getAttribute("name");System.out.println(person.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
- 在web.xml 文件中注册:
<servlet><servlet-name>SessionDemo02</servlet-name><servlet-class>com.zz.servlet.SessionDemo02</servlet-class></servlet><servlet-mapping><servlet-name>SessionDemo02</servlet-name><url-pattern>/s2</url-pattern></servlet-mapping>
- 在java文件下创建一个实体类 pojo
Person里的代码为:
package com.zz.pojo;public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}
- 测试访问结果:
(3)手动注销Session
session.invalidate();
- 在java包下创建一个名为SessionDemo03文件:
package com.zz.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;public class SessionDemo03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session = req.getSession();session.removeAttribute("name");//手动注销Sessionsession.invalidate();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
- 在web.xml 文件中注册:
<servlet><servlet-name>SessionDemo03</servlet-name><servlet-class>com.zz.servlet.SessionDemo03</servlet-class></servlet><servlet-mapping><servlet-name>SessionDemo03</servlet-name><url-pattern>/s3</url-pattern></servlet-mapping>
- 测试访问结果:
不手动注销的话,可在web.xml配置中设置会话自动过期时间:
<!--设置Session默认的失效时间-->
<session-config><!--15分钟后Session自动失效,以分钟为单位--><session-timeout>15</session-timeout>
</session-config>
JavaWeb(七)——Cookie、Session相关推荐
- 七天免登录(Cookie+session)+ 页面显示动画人物效果(萌娘+气泡效果)+购物车的实现代码
一.七天免登录(Cookie+session),基于实现jsp页面 页面效果:勾选7天免登录复选框,输入用户名和密码,点击登录即可,登录后可在cookie中查看用户登录信息,以及用户过期时间 1.登录 ...
- 【PHP】走进 PHP 第七课 Cookie Session
[PHP]✔️走进 PHP✔️ 第七课 Cookie & Session 概述 Cookie 如何查看 Cookie 写入 Cookie 读取 Cookie Session 创建 Sessio ...
- JavaWeb中的Session、SessionListener、在线人数统计
2019独角兽企业重金招聘Python工程师标准>>> JavaWeb中的Session 在JavaWeb中使用HttpSession(以下简称session)对象来表示一个会话. ...
- java重定向cookie_在java中,JSP重定向,转发,Cookie,session
//第一种情况,先增加Cookie后重定向,A2.jsp能正常获取name的值"你好" //Cookie c=new Cookie("name",URLEnco ...
- 彻底理解cookie,session,localStorage(附代码)
2019独角兽企业重金招聘Python工程师标准>>> 1. cookie 1.1 什么是cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某 ...
- 2、cookie session token详解
cookie session token详解 转自:http://www.cnblogs.com/moyand/ 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, ...
- 基于requests模块的cookie,session和线程池爬取
基于requests模块的cookie,session和线程池爬取 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三"人人网"个人主页数据)时,如果使用之前req ...
- .net session 有效时间_Python中requests模拟登录的三种方式(携带cookie/session进行请求网站)...
这篇文章主要介绍了python中requests模拟登录的三种方式(携带cookie/session进行请求网站),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋 ...
- C# 系统应用之Cookie\Session基础知识及php读取Cookie\Session
本文主要是毕业设计"个人电脑使用记录清除软件"系列系统应用文章中关于Cookie方面的知识,主要从介绍Cookie的基础知识和PHP关于Cookie\Session两个会话管理机制 ...
最新文章
- 总结—什么妖引起的MongoDB副本集初始化失败?
- Linux平台下的内存泄漏检测
- 8086实时时钟实验(一)——《x86汇编语言:从实模式到保护模式》05
- 16 Managing Undo
- VS code中使用code runner遇到两例问题之解决:1.输出乱码,2运行无响应(输出)
- CycleGAN详解与实现(采用tensorflow2.x实现)
- 使用HTML5构建iOS原生APP(2)
- GitHub添加SSH-key的步骤
- livereload
- MATLAB中PI调节器设计,简单的PI控制器的设计.doc
- 命令修改本地计算机策略,命令行修改本地组策略_通过命令行从Windows进行本地组管理...
- APP色彩搭配方案是由主色、辅助色和点缀色构成
- [spark] SparkSQL知识点全集整理
- oracle报1405,【案例】Oracle报错ORA-15054 asm diskgroup无法mount的解决办法
- 【短视频运营】查找对标账号 ( 关键词搜索 | 第三方工具查找 | 对标账号学习 | 视频文案 | #话题 | 评论内容 | 历史视频 )
- google退出中国声明原文【翻译版】
- 阿里物联网云平台搭建(一)
- 学习逆变(DC-AC)电路和LLC的基本工作原理。
- iphone12和iphone11有什么区别?
- 怎么给自己的html网页加个密码,密码正确才能显示网页
热门文章
- 计算机进阶操作,新手进阶Win7系统操作使用手册
- jvm类加载机制_JVM 类加载机制
- 15个学习习惯,受益一生(强烈推荐)
- 判断直线与线段是否相交,相交则输出交点x轴坐标
- SDOI2020游记
- BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+分块)
- 计算机网络校园网建设设计摘要,计算机网络专业论文校园网建设设计.doc
- 1 计算机主机里面都有些什么东西,电脑主机箱里头的东西都有什么用?
- java自动定义一个map类_自定义实现Map类 高效版
- 20220401 A满秩,B满秩,AB一定满秩