• session and cookie


    1 状态管理

    a) 什么是状态管理?
    将浏览器与web服务器之间多次交互当做一个整体处理,并且将多次交互涉及的数据(即状态)保存下来.

    b) 如何进行状态管理?

    1. 可以将状态保存在客户端
      将状态保存到浏览器这边,通常使用Cookie技术
    2. 将状态保存到服务器端(session 会话)

    c) Cookie

    1. 什么是coolie?
      服务器为了识别用户身份临时存在浏览器端的少量数据.
    2. 工作原理
      浏览器访问服务器时,服务器将一些数据已set-cookie消息头的形式发送给浏览器.浏览器会将这些数据临时保存下来;当浏览器再次访问服务器时,会将这些数据以cookie消息头的形式发送给服务器
    3. 添加cookie
      cookie c = new cookie(string name,string value);
      注:name:cookie名称 value:cookie值
      response.addCookie(c);

    d) 读取Cookie
    Cookie[] request.getCookies();
    注:有可能返回null;
    String cookie.getName();
    String cookie.getValue();

    e) 编码问题

    1. Cookie只能存放合法的ascii字符.
    2. 如果要存放中文,可以将中文转换成合法的ascii字符形式.
      String URLEncoder.encode(String str,String charset)
      String URLdecode,decode(String str,String charset)

      注:建议添加cookie时,都统一编码(使用以上对保存的数据进行处理)

    f) 生存时间问题
    cookie.setMaxAge(int seconds);//设置生存时间

    1. 单位是秒
    2. Sencods>0 浏览器通常会将cookie保存在硬盘上,超过指定的时间,cookie失效.
      sencods<0 默认值(浏览器会将cookie保存在内存中)
      sencods=0 删除cookie.将cookie的时间设置为0就删除了.

    g) Cookie的路径问题

    1. 什么是cookie的路径问题?
      浏览器访问服务器上某地址,会比较请求地址是否符合cookie的路径要求,只有符合的cookie才会被发送。
    2. Cookie的默认路径?
      等于添加cookie的web组件的路径:比如:/servlet-day06/biz01/addCookie.jsp添加了一个cookie则cookie的默认路径是/servlet-day06/biz0.
    3. 匹配规则:
      要访问的地址必须是cookie的路径或者其子路径.
    4. 设置cookie路径
      cookie.setPath(String path);

    h) Cookie的限制

    1. Cookie不安全.(敏感数据要加密处理)
    2. Cookie可以被用户禁止.
    3. Cookie只能保存少量数据(大约4k).
    4. 浏览器端保存的cookie的数量也有限制.(几百个)
    5. Cookie只能保存字符串.

    2 Session(会话)

    a) 什么是session?
    服务器端为了保存状态而创建的一个特殊的对象.

    b) 工作原理
    浏览器访问服务器时,服务器创建一个特殊的对象session(该对象有唯一一个id,称之为sessionid)服务器会将sessionid以cookie的形式发送给浏览器;当浏览器在访问时,会将sessionid发送过来,服务器端可以利用这个session找到对应的session对象.

    c) 如何获得session对象?

    1. 方式一
      httpSession session = request.getSession(boolean flag);
      当flag为true时,先查看请求当中有没有sessionid,如果没有则创建一个session对象,如果有,依据sessionid查找对应的session对象.如果找到则返回,找不到会创建一个新的session对象.
      当flag为false时,先查看请求当中有没有sessionid,如果没有则返回null,如果有,依据sessionid查找对应的session对象.如果找到则返回,找不到返回null.
    2. 方式二
      httpSession session = request.getSession();
      等价于request.getSession(true);

    d) 几个方法

    1. String session.getId();
    2. setAttrbute(String name,object obj);
    3. Object getAttrbute(string name);
    4. removeAttrbute(string name);//解除绑定

    e) session超时

    1. 什么是session超时?
      服务器会将空闲时间过长的session对象删除掉.
      注:为了节省内存空间的占用.服务器默认的超时限制一般是30分钟.
    2. 怎么修改?
      配置文件(web.xml)中修改session config的时间数值.
    3. SetMaxInactiveInterval(int second);//两次请求之前的最大间隔时间.如果超过了时间限制则服务器会销毁session对象.

    f) 删除session
      invalidate();

  • 相关阅读:
    JAVA 综合面试题
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/djh222/p/10612640.html
Copyright © 2020-2023  润新知