zoukankan      html  css  js  c++  java
  • Session与Cookie(1)

    Session
    session是一种位于服务端,用于存储一个会话(指打开浏览器访问某个域名,及其下面的资源,然后关掉浏览器的过程)中所需的配置信息。也就是在一个会话中,只存在一个session。对于Java web编程来说,session就是在request.getSession()创建的。同样,session也可以通过setMaxInactiveInterval()设置其生存时间。
    
    session的结构类似一个map。可以根据需求put不同的key和value进去。通常,用作登录状态的保持,对应在客户端存储cookie,可以减少多次登录困扰。
    
    用Java代码体验下这一过程:
    
    PrintWriter writer = response.getWriter();
    
    HttpSession session = request.getSession();// 设置session有效时间为1天
    session.setMaxInactiveInterval(60 * 60 * 24);
    
    if (session.isNew()) {
        session.setAttribute("name", "cjt");
        writer.write("新建Session成功");
    
    }else {   
    
          writer.write(session.getAttribute("name").toString());
    
    }
    
    每个会话第一次与服务端产生交互,请求头Request Header是不包含任何cookie的,所以跟踪不到session,isNew()返回true;然后在同一次回话中,接下来的访问都返回false.
    
    
    
    对于tomcat容器来讲,getSession()默认会生成一个id为JSESSIONID的session,然后set-cookie保存到客户端(会话cookie),但是session默认生命周期是20分钟,所以第二次会话时上次的名为JESSIONID的cookie会丢失,但是session还存在服务器端,
    
    Cookie
    
    cookie是指为了辨别身份、进行 session 跟踪而储存在本地终端上的数据(通常经过加密),也可以叫做浏览器缓存。cookie是由服务端发出set-cookie指令,客户端根据设置的cookie信息创建本地cookie。
    
    一个cookie可看做一个实体类,里面存有当前cookie的key、value、maxage、path等。在访问path路径及其子路径时,会封装一系列相关的cookie集合到Request Header中,发送到服务器。
    
    具体java代码就是在服务端完成,记住创建了cookie对象后要添加到response中:
    
    PrintWriter writer = response.getWriter();
    
    HttpSession session = request.getSession();
    
    // 设置session有效时间为1天
    session.setMaxInactiveInterval(60 * 60 * 24);
    
    if (session.isNew()) {
        session.setAttribute("name", "cjt");
        writer.write("新建Session成功");
    
    } else {
        writer.write(session.getAttribute("name").toString());
    
    }
    
    
    
    特别注意
    
    在实际开发中,可能需要我们手动更改cookies的内容,那么cookie并不提供update,只有add方法。这里就要采取覆盖的方式更新了。
    
    举个例子,你把购物车的信息都在cookie key为cart的本地常驻cookie中,然后添加了商品到购物车,这里就要更新该cookie。重点就在这里,java里面获取到key为cart的cookie,你会发现只能取到里面的key和value,path和maxage都获取不到,具体原因我也不清楚。
    
    如果此时强行采取添加覆盖的方式,就会增加了一个会话cookie到客户端。而之前的常驻购物车cookie并没有改变。所以得每次手动设置path和maxage为了和之前保持一致,这样才能达到更新的目的。
    

      

  • 相关阅读:
    Mono 开发者会议
    PHP正在死亡?
    区域设置 ID (LCID) 表
    OpenSource 的 Free是自由 非免费
    搭建.net framwork 3.0开发环境的一篇文章
    Rainbow的相关资料
    利用VS2005中的Code Snippets提高开发效率
    判定是否为IPv4
    我的MVVM框架 v3教程——流程相关
    查询json数据结构的8种方式
  • 原文地址:https://www.cnblogs.com/ipetergo/p/6482480.html
Copyright © 2011-2022 走看看