使用Cookie进行会话管理
来源:互联网 发布:cydia找不到软件源 编辑:程序博客网 时间:2024/05/16 05:06
(1)会话概念
会话可以简单理解为:用户打开浏览器,点击多个链接,访问服务器多个web资源,然后关闭浏览器,整个过程称为一个会话。
有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾经来过,这称为有状态会话。
(2)会话核心问题
每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据,如何保存每个用户的数据从而识别出是哪个用户,是会话的核心问题
(3)保存会话的两种技术
1.Cookie
cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据区。这样,web资源处理的就是用户各自的数据了2.Session
session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个独享的session对象。由于session对象为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其他web资源时,其他web资源再从用户各自的session中取出数据为用户服务。(4)Cookie的API
java中的javax.servlet.http.Cookie类用于创建一个Cookie
(5)Cookie的使用
Response接口中定义了一个adCookie方法,用于在其响应头中增加一个Set-Cookie字段。有了这个字段,浏览器就会生成Cookie
同样的,Request接口中也定义了一个getCookies方法,用来获取客户端提交的Cookie
package com.learn.servlet;import java.io.IOException;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class CookieLearn */public class CookieLearn extends HttpServlet {private static final long serialVersionUID = 1L;/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Cookie[] cookies = request.getCookies();if (cookies!=null) {for (Cookie cookie : cookies) {if ("lastAccessTime".equals(cookie.getName())) {String lastAccessTime = cookie.getValue();System.out.println("上次访问时间是:"+lastAccessTime);break;}}}else {System.out.println("这是第一次访问");}Cookie cookie = new Cookie("lastAccessTime", new Date().toString());cookie.setMaxAge(30);//设置cookie的过期时间是30秒。如果不设置,浏览器关闭就没有了response.addCookie(cookie);}}
第一次访问结果如下:
这是第一次访问
再次访问:
上次访问时间是:Fri Feb 19 10:36:27 CST 2016
可以看出携带了cookie去访问服务器
同时又重新返回了一个Cookie
1.maxAge
如果创建了一个cookie,并将它发送到浏览器,如果不设置maxAge,这个cookie就只会存在浏览器内存中,用户退出浏览器之后就没有了。
如果希望浏览器把cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的过期时间。将最大时效设置为0则是命令浏览器删除cookie
2.Cookie存储的信息
一个Cookie只能标识一种信息,它至少含有一个标识该信息的name和value
3.Cookie存储
浏览器一般只允许存放300个cookie,每个站点最多存放20个
(6)删除Cookie
如上文所说,设置maxAge为0即可。(必须保证Path一致,否则不会删除)
package com.learn.servlet;import java.io.IOException;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CookieLearn extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {Cookie cookie = new Cookie("lastAccessTime", new Date().toString());// 将cookie的有效期设置为0,命令浏览器删除该cookiecookie.setMaxAge(0);response.addCookie(cookie);}}
(7)中文Cookie
如果Cookie中包含中文,则必须使用URLEncode、URLDecode进行编码和解码
package com.learn.servlet;import java.io.IOException;import java.net.URLDecoder;import java.net.URLEncoder;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CookieLearn extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {Cookie[] cookies = request.getCookies();if (cookies!=null) {for (Cookie cookie : cookies) {if ("name".equals(cookie.getName())) {String value = URLDecoder.decode(cookie.getValue(), "UTF-8");System.out.println(value);}}}Cookie cookie = new Cookie("name", URLEncoder.encode("测试", "UTF-8"));response.addCookie(cookie);}}
- 使用Cookie进行会话管理
- 使用Cookie进行会话管理
- 使用Cookie进行会话管理
- 使用Cookie进行会话管理
- 使用Cookie进行会话管理
- java web使用Cookie进行会话管理
- Web使用Cookie进行会话管理
- java Cookie进行会话管理
- javaweb学习总结——使用Cookie进行会话管理
- JavaWeb开发之八:使用cookie进行会话管理
- JavaWeb总结十一、使用Cookie进行会话管理
- Java web学习总结11: 使用Cookie进行会话管理
- javaweb学习总结(十一)——使用Cookie进行会话管理
- Java Web学习总结(8)——使用Cookie进行会话管理
- javaweb学习总结(十一)——使用Cookie进行会话管理
- javaweb学习总结(十一)——使用Cookie进行会话管理
- javaweb学习总结(十一)——使用Cookie进行会话管理
- javaweb学习总结(十一)——使用Cookie进行会话管理
- Java 入门 之 聊天室项目思路 服务器端
- iOS开发多线程---GCD的介绍和简单使用
- iOS 【iOS-PresentViewController切换界面 Modal】
- 高斯金字塔 matlab程序实现
- 1013. Battle Over Cities (25)
- 使用Cookie进行会话管理
- C++ in the modern world(为什么C++不会衰老)
- CodeForces 589G 线段树
- Redis教程(十四):内存优化介绍
- swift-学习笔记一《基础》
- Android Binder设计与实现 – 设计篇
- 使用codepush进行ReactNative热部署
- IOS流媒体播放
- 转载:二进制数据负数补码原理