# JavaWebCookieSession
**Repository Path**: fowner/java-web-cookie-session
## Basic Information
- **Project Name**: JavaWebCookieSession
- **Description**: JavaWeb之CookieSession基础
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-11-10
- **Last Updated**: 2022-06-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Cookie技术
## Cookie概述
+ Cookie是服务器通知客户端保存键值对的一种技术
+ 客户端有了Cookie之后每次请求都会发送给服务器
+ 每个Cookie的大小限定为4kb
+ 保存在客户端
## Cookie的创建(服务器端)
+ 创建处理Cookie的Servlet并创建创建对应的方法
+ 创建Cookie对象
```
//创建Cookie对象
Cookie cookie = new Cookie("key1","value");
```
+ 把Cookie发送给客户端
```
//发送cookie给客户端
resp.addCookie(cookie);
```
## Cookie的获取(服务器端)
+ 使用HttpServletRequest对象的的getCookies方法即可获得
```
//获取cookie
Cookie[] cookies = req.getCookies();
```
+ 获得后的结果是Cookie类型的数组
## Cookie值的修改(服务器端)
+ 获取Cookie
+ 查找要修改的Cookie
+ 修改Cookie的值
+ 把修改后的Cookie发送给客户端
## Cookie的生命周期
+ 通过Cookie的setMaxAge方法设定
+ 设定可以正值,负值,0
+ 正值
表示设定时间秒后,删除Cookie。
+ 负值
表示退出浏览器应用时删除cookie。
+ 0
表示马上删除cookie
## Cookie的Path设定
Cookie的path属性可以有效过滤哪些path可以发送给客户端,哪些不发给客户端。
这里是通过path属性对请求地址进行有效过滤的。
例如:
设置一个cookie的path属性值为:工程路径/abc
请求地址为:
http://localhost:8080/JavaWebCookieSession/abc/cookie.html 时发送cookie。
http://localhost:8080/JavaWebCookieSession/cookie.html 时不发送cookie。因为工程名/abc不符合url地址。
## 通过cookie实现一个用户免登陆的功能。
+ 说明
所谓的用户免登陆是当用户登录成功后,下次再登录的时候,用户名不用输入,自动被填充的效果。
+ 后端
1.创建LoginServlet并实现get方法。
2.并在get方法中获取用户名,密码,并对其进行验证。
3.成功的话,创建cookie并把用户名放进cookie,然后发送给客户端。
+ 前端
1.设置EL表达式有效
2.在用户名的value值用EL表达式,获取cookie中userName的值。
# Session技术
## Session概述
1. Session是一个接口HttpSession。
注:接口的具体实现类在Tomcat服务器代码中。
可以参照Tomcata服务器源码,源码位置如下。
tomcat源码根目录/java/org/apache/catalina/session/StandardSession.java
2. Session就是会话,它是用来维护客户端和服务器之间关联的一种技术。
3. 每一个客户端都有自己的一个session。
4. session会话中我们经常用来保存用户登陆之后的信息。
5. 保存在服务端。
## Session的创建和获取
+ 创建
使用HttpServletRequest类的getSession()方法
注:第一次使用表示创建session会话。
+ 获取
使用HttpServletRequest类的getSession()方法。
注:获取方法和创建方法是同一个方法。如果不是第一次使用该方法则表示获取。
+ 如何判断是不是第一次使用?
使用HttpSession接口的isNew()方法进行判断。
+ 判断结果为true
表示是新创建的。
+ 判断结果为false
表示之前创建的。
+ 获取Session唯一识别ID
每一个Session都有一个唯一的识别ID,可以通过HttpSession接口的getId()方法获取session的Id值。
## session的生命周期
+ 默认是30分钟
tomcat默认session时常是30分钟。
tomcat的超时时间设置路径是:
CATALINA_BASE路径下的/conf/web.xml 中。(每次Tomcat启动项目的时候CATALINA项目会打印在控制台。)
配置如下
```xml
30
```
+ 马上超时
通过HttpSession接口的invalidate()方法设置会话为马上超时。
+ 具体时常
方式有两种
1. 通过HttpSession接口的setMaxInactiveInterval()方法设置
设定单位是秒。
2. 通过项目的web.xml配置
```xml
想要设定的时间(单位是分钟)
```
# Session和Cookie之间的关系
+ Session是基于Cookie的,创建好的Session会以Cookie的形式发送给客户端。
+ Session保存在web服务器端,而Cookie保存在客户端。
+ Session的时间间隔是两个操作之间的最大的有效时间。如果点击按钮之后,有效时间从新开始计时。
+ 