Cookie

1. Cookie的基本用法

  • 服务器通过操作Cookie类对象对客户端Cookie进行操作。
  • 通过request.getCookie( ) 获取客户端提交的所有Cookie(以Cookie[ ]数组形式返回)
  • 通过response.addCookie(Cookie cookie)向客户端设置Cookie

2. Cookie的不可跨域名性
问题:Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。那浏览器访问Google会不会也携带上Baidu颁发的Cookie呢?或者Google能不能修改Baidu颁发的Cookie呢?

解答:Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。

3. Cookie的所有属性
每个属性都有setter、getter方法

4. Cookie常用方法

  1. 读写maxAge属性的方法
Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
cookie.setMaxAge(Integer.MAX_VALUE);           // 设置生命周期为MAX_VALUE
  1. 在客户端添加Cookie
Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
response.addCookie(cookie);                    // 输出到客户端
  1. 修改Cookie
  • 注意:修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。
  • response对象提供的Cookie操作方法只有一个添加操作add(Cookie cookie)。要想修改Cookie只能使用一个同名的Cookie来覆盖原来的Cookie,达到修改的目的。
Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
response.addCookie(cookie);                    // 输出到客户端Cookie cookie = new Cookie("username","hello");   // 新建Cookie
response.addCookie(cookie);                    // 输出到客户端
  1. 删除Cookie
  • 如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。
Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
cookie.setMaxAge(0);                          // 设置生命周期为0,不能为负数
response.addCookie(cookie);                    // 必须执行这一句

5. 登陆案例

  • 应用场景:如果用户是在自己家的电脑上网,登录时就可以记住他的登录信息,下次访问时不需要再次登录,直接访问即可。
  • 实现方法:最直接的是把用户名和密码都保存在Cookie中,下次访问时检查Cookie中的用户名与密码,与数据库比较。但是这是一种比较危险的选择,一般来说不会将隐私信息保存到Cookie中。
  • 实现方法:基于上述方法对密码进行加密,再将账号和密码保存到Cookie中
  • 实现方法:把账号按照一定的规则加密后,加密账号与账号一块保存到Cookie中。下次访问时只需要判断账号的加密规则是否正确即可。这样可以做到只在登录时查询一次数据库,以后访问验证登录信息时不再查询数据库。
  • 应用实例:把账号保存到名为account的Cookie中,把账号连同加密后的账号保存到名为ssid的Cookie中。验证时验证Cookie中的账号与加密后是否与Cookie中的ssid相等。account_Cookie(账号)、ssid_Cookie(账号、加密账号)

Session

1. Session的基本使用方法

  • 通过request获取Session
  • 通过session.setAttribute( )设置Session
  • 通过session.getAttribute( )获取Session
HttpSession session = request.getSession();         //Servlet底层通过的SESSIONID,获取Session对象。
session.setAttribute("loginTime",new Date());
out.println("登录时间为:"+(Date) session.getAttribute("loginTime"));

2. Session的生命周期

  • Session保存在服务器端,为了获得更高的存取速度,服务器一般把Session放在内存中。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。
  • Session在用户第一次访问服务器的时候自动创建。因为Session是Servlet、JSP底层实现的,对高级语言透明,所以只有访问JSP、Servlet等程序时才会创建Session。
  • Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session活跃了一次。

    3. Session细节
  • 虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持的。这是因为Session需要使用Cookie作为识别标志。因此服务器向客户端浏览器发送一个名为JSESSIONED的Cookie,它的值为该Session的id。Session也将依据该Cookie来识别是否为同一用户。
  • 该Cookie为服务器自动生成的,maxAge属性默认为-1,表示仅当前浏览器内有效,并且各浏览器窗口不共享,关闭浏览器就会失效。
  • 同一个机器的两个浏览器窗口访问服务器时,会生成两个不同的Session,但是由浏览器窗口内的链接、脚本等打开的新窗口(子窗口)会共有父窗口的Session。

4. Session常用方法

  • void setAttribute(String attribute,Object value):设置Session属性。value信息不宜过大
  • String getAttribute(String attribute):返回Session属性
  • Enumeration getAttributeNames();返回Session中存在的属性名
  • void removeAttribute(String attribute):移除Session属性
  • String getId():返回Session的ID。该ID由服务器自动创建,即继承的Servlet接口底层自己实现,不会重复
  • long getCreationTime():返回Session的创建日期Date createTime = new Date(session.getCreationTime());
  • long getLastAccessedTime():返回Session的最后活跃时间
  • int getMaxInactiveInterval():返回Session的超时时间
  • int setMaxInactiveInterval(int second):设置Session的超时时间
  • boolean isNew():返回该Session是否新创建的
  • void invalidate():使Session失效

Cookie与Session基本使用相关推荐

  1. 你想了解的Cookie和Session就在这~

    目录 1.会话的概念 2.保存会话的两种技术 3.Cookie 4.Session(重点) 1.会话的概念 我们知道session的意思就是会话,Cookie和Session 是两种会话技术,我们首先 ...

  2. Cookie和Session的区别与联系

    Cookie和Session Session 会话的理解 Session的作用 HTTP协议的无状态特点 Session的实现原理(重点) Session常用方法: Cookie 基本介绍 经典案例 ...

  3. 前端页面——Cookie与Session有什么区别

    我们在实际生活中总会遇到这样的事情,我们一旦登录(首次输入用户名和密码)某个网站之后,当我们再次访问的时候(只要不关闭浏览器),无需再次登录.而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录, ...

  4. cookie、session总结

    前几天在调试第三方支付接口时碰到一个session失效问题,用了几天时间才搞明白,现在回想一下,主要还是由于cookie和session这一块的一些基本概念没有搞清楚,现总结一下. 浏览器使用HTTP ...

  5. cookie 和session 的区别详解

    转自 https://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html 这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者 ...

  6. web存储中cookie、session区别

    http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的.为了使得web能够产生一些动态信息,就需要保存"状态",而cookie和session机制就是为了解决http ...

  7. cookie和session的代码实现

    cookie和session的代码实现 1.设置cookie 今天笔试题考的是cookie的设置,我竟然选了request也可以设置cookie,我的天呀. 我们来看如何在response设置吧 pu ...

  8. 还分不清 Cookie、Session、Token、JWT?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 转自:掘金   作者:秋天不落叶 juejin.im/po ...

  9. Token ,Cookie、Session傻傻分不清楚?

    点击上方蓝色"视学算法",选择"设为星标" 作者 | 王菜鸟1993 来源 | cnblogs.com/JamesWang1993/p/8593494.html ...

  10. Flask之Cookie与Session

    Cookie与Session 1 Cookie 设置 from flask import Flask, make_responseapp = Flask(__name__)@app.route('/c ...

最新文章

  1. hk.module must be initialized inside an hk.transform
  2. python爬虫原理-爬虫原理解析
  3. ListActivity的使用
  4. SQL语句学习(二)
  5. python访问组策略_python 组策略
  6. SGU 428 Rebus(构造)
  7. 【C】——C深入探讨——switch语句的default位置【转】
  8. ai 2.5d插件_【插画AI教程】从0到1,学会16 种热门插画设计风格!
  9. 乐高机器人骨奥_乐高机器人这个大坑,为啥大家都拽着孩子往里跳?
  10. 详细 C语言自增自减运算符区分 ++n和n++
  11. 酷派大神F1移动版刷机教程卡刷教程
  12. anydesk 自建服务器,AnyDesk使用FRP自建远程桌面连接
  13. PS学习笔记------运用脚本及自动化批量处理
  14. 关于schema文档
  15. 前端js实现京东轮播图
  16. 【C语言】自定义类型(结构体类型+枚举类型+联合体类型)[进阶篇_ 复习专用]
  17. Linux命令英文全称解释
  18. GitHub 开源了多款字体「GitHub 热点速览 v.22.48」
  19. google voice如何转移
  20. Java编写一个原始的聊天室(线程、服务器-客户端)

热门文章

  1. 贾俊平统计学思维导图- 第一章 导论
  2. 论文笔记:ARTNet、Non-local Neural Networks
  3. Postman安装失败,解决方法
  4. 最全公司章程自由规定事项
  5. android 截屏源码分析,Android新姿势:截屏代码整理
  6. 换一种姿势阅读《人工智能简史》
  7. Invisible character on env file, cause programe abort abnormally
  8. git提交代码时遇到代码库有更新以及本地有更新的解决方法
  9. 常用编程语言开发工具
  10. 直流电动机调速matlab,基于MATLAB龙门刨床直流电动机调速系统仿真研究