day09(--Cookie与Session)

一、会话

1.   一次对话,可能说了很多句:

2.   Web开发中的会话:

l  打开浏览器,点击了多个连接(发出了多次的请求)

l  会话共享多次请求的数据

二、Cookie(客户端的文件中)è不可以存对象,可以存储字符串类型的数据

1.   Cookie客户端应用:记住登录用户名

2.   Response:把cookie存在客户端  response.addCookie(cookie);

3.   Request:获取客户端的cookie   Cookie[] csokies = request.getCookies();

4.   响应头:Cookie-set

5.   请求头:Cookie

6.   常用方法

l  setName:    cookie 的名称

l  setValue  cookie的值

l  setVersion:版本

l  setComment:注释

l  setMaxAgecookic能保存多久保存永久:max_value integer的静态属性int的最大数值

l  setDomain:域名 取当前的域名一般不需要设置 path默认取当前项目,一般不需要设置

l  setPath   路径 当servlet的路径可以statrtWith() cookie的路径时 可以看到cookie

7.   注意:

l  定位唯一一个cookie  Doma + path + name 主机名+路径+CookieName

l  Cooke无法删除可以通过Key 的 设置时间为0 那么将会覆盖 cookie就为空

l  cookie的范围必须大于servlet的路径 才可以看到

l  cookie不能存中文,不能存对象

l  存在客户端,就是一个文件,用于存储数据存response request

l  一个网站最多20个,总共300个,每个不能超过4k

l  让一个cookie被整个网站看到 设置路径为当前项目 request.getContextPath();项目路径

三、Session(服务端的内存中) è可以存对象和字符串

1.   Session服务器:记住用户状态

2.   域对象:servletContext request

3.   看成一个Map

4.   共享数据,存在服务器的内存中,被一次会话共享

5.   获取:request.getSession() 第一次getSession() 创建对象

6.   HttpSession session = request.getSession();可带参数

7.   如果参数为true,没有就创建,有就不创建()默认为true();

8.   如果参数为false,有就返回,没有就返回null

9.   常用方法:

l  object getAttribute(key)    根据Key获取value

l  void setAttribute(key,value)设置key value

l  void removeAttribute(key)   通过Key删除session中的值

l  void invalidate()           销毁Session

四、防止重复提交

1.   连续点击:

2.   返回页面缓存继续提交:

l  整一个随机数 UUID static randomUUID(); 标识同步的原理

l  第一次提交时session 和表单中有一个同样的标识

l  第一次提交成功后把session的标识清空

l  第二次重复提交时对session做重复判断

l  提交后让按钮失效

五、session生命周期

1.   服务器重启

2.   长时间不响应:钝化 存到磁盘中 session中的对象存在tomcat/work目录下

  <session-config> //配置钝化时间

    <session-timeout> </session-timeout> //单位是分钟

</session-config>

默认是30分钟

3.   创建一个新的session,更改jsessionID

六、Cookie禁止

1.   禁止cookiesession不能用,session的头是cookie

2.   如果浏览器禁止了cookie,可以手动带上jsessionID。但是比较麻烦

3.   URL进行处理,可以自动在cookie禁止的情况下创建jsession

七、代码:

1、代码1创建一个Cookie

//获取当前时间

String now = new Date(). toLocaleString ();

//创建一个Cookie

Cookie cookie = new Cookie("lastAccessTime",now);

//设置cookie的生命周期

cookie.setMaxAge(Integer.MAX_VALUE);

//设置cookie的主机名

//cookie.setDomain(); //一般不需要

//cookie.setPath(request.getContextPath() + "/servlet");//路径

//通过相应将Cookie保存到本地

response.addCookie(cookie);

定义一个唯一的Cookie domain+path+cookiename

2、代码2获取Cookie

    //获取所有的cookie

    Cookie[] cs = request.getCookies();

    //如果cookie不为null,则获取每个cookie,并进行名称的匹配

    if(cs != null) {

    for (int i = 0; i < cs.length; i++) {

    //说明有上次的访问时间

    if("lastAccessTime".equals(cs[i].getName())) {

        out.println("上次的访问时间是:" + cs[i].getValue());

              }

        }

    }

3、代码3删除一个Cookie

    //Cookie无法删除

    Cookie cookie = new Cookie("lastAccessTime","");

    cookie.setMaxAge(0);

    response.addCookie(cookie);

4、代码4记住用户名

/*

 * 记住用户名

 * 记住历史访问记录

 */

public class LoginUIServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

    response.setContentType("text/html;charset=UTF-8");

    PrintWriter out = response.getWriter();

    //去那获取用户名?Cookie

    Cookie[] cs = request.getCookies();

    //设置用户名的默认值为空字符串,如果没有记住用户名则为空

    String username = "";

    String remember = "";

    if(cs != null) {

    for (int i = 0; i < cs.length; i++) {

        if("username".equals(cs[i].getName())) {

        //如果进入到if语句,说明已经记住用户名了

        username = cs[i].getValue();

        remember = "checked='checked'";

            }

        }

    }

    out.println("<form action='"+request.getContextPath()+"/servlet/LoginServlet' method='post' >");

    out.println("用户名:<input type='text' name='username' value='"+username+"'/>");

    out.println("<br />");

    out.println("密码:<input type='password' name='password'/>");

    out.println("<br />");

    out.println("记住用户名:<input type='checkbox' name='remember' value='0' "+remember+"/>");

    out.println("<br />");

    out.println("<input type='submit'  value='登陆'/>");

    out.println("</form>");

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        doGet(request, response);

    }

}

public class LoginServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

    response.setContentType("text/html;charset=UTF-8");

    PrintWriter out = response.getWriter();

    request.setCharacterEncoding("UTF-8");

    String username = request.getParameter("username");

    String password = request.getParameter("password");

    String remember = request.getParameter("remember");

    //什么时候记住用户名?

    //如果不为null,说明打勾了

    Cookie cookie = new Cookie("username",username);

    cookie.setPath(request.getContextPath());

    if(remember != null) {

    //记住用户?记哪啊?

    //记在cookie

    cookie.setMaxAge(Integer.MAX_VALUE);

    }

    else {

        //删除cookie

        cookie.setMaxAge(0);

    }

        response.addCookie(cookie);

        out.println("恭喜您,登陆成功,3秒后跳转至首页!!!");

        //response.setHeader("Refresh", "3;URL=" + request.getContextPath());

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        doGet(request, response);

    }

}

5、代码5创建一个Session

    //如何创建Session对象

    HttpSession session = request.getSession();

    //如果参数为true,和上面一样,没有就创建,有就不创建

    //如果参数为false,有就返回,没有就返回null

    //HttpSession session = request.getSession(true);

    session.setAttribute("username", "zhangsan");

    System.out.println(session.getAttribute("username"));

6、代码6 servlet获取Session

    HttpSession session = request.getSession();

    System.out.println(session.getAttribute("username"));

 

转载于:https://www.cnblogs.com/Probably/p/4839743.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值