标签:request art 关系 oca ack 数据结构 decode -- sch
<%@ page language="java" import="java.util.*" contentType="text/html;charset=GBK"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>session对象方法</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <b> 会话ID:<%=session.getId() %> <br> 是否新会话:<%=session.isNew() %><br> 设置和获取属性对象:用户名 = <%session.setAttribute("用户名","bing"); %> <%=session.getAttribute("用户名") %><br> <% Date creationTime = new Date(session.getCreationTime()); Date accessedTime = new Date(session.getLastAccessedTime()); %> 会话创建时间:<%=creationTime %><br> 上次访问时间:<%=accessedTime %><br> 会话持续时间(s):<%=session.getMaxInactiveInterval() %><br> <%session.setMaxInactiveInterval(12); %> 修改后的会话持续时间(s):<%=session.getMaxInactiveInterval() %><br> <%session.invalidate(); %> </b> </body> </html>
浏览器在访问服务器时,服务器将一些数据以 set-cookie 消息头的形式发送给浏览器。浏览器会将这些数据保存起来。当浏览器再次访问服务器时,会将这些数据以 cookie 消息头的形式发送给服务器。
2、创建 cookie
Cookie cookie = new Cookie(String name,String value); response.addCookie(cookie);
cookie的name不可以重复,和Map集合类似,当有重复的name的时候,会替代。
3、查询cookie
//如果没有 cookie,则返回 null。 Cookie[] cookies = request.getCookies(); String name = cookie.getName(); String value = cookie.getValue();
4、cookie 保存时的编码问题
cookie 的值叧能是ascii 字符,如果是中文,需要将中文转换成 ascii 字符形式。可以使用 URLEncoder.encode()方法和 URLDecoder.decode()方法来进行这种转换。
5、cookie 的保存时间
cookie.setMaxAge(int seconds);//单位为秒
? seconds > 0
浏览器会将 cookie 以文件的方式保存在硬盘上。在超过指定的时间以后,会删除该文件。
? seconds < 0
默认值,浏览器会将 cookie 保存在内存里面。叧有当浏览器关闭以后,才会删除。
? seconds = 0
立即删除该 Cookie
6、删除 cookie
比如要删除一个 name 为”username”的 cookie。
Cookie c = new Cookie(“username”,”“);
c.setMaxAge(0);
cookie.setPath(request.getContextPath());//路径
response.addCookie(c);
7、cookie 的限制
? cookie 可以禁止
? cookie 的大小有限制(4k 左右)
? cookie 的数量也有限制(浏览器大约能保存 300 个)
? cookie 的值叧能是字符串,要考虑编码问题。
? cookie 不安全
8、cookie 的路径问题
浏览器在向服务器上的某个地址发送请求时,会先比较 cookie 的路径不向访问的路径(地址)是否匹配, 叧有匹配的 cookie, 才会发送。
cookie 的路径可以通过 cookie.setPath(String path)方法来设置。如果没有设置, 则有一个缺省的路径,缺省的路径是生成该 cookie 的组件的路径。
比如: /appname/addCookie 保存了一个 cookie,则该 cookie 的路径就是/appname/addCookie。
规则:
cookie 的路径必须是要访问的路径的上层目录戒者是不要访问的路径相等, 浏览器才会将 cookie 发送给服务器。一般可以设置 setPath(“/appname”),表示访问该应用下的所有地址,均会发送
<a href="<%=response.encodeURL("getSession.jsp")%>">跳转到获取session的页面</a>
<% Cookie c = new Cookie("name","Gareen");//键值对 c.setMaxAge(60*60*24);//有效期24小时,本地持久化 c.setPath("127.0.0.1");//Path表示服务器的主机名,只有浏览器通过这个主机名访问服务器的时候,才会提交这个cookie到服务端 response.addCookie(c);//发送生成的Cookie %> <a href="getCookie.jsp">跳转到获取cookie的页面</a>
注意path的问题:
path表示cookie所在的目录。”/”表示根目录,所有页面都能访问根目录下面的cookie。如果cookie的path为test,那么只test目录下或者是test下的子目录的页面和代码才获取到这个cookie。
例如http://localhost:8080/Web02/test
当URL的path值是以“/”结尾的时候,直接设置为cookie的path值
当URL的path值不是以“/”结尾的时候,查看path里面是否有“/”
例:http://localhost:8080/Web02/test/testServlet
如果有“/”的话,直接截取到最后一个“/”,然后设置为cookie的path值。
如果没有“/”的话,将cookie的path设置为”/”。
Cookie读取
Cookie[] cookies = request.getCookies(); if(cookies != null) for(int i=0;i<cookies.length;i++){ response.getWriter().print(cookies[i].getName()+":"+cookies[i].getValue()); }
Cookie删除
Cookie c = new Cookie("name","peter"); c.setMaxAge(24*60*60); c.setPath("/"); response.addCookie(c); Cookie cookie = new Cookie("username","peter");// 新建Cookie cookie.setMaxAge(0); // 设置生命周期为0,表示将要删除 response.addCookie(cookie);
标签:request art 关系 oca ack 数据结构 decode -- sch
原文地址:https://www.cnblogs.com/jason111/p/9054702.html