昆明做网站的公司哪家好,wordpress 清理插件,黄骅港客运站电话号码,.net网站开发程序员文章目录 一 什么是会话1 生活中会话2 Web中会话3 会话技术 二 Cookie1 原理2 使用2.1 添加cookie2.2 遍历cookie2.3 设置cookie的过期时间 3 特点 三 Session1 原理2 使用2.1 创建session对象2.2 不同的servlet间共享session对象中数据2.3 web.xml中设置session的超时时间 3 禁… 文章目录 一 什么是会话1 生活中会话2 Web中会话3 会话技术 二 Cookie1 原理2 使用2.1 添加cookie2.2 遍历cookie2.3 设置cookie的过期时间 3 特点 三 Session1 原理2 使用2.1 创建session对象2.2 不同的servlet间共享session对象中数据2.3 web.xml中设置session的超时时间 3 禁用cookie的处理 了解4 Cookie与Session的不同5 request/session/ServletContext 一 什么是会话
1 生活中会话
A:商量个事儿呗
B嘛事
A借点钱呗
B: 喂…喂…我这里信号不好…
2 Web中会话
打开浏览器-》访问应用-》关闭浏览器
用户开一个浏览器点击多个超链接访问服务器多个web资源然后关闭浏览器整个过程称之为一个会话。
每个用户在使用浏览器与服务器进行会话的过程中不可避免各自会产生一些数据有时服务器要想办法为每个用户保存这些数据。
例如在浏览器中保存用户的token
但是HTTP超文本传输协议是一个基于请求与响应模式的无状态协议。当同一个浏览器多次发送请求到服务器时服务器并不知道是哪个浏览器发送的请求即 HTTP 协议的请求无法保存用户状态。
Http无状态主要指 针对Http协议服务器不能自动维护用户的上下文信息无法保存用户状态 每次请求都是独立的不会受到前面请求的影响也不会影响后面的请求。
由于 HTTP 协议是无状态的无法保存和跟踪用户状态所以需要其他的方案来解决问此题它就是会话技术。常用的会话技术分为两种
Cookie 浏览端会话技术 Session 服务端会话技术
3 会话技术
1)Cookie:将数据保存在浏览器客户端的技术
服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时就会带着各自的数据去。这样web资源处理的就是用户各自的数据了
2)Session:将数据保存在服务端的技术
服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象由于session为用户浏览器独享所以用户在访问服务器的web资源时可以把各自的数据放在各自的session中当用户再去访问服务器中的其它web资源时其它web资源再从用户各自的session中取出数据为用户服务
二 Cookie
1 原理 1)服务端创建cookie对象
2)发送cookie信息到浏览器HttpServletResponse 中提供void addCookie(Cookie cookie)方法
例如响应头中增加 Set-Cookie: namezhangsan
3)浏览器将得到的cookie信息保存在浏览器端
4)通过浏览器下次访问web应用时请求数据中会带上cookie信息例如请求头中 Cookie: namezhangsan
5)服务器端收到浏览器发送的cookie信息
2 使用
Cookie类中常用方法
方法Cookie(String name, String value)创建cookie对象的构造方法value是字符串类型tomcat8后value可以使用中文String getName()取得Cookie的名字String getValue()取得Cookie的值void setValue(String newValue)设置Cookie的值void setMaxAge(int expiry)设置Cookie的最大保存时间单位秒即cookie的有效期默认会话结束cookie失效。值为 0 时表示删除该 Cookieint getMaxAge()获取Cookies的有效期void setPath(String uri)设置cookie的有效路径比如把cookie的有效路径设置为/aaa那么浏览器访问aaa的web资源时就会带上cookieString getPath()获取cookie的有效路径
2.1 添加cookie
public void cookie1(HttpServletRequest request, HttpServletResponse response){//创建cookie对象Cookie cookie new Cookie(name, zhangsan);//如果有相同name值得cookie后一个会替换前一个cookie内容//Cookie cookie1 new Cookie(name, lisi);//cookie中的name和value都是字符串类型//Cookie cookie1 new Cookie(age, 10);//tomcat8之后cookie中支持中文//Cookie cookie1 new Cookie(name, 张三);//通过响应将cookie数据发送到浏览器端response.addCookie(cookie);//response.addCookie(cookie1);}注意在tomcat 8 之后cookie支持中文数据但是某些特殊字符还是不支持比如空格、分号等需要借助URLEncoder.encode(字符串, “utf-8”)进行编码。 这种特殊字符也不用刻意去记出问题后直接进行编码 2.2 遍历cookie
public void cookie1(HttpServletRequest request, HttpServletResponse response){//获取请求中的cookie数据Cookie[] cookies request.getCookies();if(cookies ! null){for (Cookie cookie2 : cookies) {// 获取cookie的name和对应的valueSystem.out.println(cookie2.getName());System.out.println(cookie2.getValue());}}
}2.3 设置cookie的过期时间
public void cookieTime(HttpServletRequest request, HttpServletResponse response){Cookie cookie new Cookie(name, zhangsan);//设置cookie的过期时间//单位秒// cookie.setMaxAge(60 * 60);//可以实现删除已有的cookie// cookie.setMaxAge(0);//过期时间会话结束时cookie.setMaxAge(-1);response.addCookie(cookie);}3 特点 一个cookie不能超过4k; 一个浏览器最多存300个cookie 一个站点最多存20个cookie 三 Session
在WEB开发中服务器可以为每个用户浏览器创建一个会话对象session对象可用用于保存客户端用户的访问状态。 注意 一个浏览器独占一个session对象 同一浏览器的不同窗口共享同一 Session 对象但不同浏览器窗口之间不能共享 Session 对象。 Session依赖于cookie 不同的Servlet可以共享同一Session对象中的数据 1 原理 1)访问应用时如果创建sessionrequest.getSession()每个session对象会分配一个id,称谓JSESSIONID
2)服务器会将session的id以cookie的形式发送给浏览器端浏览器端会存储该id
3)以后再访问应用时浏览器将session的id发送给服务端
4)服务端收到session的id后会根据id查找对应的session对象如果没有找到创建一个新的session对象
2 使用
HttpSession中常用方法
方法String getId( )获取当前的会话ID。每个会话在服务器端都存在一个唯一的标示sessionIDsession对象发送到浏览器的唯一数据就是sessionID它一般存储在cookie中。void setMaxInactiveInterval(int interval)指定在无任何操作的情况下设置会话的最大持续时间单位是秒默认30分钟负数表明会话永不失效int getMaxInActiveInterval获取会话的最大持续时间void setAttribute(String name,String value)设定指定名字的属性的值并将它添加到session会话范围内Object getAttribute(String name)在会话范围内获取指定名字的属性的值返回值类型为object如果该属性不存在则返回nullvoid removeAttribute(String name)删除指定名字的session属性void invalidate使session失效。可以立即使当前会话失效原来会话中存储的所有对象都不能再被访问long getLastAccessedTime()返回上一次发送与此 Session 关联的请求的时间
2.1 创建session对象
//会根据session的id 查找服务端是否有对应的session对象如果有返回session对象;如果没有创建session对象
//创建session对象后会将JSESSIONID以cookie的形式存在浏览器端
HttpSession session request.getSession();//根据JSESSIONID找session对象如果存在返回如果不存在返回null
// HttpSession session request.getSession(false);//session的id唯一的 JSESSIONID
String id session.getId();
System.out.println(id);//默认情况下JSESSIONID的过期时间是会话结束时为了能正常访问session对象需要手动将JSESSIONID存储到cookie中并设置一个合适的过期时间
Cookie cookie new Cookie(JSESSIONID, id);
cookie.setMaxAge(30 * 60);
response.addCookie(cookie);//设置session的过期时间单位秒默认30分钟
session.setMaxInactiveInterval(10 * 60);//向session域中存入数据
session.setAttribute(name, 张三);2.2 不同的servlet间共享session对象中数据
// 在一个servlet中存储数据
session.setAttribute(name, zhangsan);// 在另一个servlet中读取数据
System.out.println(session.getAttribute(name));2.3 web.xml中设置session的超时时间
单位分钟
session-configsession-timeout10/session-timeout
/session-config3 禁用cookie的处理 了解
session依赖cookie因为服务器需要根据sessionId然后找到客户端的session对象如果浏览器禁用了cookie就需要对URL进行重写这样服务器收到的请求中就会带有sessionId。
使用方法response.encodeURL(String url)
它会判断客户端浏览器是否禁用了Cookie如果禁用了那么这个方法会在URL后面追加jsessionid否则不会追加。
// /day36_session/main;jsessionid8BE9D12D48CB4C51532A9C007698EEFF
String encodeURL response.encodeURL(request.getContextPath() /main);
response.sendRedirect(encodeURL);4 Cookie与Session的不同
CookieSessionCookie 将数据存放在浏览器端Session 将数据存储在服务器端浏览器对 Cookie 的大小和数量有限制Session 的大小和数量一般不受限制Cookie 中保存的是字符串Session 中可以保存任意类型的对象Cookie 明文传递安全性低Session 存在服务器端安全性较高Cookie 保存在客户端不占用服务器资源Session 保存在服务端若并发访问的用户十分多就会占用大量服务端资源
5 request/session/ServletContext
request、session 和ServletContext 称为 Servlet 的三大域对象它们都能实现资源间共享数据
requestsessionServletContext只对当前请求涉及的 Servlet 有效通过请求的转发可以实现一次请求中资源之间共享数据。session 对本次会话期间的所有 Servlet 都有效session对象过期手动调用方法销毁会话结束对整个 Web 应用内的所有 Servlet 有效