JavaWeb之Cookie&Session
Cookie
直译是:小饼干。实际上,Cookie就是由服务器给客户端,并且存储在客户端上的一份小数据
应用场景
自动登录,查看浏览记录,购物车
Cookie存在的意义
HTTP请求是无状态的,客户端与服务器在通讯的时候,是无状态的。所以在客户端第二次访问服务器时,服务器不知道该客户端是否访问过。为了更好的用户体验,更好的交互【自动登录】,对公司来说,更好的收集用户习惯【大数据】
Cookie的使用
添加Cookie到客户端
1.在响应时添加Cookie
Cookie c = new Cookie("aa", "bb");
//使用response的addCookie(c)方法
response.addCookie(c);
2.在客户端收到的信息里,响应头就多出Set-Cookie字段
获取客户端带过来的Cookie
Cookie c = new Cookie("aa", "bb");
Cookie c1 = new Cookie("cc", "dd");
response.addCookie(c);
response.addCookie(c1);
//使用request的getCookies()方法
Cookie[] cookies = request.getCookies();
if(cookies!=null) {
for (Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
System.out.println(name + "=" + value);
}
}
常用方法
1.设置cookie的有效期
public void setMaxAge(int expiry)
设置 cookie 的最大生存时间,以秒为单位。
在浏览器关闭后,cookie就没有了,没有设置cookie的有效期
expiry:有效。以秒计算
正值:表示在这个时间过后,cookie会失效。
负值:关闭浏览器,则cookie就会失效。默认值为-1
2.赋新值
public void setValue(String newValue)
在创建 cookie 之后将新值分配给 cookie
3.用于指定只有请求了指定的域名,才会带上该cookie
public void setDomain(String pattern)
指定应在其中显示此 cookie 的域。
4.只有访问该域名下的cookieDemo的这个路径地址才会带cookie
public void setPath(String uri)
指定客户端应该返回 cookie 的路径。
cookie 对于指定目录中的所有页面及该目录子目录中的所有页面都是可见的。cookie 的路径必须包括设置 cookie 的 servlet,例如 /catalog,它使 cookie 对于服务器上 /catalog 下的所有目录都是可见的。
移除Cookie
官方没有提供delete方法。 也没有什么remove方法。
Cookie cookie = new Cookie("aa","bb");
cookie.setMaxAge(60*60*24);
reponse.addCookie(cookie);
删除cookie
一: 得到以前的cookie,然后重新设置有效期
Cookie [] cookies = request.getCookies();
Cookie cookie = CookieUtil.findCookie(cookies , "aa");
cookie.setMaxAge(0);
reponse.addCookie(cookie);
二:创建一个新的cookie
Cookie cookie = new Cookie("aa","xx");
cookie.setMaxAge(0);
reponse.addCookie(cookie);
例子 显示最近访问的时间。
判断账号是否正确
如果正确,则获取cookie。 但是得到的cookie是一个数组, 我们要从数组里面找到我们想要的对象。
如果找到的对象为空,表明是第一次登录。那么要添加cookie
如果找到的对象不为空, 表明不是第一次登录。
if("admin".equals(userName) && "123".equals(password)){
//获取cookie last-name --- >
Cookie [] cookies = request.getCookies();
//从数组里面找出我们想要的cookie
Cookie cookie = CookieUtil.findCookie(cookies, "last");
//是第一次登录,没有cookie
if(cookie == null){
Cookie c = new Cookie("last", System.currentTimeMillis()+"");
c.setMaxAge(60*60); //一个小时
response.addCookie(c);
response.getWriter().write("欢迎您, "+userName);
}else{
//1. 去以前的cookie第二次登录,有cookie
long lastVisitTime = Long.parseLong(cookie.getValue());
//2. 输出到界面,
response.getWriter().write("欢迎您, "+userName +",上次来访时间是:"+new Date(lastVisitTime));
//3. 重置登录的时间
cookie.setValue(System.currentTimeMillis()+"");
response.addCookie(cookie);
}
}else{
response.getWriter().write("登陆失败 ");
}
Cookie总结
服务器给客户端发送过来的一小份数据,并且存放在客户端上。
获取cookie, 添加cookie
request.getCookie();
response.addCookie();
- Cookie分类
会话Cookie
默认情况下,关闭了浏览器,那么cookie就会消失。
持久Cookie
在一定时间内,都有效,并且会保存在客户端上。
cookie.setMaxAge(0); //设置立即删除
cookie.setMaxAge(100); //100 秒
- Cookie的安全问题。
由于Cookie会保存在客户端上,所以有安全隐患问题。 还有一个问题, Cookie的大小与个数有限制。 为了解决这个问题 —> Session .
Session
会话,Session是一种基于Cookie的一种会话机制。Cookie是服务器返回一小份数据给客户端,并且储存在客户端。Session的数据存放在服务器端
常用API
//得到会话ID
String id = session.getId(); //存值
session.setAttribute(name, value); //取值
session.getAttribute(name); //移除值
session.removeAttribute(name);
Session何时创建 , 何时销毁?
创建
如果有在servlet里面调用了 request.getSession()
- 销毁
session 是存放在服务器的内存中的一份数据。 当然可以持久化. Redis . 即使关了浏览器,session也不会销毁。
- 关闭服务器
- session会话时间过期。 有效期过了,默认有效期: 30分钟。
JavaWeb之Cookie&Session的更多相关文章
- 【JavaWeb】Cookie&Session
Cookie&Session Cookie 什么是 Cookie Cookie 即饼干的意思 Cookie 是服务器通知客户端保存键值对的一种技术 客户端有了 Cookie 后,每次请求都发送 ...
- JavaWeb -cookie&session&application
cookie&session&application总结 Cookie[key-value](不是内置对象必须new): 1. Cookie 是由服务端生成的,在发送给客户端保存 2. ...
- JavaWeb请求与响应 Cookie&Session
1.请求与响应 &Cookie&Session 1.1.请求与响应 HTTP协议 概念:英文全称:HyperText Transfer Protocol 中文全称:超文本传输协议 ...
- JavaWeb 8 Cookie
JavaWeb 8 Cookie 2. 会话管理入门 2.1 生活中会话 我: 小张,你会跳小苹果码? 小张: 会,怎么了? ...
- cookie,session,sessionid
cookie,session,sessionid http协议是无状态的,意思是每次请求的状态不会保存.因此,产生了cookie,session之类保存会话状态的机制.1.什么是cookiecooki ...
- Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期
servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...
- 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法
单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...
- 会话Cookie及session的关系(Cookie & Session)
会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...
- cookie,session,token的定义及区别
参考了很多文章总结的. 1.cookie(储存在用户本地终端上的数据) 服务器生成,发送给浏览器,浏览器保存,下次请求同一网站再发送给服务器. 2.session(会话) a.代表服务器与浏览器的一次 ...
随机推荐
- 线程队列queue的使用
其实线程队列queue跟进程Queue的用法一样. 一.先进先出 import queue q = queue.Queue() q.put('kobe') q.put('cxk') print(q.g ...
- Mybatis的原理分析1(@Mapper是如何生效的)
接着我们上次说的SpringBoot自动加载原理.我们大概明白了在maven中引入mybatis后,这个模块是如下加载的. 可能会有人问了,一般我们的dao层都是通过Mapper接口+Mapper.x ...
- SpringCloud(二):服务的注册与发现(Eureka)
一.什么是服务注册与发现Spring Cloud Eureka 模块提供的功能是被动式的服务发现. 服务注册:每个用户去聊天室服务器上注册. 服务发现:这样他的好友们就能看到你,你同时也将获取好友的上 ...
- OpenCV:图像的按位运算
首先导包: import numpy as np import cv2 import matplotlib.pyplot as plt def show(image): plt.imshow(imag ...
- 微信小程序支付功能 C# .NET开发
微信小程序支付功能的开发的时候坑比较多,不过对于钱的事谨慎也是好事.网上关于小程序支付的实例很多,但是大多多少有些问题,C#开发的更少.此篇文档的目的是讲开发过程中遇到的问题做一个备注,也方便其他开发 ...
- 剑指offer 24:二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 后序遍历,顾名思义根节点位于尾部,故可将 ...
- sqlserver取字符串拼音首字母
sqlserver 使用函数获取一个字符串的拼音首字母 create function dbo.fn_getpinyin ( @str nvarchar(max) ) returns nvarchar ...
- hadoop节点动态删除与增加
动态删除 1)修改配置文件 修改hdfs-site.xml文件,适当减小dfs.replication的数量,增加dfs.hosts.exclude选项 vi hdfs-site.xml <pr ...
- Linux:LAMP环境的搭建
LAMP环境的搭建 安装DNS服务器 安装DNS服务 yum install bind -y DNS的配置 创建正向解析 以创建一个名为"lsy.com"的正向查找区域为例: 第一 ...
- [Linux] 安装grafana并且添加influxdb监控
安装grafana,官网提供了ubuntu的安装包,直接进行安装 wget https://dl.grafana.com/oss/release/grafana_6.5.1_amd64.deb dpk ...