您的位置:首页 > 其它

九、实现会话跟踪的解决方案cookie

2017-06-26 00:00 309 查看
实现会话跟踪的解决方案cookie



使用cookie:





8):cookie的路径和域范围

cookie的路径

cookie对象.setPath(String path);

若不设置,那么使用的存放CookieServlet资源名的相对路径

LoginServlet("/cookie/login"):存放一个Cookie

ListServlet("/list");

由LoginServlet跳转到ListServlet,就不会再请求中携带Cookie

相当于此时:cookie.setPath("/cookie");

设置在整个应用中设置请求的时候都会携带Cookie:

cookie.setPath("/");

不同应用/主机之间ruhr共享一个cookie
此时,就得需要设置域
很多网站都有二级域名(配置虚拟)
一级域名:baidu.com
二级域名:music.baidu.com map.baidu.com等
需求:多个二级域名之间共享登录信息
cookie.setPath("/");
cookie.setDomain(".baidu.com");

9)cookie的缺陷:
1.中文处理麻烦
2.多人共用一台主机,信息不安全
3.一个cookie只能存储一个简单类型的数据
若要同时存储,账号,密码,邮件等等
主要原因是:cookie的value只能存储String,不能存储Object
4.cookie的数量和大小限制
一台服务器在一个客户端最多保存20个cookie
一个浏览器最多可以保存300个cookie
5.cookie的原理:把共享数据存储在浏览器中。
每次请求,再把共享数据带到服务端
最好是把数据存放于服务器。

10)程序如下:

login.html文件:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h3>登录页面</h3>
<form action="/CookieTest/cookie/login" method="post">
账号:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>


loginServlet.java文件:

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//处理登陆请求,并显示登陆界面
@WebServlet("/cookie/login")
public class loginServlet extends HttpServlet{

private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
//1.接收账号和密码参数
String username=req.getParameter("username");
//2.调用业务方法处理请求
System.out.println("登陆判断");
//3.控制界面跳转,输出一个界面
out.print("欢迎"+username+"登录<br/>");
//----------------------------------------------
//创建cookie,并记录登记信息
Cookie c=new Cookie("currentName",URLEncoder.encode(username, "utf-8"));//加密

//设置路径
c.setPath("/");
//设置生存时间
c.setMaxAge(10);

//把cookie传递给浏览器
resp.addCookie(c);
//----------------------------------------------
out.print("<a href='/CookieTest/list'>收件箱</a>");

}
}

listServlet.java文件:

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//处理登陆请求,并显示登陆界面
@WebServlet("/list")
public class listservlet extends HttpServlet{

private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.service(req, resp); //此行有毒
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
String username="";
//-------------------------------------------
// 从请求中获取Cookie
Cookie[] cs = req.getCookies();
if(cs!=null){
//获取指定名称的Cookie
for (Cookie cookie : cs) {
String name=cookie.getName();
if("currentName".equals(name)){
username=URLDecoder.decode(cookie.getValue(), "utf-8"); //解密
break;
}
}
}
//-------------------------------------------

out.print("欢迎"+username+"登录<br/>");
for (int i = 0; i < 6; i++) {
if(i==0)
out.print("<a href='/CookieTest/cookie/get'>第"+i+"封邮件</a><br/>");
else if(i==1)
out.print("<a href='/CookieTest/cookie/list'>第"+i+"封邮件</a><br/>");

}

}
}

getServlet.java文件:

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//处理登陆请求,并显示登陆界面
@WebServlet("/cookie/get")
public class getservlet extends HttpServlet{

private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
String username="";
//-------------------------------------------
// 从请求中获取Cookie
Cookie[] cs = req.getCookies();
if(cs!=null){
//获取指定名称的Cookie
for (Cookie cookie : cs) {
String name=cookie.getName();
if("currentName".equals(name)){
username=URLDecoder.decode(cookie.getValue(), "utf-8");
break;
}
}
}
//-------------------------------------------

out.print("欢迎"+username+"登录<br/>");
out.println("雅蠛蝶</a>");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet