Session和Cookie
文章目录
- 会话
- Cookie
- Session
会话
会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话
有状态会话:一个学生来过教室,下次再来教室,就会知道这个同学曾经来过,称之为有状态会话
一个网站,怎么证明你来过?
- 服务端给客户端一个信件,客户端下次访问服务器带上信件就可以了; cookie
- 服务器登记你来过了,下次你来的时候我来匹配你; session
保存会话的两种技术
Cookie
- 客户端技术(响应,请求)
Session
- 服务器技术,可以保存用户的会话信息,我们可以把信息或者数据放在Session中
Cookie
Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状
态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网
站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
打个比方,我们去银行办理储蓄业务,第一次给你办了张银行卡,里面存放了身份证、密码、手机等个人信息。当
你下次再来这个银行时,银行机器能识别你的卡,从而能够直接办理业务。
从请求中拿到cookie信息,服务器响应给客户端cookie
Cookie[] cookies = req.getCookies(); //Cookie,服务器端从客户端获取
cookie.getName(); //获得cookie的key
cookie.getValue(); //获取cookie的value值
Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期为一天
resp.addCookie(cookie); //响应给客户端一个cookie
案例:记录用户上次访问的时间
//记录保存用户上一次访问的时间
public class Demo01Cookie extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//服务器告诉你,你来的时间,把这个时间封装成一个信件,我下次带来,就知道你来了//解决中文乱码问题req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");PrintWriter out = resp.getWriter();//Cookie,服务器端从客户端获取Cookie[] cookies = req.getCookies();//判断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 l = Long.parseLong(cookie.getValue());Date date = new Date(l);out.write(date.toLocaleString());}}}else {out.write("这是你第一次访问本站");}//新建立一个cookieCookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");//设置cookie的有效期为1天cookie.setMaxAge(24*60*60);//服务器给客户端响应一个cookieresp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
注册Servlet后,启动Tomcat测试:
一些细节问题:
- cookie一般会保存在本地的用户目录 appdata下
- 一个Cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie,最多存放20个
- Cookie大小有限制4kb
- 300个cookie浏览器上限
删除Cookie:
- 不设置有效期,关闭浏览器,自动失效
- 设置有效期时间为0,cookie.setMaxAge(0);
//删除cookie
public class Demo02Cookie extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//新建一个cookieCookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");//设置cookie的有效期为0cookie.setMaxAge(0);//服务器给客户端响应一个cookieresp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
cookie中文乱码问题
URLEncoder.encode("胡帅","utf-8"); //编码
URLDecoder.decocde(cookie.getvalue(),"utf-8"); //解码
Session
什么是Session:
- 服务器会给每一个用户(浏览器)创建一个Session对象
- 一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在
- 用户登录之后,整个网站它都可以访问,常见应用:保存购物车的信息
Session和Cookie的区别:
- Cookie是把用户的数据写给用户的浏览器,浏览器保存(客户端可以保存多个)
- Session把用户的数据写到用户独占的Session中,服务器端保存(保存重要信息,减少服务器资源浪费)
- Session对象由服务器创建
使用场景:
- 保存一个登录用户的信息;
- 购物车信息;
- 在整个网站中经常会使用的数据,我们将它保存在Session中;
使用 Session:
获取Session,并向它存放数据,判断是否为新创建的,并获取一个SessionID
public class Demo03Session 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("username","胡帅");//读取Session的IDString sessionId = session.getId();//判断Session是不是新创建的if (session.isNew()){resp.getWriter().write("session创建成功,ID:"+sessionId);}else{resp.getWriter().write("session已经创建,ID:"+sessionId);}//Session创建的时候做了以下事情
// Cookie cookie = new Cookie("JSESSIONID",sessionId);
// resp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
记得注册一个Servlet,路径为s1
启动Tomcat测试
只要网址后输入/s1,那么服务器就会为浏览器创建一个Session,所以第一次打开都是已经创建Session
只要浏览器不关闭,每一次的SessionID都是一样的
可以手动删除Session
//手动删除Session
public class Demo04Session extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session = req.getSession();session.removeAttribute("username");session.invalidate();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
注册该Sevlet,路径为s2
启动Tomcat测试,输入s1获取sessionID,当输入s2删除Session后,再输入s1发现SessionID改变,创建了一个新的Session
也可以自动删除,在web.xml里面配置,1分钟后自动删除Session,并创建一个新的Session
<session-config><!--以分钟为单位,自动删除Session--><session-timeout>1</session-timeout>
</session-config>
想了解更多内容欢迎关注公众号:自定义的Vae
个人博客:https://hs-vae.com
Session和Cookie相关推荐
- C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
由于种种原因,我们有时需要从互联网上抓取一些资料,有些页面可以直接打开,而有些页面必登录之后才能打开.本文介绍的是使用 HttpWebRequest 和 HttpWebResponse 自动填写提交 ...
- 单点登录与权限管理本质:session和cookie介绍
本篇开始写「单点登录与权限管理」系列的第一部分:单点登录与权限管理本质,这部分主要介绍相关的知识概念.抽象的处理过程.常见的实现框架.通过这部分的介绍,能够对单点登录与权限管理有整体上的了解,对其相关 ...
- session 与 cookie的区别
session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键.基于网上一些文章和资料的参阅,及作者个人的应用体会,对这 ...
- html点击按钮删除session,Asp.net中安全退出时清空Session或Cookie的实例代码
概览: 网站中点击退出,如果仅仅是重定向到登录/出页面,此时在浏览器地址栏中输入登录后的某个页面地址如主页,你会发现不用登录就能访问.这种所谓的退出并不是安全的. 那么怎样做到安全退出呢? 那就是点击 ...
- PHP中session和cookie的区别
这个话题无论是系统运维还是PHP开发人员面试时会经常遇到,所以这里也进行一些总结和归纳,session和cookie的具体理论网上比较大,大家googel下均可:系统运维注意区分下session(会话 ...
- session和cookie的区别和联系---转载
区别 1.存放位置: session保存在服务器,cookie保存在客户端 2.存放的形式: session是以对象的形式保存在服务器,cookie以字符串的形式保存在客户端 3.用途: sessio ...
- Session与Cookie区别[1][摘]
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间.而Se ...
- 服务器端会话技术Session|| Session的原理||Session的细节||session的钝化session的活化||session的特点||session与Cookie的区别
Session 1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中.HttpSession 2. 快速入门: 1. 获取HttpSession对象: ...
- YII用户注冊和用户登录(五)之进行session和cookie分析 ,并在前后区分session和cookie...
5 进行session和cookie分析 ,并在前后区分session和cookie: 记住登录状态 这样下次再登录站点的时候.就不用反复输入username和password. 是浏览器的cooki ...
- Session与Cookie
Session与Cookie 基本概念 Session 存储在服务器端,保存用户名登录状态.桌面状态等信息 默认路径在/var/lib/php/session Cookies Cookies:由服务器 ...
最新文章
- 【备忘】とある画像の自动生成
- 线程间通讯机制(提高篇)——深入浅出实现原理
- You C.A.N.大赛 解锁7大行业智能硬件创新密码
- 复变函数画图cosz图像_用matlab绘制x=(1+cosu)cosv,y=(1+cosu)sinv,z=sinu图像?
- 暑期社会实践服务器维护,寒假网络维护社会实践报告
- leetcode - 226. 翻转二叉树
- sqlserver 字符串转换成日期、int与varchar类型转换及保留两位小数
- Java的历史和学习Java需要准备的工具
- Python文学家为Python写的一首词?(附中英文版)
- Linux内核分析——Linux内核学习总结
- DevComponents.AdvTree 相关笔记
- Hadoop权威指南环境搭建+实例运行
- android killer 反编译工具,安卓反编译工具-Android Killer下载1.3.0.0 正式版-腾牛下载...
- Linux禁用搜狗输入法的简繁切换快捷键
- 4.3.1 管道翻模
- 不需要邮箱 修改Gitlab账号密码(亲测可用)
- android在体检报告叫什么,体检报告助手app下载-体检报告助手v3.1.5 安卓版-腾牛安卓网...
- mysql根据表的一个字段决定去关联(join)那张表格
- 如何在海量数据中查找最相似的topk样本
- 二选一选择器-verilog
热门文章
- 欧尼酱讲JVM(13)——本地方法栈
- 单片机烧录问题 单片机安装驱动问题
- 腾讯/阿里/百度 BAT人才体系的职位层级、薪酬、晋升标准
- 控制面板是微型计算机,微型计算机中,控制器的基本功能是什么
- 数据结构第二版(朱昌杰版)栈和队列习题3答案(纯附手写笔记图)
- 嵌入式linux usb wifi移植[s3c6410平台原创]
- 计算机应用基础综合实训目录10,计算机应用基础综合实训指导书2016
- 安装安卓(Android)x86系统
- win7 Synergy 安装失败
- 6个高效办公的Excel小技巧,让你事半功倍