Cookie与Session基本使用
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常用方法
- 读写maxAge属性的方法
Cookie cookie = new Cookie("username","helloweenvsfei"); // 新建Cookie
cookie.setMaxAge(Integer.MAX_VALUE); // 设置生命周期为MAX_VALUE
- 在客户端添加Cookie
Cookie cookie = new Cookie("username","helloweenvsfei"); // 新建Cookie
response.addCookie(cookie); // 输出到客户端
- 修改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); // 输出到客户端
- 删除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基本使用相关推荐
- 你想了解的Cookie和Session就在这~
目录 1.会话的概念 2.保存会话的两种技术 3.Cookie 4.Session(重点) 1.会话的概念 我们知道session的意思就是会话,Cookie和Session 是两种会话技术,我们首先 ...
- Cookie和Session的区别与联系
Cookie和Session Session 会话的理解 Session的作用 HTTP协议的无状态特点 Session的实现原理(重点) Session常用方法: Cookie 基本介绍 经典案例 ...
- 前端页面——Cookie与Session有什么区别
我们在实际生活中总会遇到这样的事情,我们一旦登录(首次输入用户名和密码)某个网站之后,当我们再次访问的时候(只要不关闭浏览器),无需再次登录.而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录, ...
- cookie、session总结
前几天在调试第三方支付接口时碰到一个session失效问题,用了几天时间才搞明白,现在回想一下,主要还是由于cookie和session这一块的一些基本概念没有搞清楚,现总结一下. 浏览器使用HTTP ...
- cookie 和session 的区别详解
转自 https://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html 这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者 ...
- web存储中cookie、session区别
http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的.为了使得web能够产生一些动态信息,就需要保存"状态",而cookie和session机制就是为了解决http ...
- cookie和session的代码实现
cookie和session的代码实现 1.设置cookie 今天笔试题考的是cookie的设置,我竟然选了request也可以设置cookie,我的天呀. 我们来看如何在response设置吧 pu ...
- 还分不清 Cookie、Session、Token、JWT?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 转自:掘金 作者:秋天不落叶 juejin.im/po ...
- Token ,Cookie、Session傻傻分不清楚?
点击上方蓝色"视学算法",选择"设为星标" 作者 | 王菜鸟1993 来源 | cnblogs.com/JamesWang1993/p/8593494.html ...
- Flask之Cookie与Session
Cookie与Session 1 Cookie 设置 from flask import Flask, make_responseapp = Flask(__name__)@app.route('/c ...
最新文章
- hk.module must be initialized inside an hk.transform
- python爬虫原理-爬虫原理解析
- ListActivity的使用
- SQL语句学习(二)
- python访问组策略_python 组策略
- SGU 428 Rebus(构造)
- 【C】——C深入探讨——switch语句的default位置【转】
- ai 2.5d插件_【插画AI教程】从0到1,学会16 种热门插画设计风格!
- 乐高机器人骨奥_乐高机器人这个大坑,为啥大家都拽着孩子往里跳?
- 详细 C语言自增自减运算符区分 ++n和n++
- 酷派大神F1移动版刷机教程卡刷教程
- anydesk 自建服务器,AnyDesk使用FRP自建远程桌面连接
- PS学习笔记------运用脚本及自动化批量处理
- 关于schema文档
- 前端js实现京东轮播图
- 【C语言】自定义类型(结构体类型+枚举类型+联合体类型)[进阶篇_ 复习专用]
- Linux命令英文全称解释
- GitHub 开源了多款字体「GitHub 热点速览 v.22.48」
- google voice如何转移
- Java编写一个原始的聊天室(线程、服务器-客户端)