理解会话中的Cookie和Session对象

会话可以简单理解为:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。

在java语言中,Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求,其中这个过程,保存会话中数据的两种重要技术:

1.Cookie技术:

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

2.Session技术:

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

一.HttpSession原理

Cookie和Session都能维护web客户端和web服务端的会话。

1.  什么是HttpSession

1)  HttpSession属于服务端技术;

2)  在Servlet中,产生唯一的会话,必须通过request.getSession()才行,重新打开新的IE,会产生新的Session会话;

3)  在转发和重定向的情况下,多个Servlet中共享同一个HttpSession;

4)  同一个代码request.getSession(),但可能含义不同,其一是代表创建新的会话,其二是取得原有的会话;

2.  HttpSession原理

1)  会话底层是基于Cookie的;

2)  客户端发送请求头:Cookie: JSESSIONID=99152C7F1862952395B8D8EC99089E2E

3)  服务端发送响应头:Set-Cookie: JSESSIONID=99152C7F1862952395B8D8EC99089E2E; Path=/day08

因此,对于会话而言,通过JSESSIONID来维护客户端和服务端的状态;

4)  通过手工向客户端写入Cookie来达到多个浏览器共享会话的情况;

5)  确保浏览器能禁止Cookie成功,当Cookie被禁用,可以使用URL重写来维护客户端和服务端的状态;

6)  会话在服务端默认有效期为30分钟;

7)  如果有这样的错误:Session already invalidated:

则表示在无效的会话中取值,此时会话并没有销毁,只是内容被清空而已;

8)  当浏览器阻止Cookie写入浏览器,可以使用URL重写;

二.HttpSession如何销毁

  1. 在web.xml文件中配置过期时间,单位为分,Cookie生命周期时间单位是:秒;
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <session-config>
    <session-timeout>1</session-timeout>
  </session-config>
</web-app>

2.   通过HttpSession.invalidate()将当前会话设置为无效;

3.   web服务器shutdown时,即销毁HttpSession;

4.   重新部署新的web应用。

注意:关闭浏览器,在默认情况下,会话不会销毁。

三.Cookie细节

  1. 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(Nme)和设置值(Value);
  2. 一个web站点可以给一个web浏览器发送多个Cookie,一个web浏览器也可以存储多个web站点提供的Cookie;
  3. 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB;
  4. 如果创建了一个Cookie,并将他发送到浏览器,默认情况下它是一个会话级别的Cookie,即存放在浏览器的缓存中,而当用户退出浏览器后被删除。

注意:删除Cookie时,path必须一致,否则不会删除。

四.HttpSession细节

1.ssion对象被销毁之后,不能在会话中取其内容

代码:

session.invalidate();

//session.getAttribute("")此操作无效,不允许

五.乱码问题

  1. 在Servlet中,以字节方式输出给浏览器时:

ServletOutputStream以本地平台方法自动编码和解码,以解决中文输出问题,即用户不需要设置编码方法,ServletOutputStream已解决。

代码如下:

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        ServletOutputStream sout = response.getOutputStream();
        sout.write("你好!".getBytes());

或者,用户可以自定义编码和解码方式,也可以解决中文输出问题。

代码如下:

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        ServletOutputStream sout = response.getOutputStream();
        sout.write("大家好!".getBytes("UTF-8"));    }

2.   在Servlet中,以字符方式输出给浏览器时:需要在Servlet代码中设置服务端的编码方式和客户端的编码方式一致。

代码如下:

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //以字符方式输出中文
        response.setContentType("text/html;charset=utf-8");
        PrintWriter pw = response.getWriter();
        pw.write("你好!大家好!");
    }

六.什么样的场景下选用不同的域对象

  1. 在多个动态web资源中共享信息时,想到使用域对象;
  2. Context:信息是属于每个客户端共享的,例如访问次序;
  3. Session:信息是属于每个客户端独享的,例如购物车,用户登录;
  4. request:信息是属于一次性的内容,例如错误信息,项目中优先使用;

七.Get 和 Post 请求时的转发和重定向

  1. 转发问题:

1)  在doGet()方法下进行转发时,则转发到的页面代码是doGet()方法下执行的代码;

2)  在doPost()方法下进行转发时,则转发到的页面代码是doPost()方法下执行的代码;

2.   重定向问题:

1)  在doGet()方法下进行重定向时,则重定向到的页面代码是doGet()方法下执行的代码,因为重定向后是由客户端浏览器从新以request()的Get请求头方式请求;

八.会话对象常用的AIP

  1. Cookie对象
Cookie cookie = new Cookie("name","xiaoming");
        System.out.println(cookie.getName());//输出name
        System.out.println(cookie.getValue());//输出name对应的值,即xiaoming
        cookie.setMaxAge(60);//设定这个cookie的最长存活时期,单位:秒
        int time = cookie.getMaxAge();//返回这个cookie指定的最长存活时期

2.   Session对象

//有两层含义,其一是创建新的session会话,其二是得到该web客户端对应的会话
HttpSession session = request.getSession();
session.getId()//获取session的ID
session.isNew()//判断其是否新旧
session.setAttribute("name", "xiaoming");//绑定域中的信息
String name = (String)session.getAttribute("name");//获取域中指定绑定的信息
Long time = session.getLastAccessedTime();//获取会话最后的请求时间
session.invalidate()//终止这个session。所有绑定在这个session上的数据都会被清除。
时间: 2024-12-26 15:26:50

理解会话中的Cookie和Session对象的相关文章

{Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 xxx 八 xxx 一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了.从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束.在通话过程中,你会向10086发出多个请求,那么这多个请

IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息:比如用户信息.聊天历史记录.好友列表等等,长连接则是用于实时的聊天消息或指令的接收和发送. 作为IM系统中不可或缺的技术,Http短连的重要性无可替代,但Http作为传统互联网信

JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解

Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) JSP简介 JSP(Java Server Pages) 与Java Servlet一样,是在服务器端执行的,不同的是JSP先由服务器编译部署成Servlet执行. JSP技术的企业最佳实践(生成HTML内容) 新的JSP2.0规范版本包括新的功能(EL表达式,新增的Simple Tag和Tag

JavaWeb学习之转发和重定向、会话技术:cookie、session、验证码实例、URLConnection使用(下载网页)(4)

1.转发和重定向 HttpServletResponse response 转发: RequestDispatcher dispatcher = request.getRequestDispatcher("/secondServlet"); request.setAttribute("pwd","123");//这里设置的值在secondServlet中可以获取到 dispatcher.forward(request, response);//调

07.会话跟踪技术cookie与session

会话跟踪技术cookie与session 01.会话跟踪:会话路径技术使用Cookie或session完成: 我们知道HTTP协议是无状态协议,也就是说每个请求都是独立的! 无法记录前一次请求的状态.但HTTP协议中可以使用Cookie来完成会话跟踪! 在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术 02.Cookie概述 Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对. 客户端会保存Cookie,并会标注出Cookie的来源(哪个服务

Flask中使用cookie和session

Flask中使用cookie和session 设置cookie from flask import Flask,Response app = Flask(__name__) @app.route('/index') def index(): response = Response("设置cookie") response.set_cookie('username','sfencs') return response if __name__ == '__main__': app.run(

Django中使用cookie和session

目录 Django中使用cookie与session 一.cookie 二.session Django中使用cookie与session 一.cookie cookie的由来:由于HTTP协议是无状态的,每次请求都是独立的请求,为了能够保存某些数据,cookie便产生了. 什么是cookie:cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对.下次访问服务器的时候,浏览器会自动携带这些键值对,以便服务器提取有用数据. cookie的原理:cookie的工作原理是:

会话技术中的Cookie与session

关于会话技术 会话:一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:Cookie 服务器端会话技术:Session Cookie: 概念:客户端会话技术,将数据保存到客户端 使用步骤: 创建Cookie对象,new Cookie(String name, String value) 绑定数据. 发送Cookie对象, response.addCookie(Cookie

Django中的会话技术(Cookie,Session,Token)

一.Cookie 客户端技术,将数据信息存储到浏览器中,存储的结构是字典结构,即key-value. Cookie是服务端创建,但保存于客户端,客户端每次发送请求时都会将Cookie信息发送到服务器(因为Cookie是请求头信息的一部分) Cookie不支持中文,不能跨浏览器,不能跨域名 1.设置cookie HttpResponse.set_cookie() response.set_signed_cookie("Cookie名称","Cookie值",salt=