会话(Session)数据到底是什么?

通常,Web 环境中的会话是指用户/客户机的 Web 浏览器和一个特定的 Web 服务器之间的一组交互。会话从最初浏览器调用 Web 服务器的 URL 开始,到 Web 服务器结束会话,这个会话“超时”,或当用户关闭浏览器时结束。会话数据是指在永久保存之前用户提供的在多个页面上使用的信息。会话数据和事务数据(Transaction data)之间的区别在于,会话数据是暂时的 - 只用于一组相连接的页面 - 而事务数据是用于永久的存储。会话数据通常在一组 Web 页面之后被转换成事务数据(当用户选择“提交”事务,或为购物车“付帐”时)。 考虑下面的情节:我们的用户 Rob 输入了他最喜欢的(假定的)酒类购物站点的 URL,www. winesRus.com。Rob 浏览页面寻找要买的酒,并在购物车里添加了一些。与站点的所有交互发生在一个由 www.winesRus.com Web 服务器控制的单一会话中。当 Rob 逐屏浏览,购买更多酒时,他要购买的物品的信息、他的地址,还有 Rob 提供的其它任何信息都被保存为会话数据。站点给他要购买的物品定价,并请求他确认。当 Rob 确认时,会话数据被用来执行购买事务,然后数据变成永久性的。 Servlet 与特定的 HTTP URL 一一对应,这很象传统的 Web 编程中每个 URL 要有自己的 CGI 脚本一样。例如,http://winesRus/servlet/purchaseWinesServlet 脚本对应于 http://winesRus.com/servlet/purchaseWinesServlet。 就象 CGI 脚本一样,servlet 自己是无状态的。和 CGI 脚本相似,servlet 也从 HTTP 参数和 HTML 表单获得客户机数据。在一个特定的应用服务器上,每个 servlet 类的一个单独实例为它的特定 URL 处理所有的 doGet() 和 doPost() 请求。每一个 HTTP 请求都在一个运行该实例的 service() 方法的唯一线程上处理。因为每个 servlet 实例都是共享资源,您不能在 servlet 本身存储客户机会话数据(比如顾客的购物车)。会话数据必须存储在 servlet 之外。

原文地址:https://www.cnblogs.com/Leo_wl/p/1802006.html