Cookie 核心技术
核心: Cookie类(用于存储会话数据,会话数据保存在浏览器客户端)
1、Cookie(String name,String value)构造方法
2、设置Cookie
void setPath(String uri) //设置Cookie的有效访问路径
void setMaxAge(int expiry) //设置Cookie的有效访问时间
void setValue(String new vlaue) //设置Cookie值
void response.getCookie(Cookie c) //发送Cookie到浏览器保存
Cookie[] request.getCookies() //接受Cookie
Cookie的原理
1、服务器创建Cookie对象,把绘画数据存储到Cookie对象中
2、服务器发送信息到浏览器 setCookie:name=eric(隐藏发送了一个set-Cookie名称的响应头)
3、浏览器得到服务器发送的Cookie,然后保存在浏览器端
4、浏览器在下次访问服务器时,会带着Cookie信息 Cookie-name=eric(隐藏带着一个叫cookie名称的响应头)
5、服务器端接收到浏览器带来的Cookie信息
Cookie细节:
1、void setPath(String uri),有效路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时会带着cookie信息,否则不带,默认有效路径在当前web应用下Cookie.setPath("/day")
2、设置Cookie的有效时间,setMaxAge(int e)
正整数:表示Cookie的数据保存在浏览器的缓存目录中(硬盘),数值表示保存的时间(以秒为单位),
(从最后不调用Cookie开始计算),
负整数:表示cookie数据保存在浏览器的内存中,浏览器关闭Cookie丢失,
0:表示删除同名的Cookie数据
3、Cookie数据类型只能保存在非中文的字符串类型的,可以保存多个,但浏览器一般只允许存放300个Cookie,每个Cookie大小限制为4kB
案例:登陆记住密码
登陆页面
<%
Cookie cookies[] = request.getCookies();
if (cookies != null && cookies.length != 0) {
for (Cookie k : cookies) {
System.out.println(k.getName());
if ("LoginUserName".equals(k.getName())||"LoginPassword".equals(k.getName())) {
pageContext.setAttribute(k.getName(), k.getValue());
}
}
}
%>
<h1 style="font-size: 30px" align="center">登陆</h1>
${msg}
<form action="login" method="post">
用户:<input type="text" name="username" required="required"
placeholder="用户名/密码" value="${LoginUserName }"><br>
<br> 密码:<input type="password" name="password"
required="required" placeholder="用户名/密码" value="${LoginPassword}"><br>
<br> <input type="checkbox" name="rememberPwd"
value="rememberPwd">记住密码<br>
<br>
<button type="submit">提交</button>
</form>
后台:servlet
String username= req.getParameter("username");
String psw = req.getParameter("password");
boolean rememberPwd = req.getParameter("rememberPwd")!=null;
if(rememberPwd) { //记住密码
Cookie usernameCookie = new Cookie("LoginUserName", username);
Cookie passwordCookie = new Cookie("LoginPassword", psw);
usernameCookie.setMaxAge(60);// 以秒为单位,存储1分钟
passwordCookie.setMaxAge(60);
resp.addCookie(usernameCookie); //添加到 浏览器
resp.addCookie(passwordCookie);
}