会话及会话管理技术

Posted 名字真的很急用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了会话及会话管理技术相关的知识,希望对你有一定的参考价值。

会话概述:
什么是会话:从打开浏览器,到访问网页,到最终关闭浏览器,整个过程就是一次会话。
会话的特点:包含多次请求,一次完整的会话针对一个用户。
会话管理技术:
第一种:cookie技术,客户端技术
第二种:session技术,服务器技术

例如:购物车案例,买完商品后,加入购物车,买的商品存到什么对象里比较合适呢?
1.如果使用request域对象保存商品信息

结论:使用request域对象保存商品信息不可以,因为每次发送请求,都会产生一个新的请求对象。

2.如果使用requestcontext对象来保存商品信息,可以但是不合理。

结论:使用requestcontext域对象不合理,因为一个web项目只有一个requestcontext域对象。
所以在开发过程中,保存会话过程产生的数据,采用会话管理技术,也就是使用cookie和session技术来保存会话过程中产生的数据。

Cookie对象
1.什么是cookie:

cookie是一种会话管理技术,它用来保存会话过程中产生的数据,然后在浏览器和服务器交互时会使用cookie里面保存的数据
注意:首次访问服务器,浏览器不会携带cookie到服务器。
2.Cookie常用的api
得到cookie对象
Cookie cookie = new Cookie(String Key,String value)
得到cookie的名称和值
String key = cookie.getName();
String value = cookie.getValue();
设置Cookie生命时长
setMaxAge(int ch);
默认值为-1,关闭及销毁
Cookie的分类:
1.会话级别cookie,浏览器关闭,
2.持久化cookie,通过设置setMaxAge这个方法来设置。
给cookie设置路径
setPath(路径的URL)
得到cookie
Cookie[] cookies = request.getCookies();

2.session对象

什么是session
session是一种会话管理技术,session用来保存会话过程中的数据,保存的数据存储到服务器端,
session的原理:基于cookie实现的,更确切的说是基于会话级别的cookie实现的。
httpSession常用的方法:
得到session的id
getId()
设置session的生命时长
setMaxInactiveInterval(int c);
销毁session
invalidate();
得到session对象
httpSession session = getSession();
session域对象,作用范围一次完整的会话(包含多个请求)
存值:setAttribute(String key,Object obj);
取值:Object obj =getAttribute(String key);
删除值:removeAttribute(String key);

总结域对象:
request域对象 session域对象 servletcontext域对象,作用范围依次变大。

Cookie记录上次访问的时间

@WebServlet("/tim")
public class cookieTime extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html;charset=utf-8");
        //获取所有的cookie
        Cookie[] cookies = req.getCookies();
        //遍历cookie数组
        String lastTime=null;
        for (int i = 0; cookies!=null&&i <cookies.length; i++) {
            //获取cookie的名字
            String name = cookies[i].getName();
            if("lastAccess".equals(name)){
                //获取cookie的时间
                 lastTime = cookies[i].getValue();
                 break;
            }
        }
        //判断是否是首次访问
        if(lastTime==null){
            //第一次访问

            resp.getWriter().write("你是第一次访问本网站");
        }else {
            //不是第一次访问
            resp.getWriter().write("你上次访问的时间"+lastTime);

        }
        //第三次 第四次......
        String time =String.format("yyyy-MM-dd HH:mm:ss",new Date());
        Cookie cookie= new Cookie("lastAccess",time);
        cookie.setMaxAge(60*60*24*7);
        resp.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

以上是关于会话及会话管理技术的主要内容,如果未能解决你的问题,请参考以下文章

会话管理之Cookie技术

第二十三章 多项目集中权限管理及分布式会话——《跟我学Shiro》

JavaWeb会话管理:Cookie

Java会话技术之Cookie

Java会话技术之Cookie

text 会话片段Logan