# 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的时间间隔是两个操作之间的最大的有效时间。如果点击按钮之后,有效时间从新开始计时。 + ![Session和Cookie之间的关系](/Users/zhichengfan/work/02.文档/01.笔记/Session和Cookie之间的关系.svg)