Cookie是个啥
Cookie是保留在客户端浏览器中的信息,用于管理会话,这些信息被包含在HTTP请求头和响应头中在浏览器和服务器之间传递。
应用的很广泛,比如常见的记住用户名:
其实就是浏览器告诉服务器:老铁,我又来看你了。 服务器找到cookie一看,哟,这我哥们啊,昨天还看我来着。 这一来一去可不就对上号了。
一般情况下,每个web服务器在浏览器中可以保存20个左右的cookie。不过浏览器一共能存300个左右,谁小饼干吃多了也撑的慌不是。一个小饼干大概4KB。
Cookie到底是个啥
一个对象,有些属性,哦了
让我们来看看有哪些重要的:
1)name 此cookie叫啥名 (不能依据name单独识别一个cookie)2)value 就是值呗 (键值对中的值)
3)path 网址路径 (和name一起确定一个cookie;一般都设置为以 ‘/’ 开头,当前web应用下路径都可以)
4)maxAge 缓存时间 (单位:秒;默认-1,关闭浏览器就没了;0是直接删除;正数为它的生存时间)
还是老样子,代码加注释,求你看一次
这是一个强行用来登录的表单
package com.samblack323.cookie; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** 这是一个强行用来登录的表单 */ public class LoginServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=UTF-8"); //设置浏览器编码 PrintWriter out = resp.getWriter(); //获得一个字符流输出对象,往响应正文写html代码 String username = ""; String checked = ""; Cookie[] cookies = req.getCookies(); //得到cookie数组的方法 for (int i = 0; cookies!=null && i < cookies.length; i++) { if("username".equals(cookies[i].getName())) { // 如果该是存用户名的那个 username = cookies[i].getValue(); //搞到这个用户名呗 checked = "checked='checked'"; //顺便把记住用户名给勾选上 } } //这里用out对象写了简单的一个表单 //注意username 和 checked 两个是变量,如果没有值,就给"",反正没影响的啦 out.write("<form action='"+req.getContextPath()+"/cookie/dologin"+"' method='post'>"); out.write("用户名: <input type='text' name='username' value="+username+"><br/>"); out.write("密码: <input type='password' name='password'><br/>"); out.write("记住用户名: <input type='checkbox' name='remember' "+checked+"><br/>"); out.write("<input type='submit' value='登录'><br/>"); out.write("</form>"); } }
这是一个强行登录的servlet
package com.samblack323.cookie; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** 这是一个强行登录的servlet */ public class DoLoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); //设置服务端编码 resp.setContentType("text/html;charset=UTF-8"); //设置浏览器编码 PrintWriter out = resp.getWriter(); //搞个流对象 // 获取表单数据 String username = req.getParameter("username"); //搞到用户名 String password = req.getParameter("password"); //搞到密码 String remember = req.getParameter("remember"); //搞到是否记住用户名 Cookie ck = new Cookie("username", username); //搞个Cookie:键值对,so easy ck.setPath("/"); //搞个path,就是根目录多省心 // 处理业务逻辑 if ("tom".equals(username) && "123".equals(password)) { //强行登录 if (remember != null) { //如果选择了记住用户名 ck.setMaxAge(60*60); //此cookie存一个小时吧 } else { ck.setMaxAge(0); //不然滚蛋,立马消失 } resp.addCookie(ck); //在响应中加上它,带它回老家 out.write("登录成功!"); } else { out.write("登录失败!"); //2秒后刷新到登录页面去呗 resp.setHeader("refresh", "2;url=" + req.getContextPath() + "/cookie/login"); } } }