Session和Cookie

  因为http协议无状态,须要用session记录客户状态,如购物车场景,服务端为用户建立特定session,用于标识并跟踪用户
  服务端保存session的方法不少,内存,数据库,文件都有
  集群时考虑session的转移,大型网站会有专门的session服务器集群来保存用户会话,这个时候session通常存放在内存web


服务端如何识别特定的客户?

  每次http请求,客户端会发送响应cookie到服务器,大多数应用用cookie来实现session跟踪的
  第一次建立session时,服务端会在http协议告诉客户端,须要在cookie类里记录一个session id,之后每次请求会发送这个id到数据库,我就知道你是谁了
  若是浏览器禁用了cookie,能够url重写来进行会话跟踪数据库


  Cookie登录场景,登录过一次网站,第二次访问不须要输入帐号密码自动登录,就是把信息写到Cookie里,访问网站的时候,网站页面的脚本读取Cookie,自动帮你把用户名填写了浏览器

Cookie

cookie机制

cookie内容tomcat

CookieAPI

建立和发送cookie服务器

@WebServlet("/sendCookie")
public class sendCookie extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //建立cookie
        Cookie cookie=new Cookie("name","zqf");//只能存字符串,和域对象不同
        //发送cookie到客户端
        response.addCookie(cookie);
    }
}

第一次访问能够看到响应头包含cookie,发送给客户端cookie


第二次访问能够看到请求头也包含了cookie,是服务器端发送到客户端保存的session



cookie是会话级别,也就是说浏览器开始到关闭,关闭浏览器时cookie则消失,可是有时候为何没有消失呢,是由于给cookie设置了在客户端的持久化时间 网站

设置cookie持久化时间url

cookie.setMaxAge(10*60*1000);
 设置cookie在浏览器中存储时间为10分钟,到时间自动删除cookie信息

设置cookie携带路径spa

cookie.setPath("/");访问服务器下全部资源都携带这个cookie
cookie.setPath("/项目名/当前页面");则访问当前页面才携带cookie

删除cookie.

@WebServlet("/removeCookie")
public class removeCookie extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //删除客户端保存name-xxx的cookie信息
        Cookie cookie=new Cookie("name","");
        //设置时间为0
        cookie.setMaxAge(0);
        response.addCookie(cookie);
    }
}

获取cookie

@WebServlet("/getCookie")
public class getCookie extends HttpServlet {
    //得到cookie的值
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        for(Cookie cookie:cookies) {
            String cookieName = cookie.getName();
            if(cookieName.equals("name")) {
                String cookieValue = cookie.getValue();
                System.out.println(cookieValue);
            }
        }
    }
}

Session

session技术是基于cookie,cookie技术存储session编号--jsessionid

session机制

session是一种服务度机制,相似散列表结构来存储用户数据
浏览器第一次向客户端发送请求时,服务器会自动生成一个session和sessionid
sessionid惟一标识这个session
服务器响应时把sessionid发送给浏览器
浏览器第二次向服务器发送请求时就会携带这个sessionid
服务器经过这个id找到对应的session获取用户数据


session缺点

cookie被禁止,session也会被禁止,能够经过url重写摆脱托cookie

Cookie经过在客户端记录信息肯定用户身份,Session经过在服务器端记录信息肯定用户身份
Session数据放在服务器上,Cookie数据存放在客户的浏览器上

session的生命周期

生命周期

建立    
    第一次执行request.getSession()时建立
销毁
    服务器(非正常)关闭
    Session过时
        tomcat下web.xml自动配置
    手动销毁
        session.invalidate();

服务器关闭,session就销毁了嘛?

不对,有时间的,看session是否过时

session和cookie区别

session保存在服务器,cookie保存在客户端
session中保存的时对象,cookie保存的是字符串
session不能区分路径,同一个用户访问一个网站期间,全部的session在任何一个地方均可以访问
cookie若是设置路径,则在某些地方不能访问
session须要借助cookie才能正常工做,若是禁用cookie,session则失效
客户端会在发送请求的时候,自动将本地存活的cookie封装在信息头发送给服务器

session和cookie应用场景

session上下文机制,针对每个用户,经过sessionid来区分不一样客户
session是以cookie或url重写为基础的,默认使用cookie实现,系统会创造一个名为jsessionid的输出cookie
重要状态走session,不重要走cookie,登录信息用session,购物车用cookie
相关文章
相关标签/搜索