Cookie
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key和value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。
Cookies最典型的应用:1.判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入
此网站时保留用户信息以便简化登录手续。
Cookies最典型的应用:1.判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入
此网站时保留用户信息以便简化登录手续。
2.另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择 不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。
Cookie就自动地在Web服务器和浏览器之间来回传递的一小块信息。
Cookie适用于那些需要跨越许多页面的信息。Cookie是属于浏览器端的技术。
Cookie的原理:把共享数据存储在浏览器中,每次请求再把共享数据带到服务端。
Cookie就自动地在Web服务器和浏览器之间来回传递的一小块信息。
Cookie适用于那些需要跨越许多页面的信息。Cookie是属于浏览器端的技术。
Cookie的原理:把共享数据存储在浏览器中,每次请求再把共享数据带到服务端。
1. 在服务器端创建一个Cookie
Cookie cookie = new Cookie("name",name);
2. 把Cookie交还给浏览器
response.addCookie(cookie);
3. 从Cookie中取值
//拿到所有的Cookies
Cookie[] cookies = req.getCookies();
//判断Cookies是否为空
if(cookies!=null){
//遍历Cookies,根据它的key(name),拿到相应的值
for (Cookie cookie : cookies) {
if("name".equals(cookie.getName())){
name = cookie.getValue();
}
}
}
Cookie cookie = new Cookie("name",name);
2. 把Cookie交还给浏览器
response.addCookie(cookie);
3. 从Cookie中取值
//拿到所有的Cookies
Cookie[] cookies = req.getCookies();
//判断Cookies是否为空
if(cookies!=null){
//遍历Cookies,根据它的key(name),拿到相应的值
for (Cookie cookie : cookies) {
if("name".equals(cookie.getName())){
name = cookie.getValue();
}
}
}
4.解决Cookie不支持中文的问题
传过去的参数要先进行编码:URLEncoder.encode(name, "UTF-8");
从Cookie中拿到参数后要进行解码: URLDecoder.decode(name, "UTF-8");
5.修改Cookie
第一种方式:设置新的值
cookie.setValue("新的值");
第二种方式:创建一个新的Cookie,名称一样,进行覆盖
Cookie temp = new Cookie("name","xxxx");
resp.addCookie(cookie); //千万不要忘了修改后交还给浏览器
6.Cookie的生命周期
我们自己创建出来的
默认情况下:当浏览器关闭的时候,Cookie就没有了
我们也可以自己去设置 Cookie到底活多长时间 :cookie.setMaxAge(5); (单位是秒)
7.删除一个Cookie的数据:cookie.setMaxAge(0); 设置存活时间为0即是删除
传过去的参数要先进行编码:URLEncoder.encode(name, "UTF-8");
从Cookie中拿到参数后要进行解码: URLDecoder.decode(name, "UTF-8");
5.修改Cookie
第一种方式:设置新的值
cookie.setValue("新的值");
第二种方式:创建一个新的Cookie,名称一样,进行覆盖
Cookie temp = new Cookie("name","xxxx");
resp.addCookie(cookie); //千万不要忘了修改后交还给浏览器
6.Cookie的生命周期
我们自己创建出来的
默认情况下:当浏览器关闭的时候,Cookie就没有了
我们也可以自己去设置 Cookie到底活多长时间 :cookie.setMaxAge(5); (单位是秒)
7.删除一个Cookie的数据:cookie.setMaxAge(0); 设置存活时间为0即是删除
8.Cookie的路径,cookie的位置是默认在创建它的那一个位置
但是很多时候,咱们整个项目都要使用Cookie.
我们就需要把它的路径设置在根目录下面:cookie.setPath("/");
使用cookie模拟邮箱登录
/**
* 邮箱的主界面(第一页面)
* */
@WebServlet("/cookie/main")
public class MainServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;Charset=UTF-8");
//根据名称获取用户传过来的数据信息
String name = req.getParameter("name");
/**
* 解决cookie不支持中文问题
* 步骤:1、先编码 URLEncoder.encode(String s,String enc)
* 2.解码
* */
//URLEncoder.encode(name, "UTF-8") 这句代码表示把传过来的数据是编码之后的数据,解决了中文问题
//在服务器端创建一个cookie
Cookie cookie = new Cookie("name",URLEncoder.encode(name, "UTF-8"));
//把cookie路径设置在根目录下面
cookie.setPath("/");
cookie.setDomain(".baidu.com");//设置二级域名 了解即可
//将cookie交还给浏览器
resp.addCookie(cookie);
PrintWriter writer = resp.getWriter();
writer.println("欢迎您:"+name+"<br />");
writer.println("<a href='/list'>您有五封邮件未读!!</a>");
}
}
/**
* 邮箱的邮件列表(第二页面)
* */
@WebServlet("/list")
public class ListServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;Charset=UTF-8");
String name = "";
//拿到所有的cookies
Cookie[] cookies = req.getCookies();
//判断cookies是否为空
if(cookies!=null){
//遍历cookies,根据它的key,拿到对应的值
for (Cookie cookie : cookies) {
if("name".equals(cookie.getName())){
name = cookie.getValue();
//进行解码,解决中文问题(因为这里传过来的数据是编码后的数据)
name = URLDecoder.decode(name, "UTF-8");
/**
* 第一种修改cookie中值得方法
* cookie.setValue(String newValue)
* resp.addCookie(Cookie cookie)
* 第二种修改cookie的方法:创建一个新的Cookie,名称一样,进行覆盖
* 采用覆盖原有cookie的办法,但是也必须重新把cookie交还给浏览器
* Cookie temp = new Cookie("name","xxxxx")
* */
//修改cookie中指定的值
cookie.setValue("66666");
//修改cookie后的值必须交还给浏览器
resp.addCookie(cookie);
}
}
}
PrintWriter writer = resp.getWriter();
writer.println("欢迎您:"+name+"<br />");
for(int i=1;i<=5;i++){
writer.println("<br /> <a href='/cookie/oneinfo'>第"+i+"封邮件!!</a>");
}
}
}
/**
* 邮箱中某封邮件具体的内容页面(第三页面)
* */
@WebServlet("/cookie/oneinfo")
public class OneInfoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;Charset=UTF-8");
String name ="";
//拿到所有的cookies
Cookie[] cookies = req.getCookies();
//判断cookies是否为空
if(cookies!=null){
//遍历cookies,根据它的key,拿到对应的值
for (Cookie cookie : cookies) {
if("name".equals(cookie.getName())){
name = cookie.getValue();
//进行解码,解决中文问题(因为这里传过来的数据是编码后的数据)
name = URLDecoder.decode(name, "UTF-8");
}
}
}
PrintWriter writer = resp.getWriter();
writer.println("欢迎您:"+name+"<br />");
writer.print("明天一起敲代码");
}
}