javaweb学习总结-----cookie会话管理

一、会话的概念

会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
  有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾经来过,这称之为有状态会话。

二、会话过程中要解决的一些问题?

每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据。

三、保存会话数据的两种技术

3.1、Cookie
  Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

3.2、Session
  Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
  ### Cookie

构造器 :

Cookie cookie = new Cookie(String name,String value);
Cookie cookie = new Cookie(String name,String value);
Cookie cookie = new Cookie(String name,String value);

服务器响应cookie给客户端

Response.addCookie(Cookie);
Response.addCookie(Cookie);
Response.addCookie(Cookie);

服务查看用户带来的请求是否有cookie

Cookie[] cookies = Request.getCookie();
//可以使用cookie来验证用户是否来过
//判断cookies是否为空,然后遍历即可
Cookie.getName();
Cookie.getValue();

cookie测试用户是否来过

package com.westos.serlvet;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CookieTest extends HttpServlet {

    boolean flag = false;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //解决乱码问题:
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        //检查请求的人是否带了Cookie
        //通过用户的请求,检查它是否有cookie
        Cookie[] cookies = request.getCookies();
        System.out.println("cookie:"+cookies);


        if (flag){//如果flag是真,来过
            if (cookies!=null){//你有cookie
                for (int i = 0; i < cookies.length ; i++) {
                    Cookie cookie = cookies[i];
                    if (cookie.getName().equals("lastLoginTime")){
                        response.getWriter().println("你上一次来的时间为:"+cookie.getValue());
                        System.out.println("刷新了cookie");
                    }
                }
            }
        }else { //如果flag是真,没来过
            response.getWriter().println("你是第一次来,还想要会员套餐");
            System.out.println("给该用户一个cookie");
        }

        //建立一个cookie
        Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");

        //设置cookie保存的时间 //cookie.setMaxAge();
        //把这个cookie发给客户端
        response.addCookie(cookie);

        //response.addCookie(new Cookie("lastLoginTime",System.currentTimeMillis()+""));
        flag = true;


    }
}

Session

只要客户端一旦连接上服务器,服务器就会自动产生Session;

一个连接对应一个session,session可以在一个会话中传递信息;

通过setAttribute设置值。

通过getAttribute获得值。

由服务器端控制,服务器如果重启了,信息就会丢失!

package com.westos.serlvet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class SessionTest 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.setCharacterEncoding("UTF-8");
        //Session由服务器自动创建,如何获得session

        //HttpSession 得到的sessioin对象
        HttpSession session = req.getSession();

        //得到sessionID,一次会话,一个seesionID;
        String id = session.getId();
        resp.getWriter().println("获得的sessionId:\n"+id);


        String name = "qinjiang";
        //向session中存入一个值;
        session.setAttribute("name",name);
        resp.getWriter().println("存入信息成功:"+name);

    }
}

会话注销方法一:

session.invalidate();//通过代码注销会话

会话注销方法二:

<!--session-config可以设置会话自动过期,时间分钟为单位-->
<session-config>
    <session-timeout>1</session-timeout>
</session-config>
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值