- ·上一篇文章:jsp制作简单计算器
- ·下一篇文章:使用jsp+javabean完成用户登录功能
JSP Cookies
-->
Cookies处理
Cookies是存储在客户机的文本文件,它们保存了大量轨迹信息。在servlet技术基础上,JSP显然能够提供对HTTP cookies的支持。
通常有三个步骤来识别回头客:
- 服务器脚本发送一系列cookies至浏览器。比如名字,年龄,ID号码等等。
- 浏览器在本地机中存储这些信息,以备不时之需。
- 当下一次浏览器发送任何请求至服务器时,它会同时将这些cookies信息发送给服务器,然后服务器使用这些信息来识别用户或者干些其它事情。
Jsp保存用户状态的两大机制:
- Session
- Cookie
Cookies 方法
下表列出了Cookie对象中常用的方法:
序号 | 方法 & 描述 |
---|---|
1 | public void setDomain(String pattern)设置cookie的域名,比如k88.net |
2 | public String getDomain()获取cookie的域名,比如k88.net |
3 | public void setMaxAge(int expiry)设置cookie有效期,以秒为单位,默认有效期为当前session的存活时间 |
4 | public int getMaxAge()获取cookie有效期,以秒为单位,默认为-1 ,表明cookie会活到浏览器关闭为止 |
5 | public String getName()返回 cookie的名称,名称创建后将不能被修改 |
6 | public void setValue(String newValue)设置 cookie的值 |
7 | public String getValue()获取cookie的值 |
8 | public void setPath(String uri)设置cookie 的路径,默认为当前页面目录下的所有URL,还有此目录下的所有子目录 |
9 | public String getPath()获取cookie 的路径 |
10 | public void setSecure(boolean flag)指明cookie是否要加密传输 |
11 | public void setComment(String purpose)设置注释描述 cookie的目的。当浏览器将cookie展现给用户时,注释将会变得非常有用 |
12 | public String getComment()返回描述cookie目的的注释,若没有则返回null |
在JSP中创建和使用Cookie
(1)创建一个Cookie对象: 调用Cookie的构造函数,使用一个cookie名称和值做参数,它们都是字符串。
1 | Cookie cookie = new Cookie("key","value"); |
(2) 设置有效期:调用setMaxAge()函数表明cookie在多长时间(以秒为单位)内有效。下面的操作将有效期设为了24小时.
1 | cookie.setMaxAge(60*60*24); |
(3) 将cookie发送至HTTP响应头中:调用response.addCookie()函数来向HTTP响应头中添加cookies.
1 | response.addCookie(cookie); |
(4)读取Cookies对象:需要调用request.getCookies()方法来获得一个javax.servlet.http.Cookie对象的数组,然后遍历这个数组,使用getName()方法和getValue()方法来获取每一个cookie的名称和值。
1 | Cookie []cookies=request.getCookies(); |
(5)使用JSP删除Cookies :删除cookies非常简单。如果您想要删除一个cookie,按照下面给的步骤来做就行了:
- 获取一个已经存在的cookie然后存储在Cookie对象中。
- 将cookie的有效期设置为0。
- 将这个cookie重新添加进响应头中。
Cookies登录页面处理练习
[t]login.jsp[/t]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | <%@ page language="java" import="java.util.*,java.net.*" contentType="text/html; charset=utf-8"%> ? ? <h1>用户登录</h1> <hr /> <% request.setCharacterEncoding("utf-8"); String username=""; String password = ""; Cookie[] cookies = request.getCookies(); //获取已保存的cookie信息至下面表单中。 if(cookies!=null&&cookies.length>0) { for(Cookie c:cookies) { if(c.getName().equals("username")) { username = URLDecoder.decode(c.getValue(),"utf-8"); } if(c.getName().equals("password")) { password = URLDecoder.decode(c.getValue(),"utf-8"); } } } %> <form action="dologin.jsp" method="post" name="loginForm"> <table> <tbody> <tr> <td>用户名:</td> <!--下述value的值为上面已保存至cookie的数据 --> <td><input name="username" type="text" value=""<%=username" />"/></td> </tr> <tr> <td>密码:</td> <td><input name="password" type="password" value="<%=password %>" /></td> </tr> <tr> <td colspan="2"><input checked="checked" name="isUseCookie" type="checkbox" />十天内记住我的登录状态</td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="登录" /><input type="reset" value="取消" /></td> </tr> </tbody> </table> </form>? |
[t]dologin.jsp[/t]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | <%@ page language="java" import="java.util.*,java.net.*" contentType="text/html; charset=utf-8"%> ? ? <h1>登录成功</h1> <hr /> <% request.setCharacterEncoding("utf-8"); //首先判断用户是否选择了记住登录状态 String[] isUseCookies = request.getParameterValues("isUseCookie"); if(isUseCookies!=null&&isUseCookies.length>0) { //把用户名和密码保存在Cookie对象里面 String username = URLEncoder.encode(request.getParameter("username"),"utf-8"); //使用URLEncoder解决无法在Cookie当中保存中文字符串问题 String password = URLEncoder.encode(request.getParameter("password"),"utf-8"); Cookie usernameCookie = new Cookie("username",username); Cookie passwordCookie = new Cookie("password",password); usernameCookie.setMaxAge(864000); passwordCookie.setMaxAge(864000);//设置最大生存期限为10天 response.addCookie(usernameCookie); response.addCookie(passwordCookie); } else { //不使用Cookies Cookie[] cookies = request.getCookies(); if(cookies!=null&&cookies.length>0) { for(Cookie c:cookies) { if(c.getName().equals("username")||c.getName().equals("password")) { c.setMaxAge(0); //设置Cookie失效 response.addCookie(c); //重新保存。 } } } } %> <a href="users.jsp" target="_blank">查看用户信息</a> |
[t]user.jsp[/t]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <%@ page language="java" import="java.util.*,java.net.*" contentType="text/html; charset=utf-8"%> ? ? ? <h1>用户信息</h1> <hr /> <% //获取Cookie用户信息 request.setCharacterEncoding("utf-8"); String username=""; String password = ""; Cookie[] cookies = request.getCookies(); if(cookies!=null&&cookies.length>0) { for(Cookie c:cookies) { if(c.getName().equals("username")) { username = URLDecoder.decode(c.getValue(),"utf-8"); //获取username } if(c.getName().equals("password")) { password = URLDecoder.decode(c.getValue(),"utf-8"); } } } %> 用户名:<%=username %> <!--输出信息 --> 密码:<%=password %> |
JSP Cookies