一、会话
1. 一次对话,可能说了很多句:
2. Web开发中的会话:
l 打开浏览器,点击了多个连接(发出了多次的请求)
l 会话共享多次请求的数据
1. Cookie客户端应用:记住登录用户名
2. Response:把cookie存在客户端 response.addCookie(cookie);
3. Request:获取客户端的cookie Cookie[] csokies = request.getCookies();
4. 响应头:Cookie-set
5. 请求头:Cookie
6. 常用方法
l setName: cookie 的名称
l setValue: cookie的值
l setVersion:版本
l setComment:注释
l setMaxAge: cookic能保存多久保存永久:max_value integer的静态属性int的最大数值
l setDomain:域名 取当前的域名一般不需要设置 path默认取当前项目,一般不需要设置
l setPath: 路径 当servlet的路径可以statrtWith() cookie的路径时 可以看到cookie
7. 注意:
l 定位唯一一个cookie Doma + path + name 主机名+路径+CookieName
l Cooke无法删除可以通过Key 的 设置时间为0 那么将会覆盖 cookie就为空
l cookie的范围必须大于servlet的路径 才可以看到
l cookie不能存中文,不能存对象
l 存在客户端,就是一个文件,用于存储数据存response 取 request
l 一个网站最多20个,总共300个,每个不能超过4k
l 让一个cookie被整个网站看到 设置路径为当前项目 request.getContextPath();项目路径
1. Session服务器:记住用户状态
2. 域对象:servletContext request
3. 看成一个Map
4. 共享数据,存在服务器的内存中,被一次会话共享
5. 获取:request.getSession() 第一次getSession() 创建对象
6. HttpSession session = request.getSession();可带参数
7. 如果参数为true,没有就创建,有就不创建()默认为true();
8. 如果参数为false,有就返回,没有就返回null
9. 常用方法:
l object getAttribute(key) 根据Key获取value
l void setAttribute(key,value)设置key 和value
l void removeAttribute(key) 通过Key删除session中的值
l void invalidate() 销毁Session
1. 连续点击:
2. 返回页面缓存继续提交:
l 整一个随机数 UUID static randomUUID(); 标识同步的原理
l 第一次提交时session 和表单中有一个同样的标识
l 第一次提交成功后把session的标识清空
l 第二次重复提交时对session做重复判断
l 提交后让按钮失效
1. 服务器重启
2. 长时间不响应:钝化 存到磁盘中 session中的对象存在tomcat/work目录下
<session-config> //配置钝化时间
<session-timeout> </session-timeout> //单位是分钟
</session-config>
默认是30分钟
3. 创建一个新的session,更改jsessionID
1. 禁止cookie,session不能用,session的头是cookie
2. 如果浏览器禁止了cookie,可以手动带上jsessionID。但是比较麻烦
3. 对URL进行处理,可以自动在cookie禁止的情况下创建jsession
//获取当前时间 String now = new Date(). //创建一个Cookie Cookie cookie = new Cookie("lastAccessTime",now); //设置cookie的生命周期 cookie.setMaxAge(Integer.MAX_VALUE); //设置cookie的主机名 //cookie.setDomain(); //一般不需要 //cookie.setPath(request.getContextPath() + "/servlet");//路径 //通过相应将Cookie保存到本地 response.addCookie(cookie); 定义一个唯一的Cookie domain+path+cookiename |
//获取所有的cookie Cookie[] cs = request.getCookies(); //如果cookie不为null,则获取每个cookie,并进行名称的匹配 if(cs != null) { for (int i = 0; i < cs.length; i++) { //说明有上次的访问时间 if("lastAccessTime".equals(cs[i].getName())) { out.println("上次的访问时间是:" + cs[i].getValue()); } } } |
//Cookie无法删除 Cookie cookie = new Cookie("lastAccessTime",""); cookie.setMaxAge(0); response.addCookie(cookie); |
/* * 记住用户名 * 记住历史访问记录 */ public class LoginUIServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //去那获取用户名?Cookie Cookie[] cs = request.getCookies(); //设置用户名的默认值为空字符串,如果没有记住用户名则为空 String username = ""; String remember = ""; if(cs != null) { for (int i = 0; i < cs.length; i++) { if("username".equals(cs[i].getName())) { //如果进入到if语句,说明已经记住用户名了 username = cs[i].getValue(); remember = "checked=‘checked‘"; } } } out.println("<form action=‘"+request.getContextPath()+"/servlet/LoginServlet‘ method=‘post‘ >"); out.println("用户名:<input type=‘text‘ name=‘username‘ value=‘"+username+"‘/>"); out.println("<br />"); out.println("密码:<input type=‘password‘ name=‘password‘/>"); out.println("<br />"); out.println("记住用户名:<input type=‘checkbox‘ name=‘remember‘ value=‘0‘ "+remember+"/>"); out.println("<br />"); out.println("<input type=‘submit‘ value=‘登陆‘/>"); out.println("</form>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } |
public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); request.setCharacterEncoding("UTF-8"); String username = request.getParameter("username"); String password = request.getParameter("password"); String remember = request.getParameter("remember"); //什么时候记住用户名? //如果不为null,说明打勾了 Cookie cookie = new Cookie("username",username); cookie.setPath(request.getContextPath()); if(remember != null) { //记住用户?记哪啊? //记在cookie中 cookie.setMaxAge(Integer.MAX_VALUE); } else { //删除cookie cookie.setMaxAge(0); } response.addCookie(cookie); out.println("恭喜您,登陆成功,3秒后跳转至首页!!!"); //response.setHeader("Refresh", "3;URL=" + request.getContextPath()); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } |
//如何创建Session对象 HttpSession session = request.getSession(); //如果参数为true,和上面一样,没有就创建,有就不创建 //如果参数为false,有就返回,没有就返回null //HttpSession session = request.getSession(true); session.setAttribute("username", "zhangsan"); System.out.println(session.getAttribute("username")); |
HttpSession session = request.getSession(); System.out.println(session.getAttribute("username")); |
原文:http://www.cnblogs.com/Probably/p/4839743.html