1,session是什么?
session经常译为会话,以打电话为例,从开始拨号到挂断电话就是你会话的生存周期。
2,session 做什么用的?
首先举个例子:
咖啡店举行 消费满5杯咖啡赠送一杯的活动,可每个人一次消费5杯的时候非常少。这时候有3种办法:
1,店员看到每个顾客时都能记住其消费了多少杯,从而给其优惠,这是协议本身具有状态
2,给每个顾客一个卡片,上面记录顾客的每次消费,这是客户端保存状态
3,给每个顾客一个卡片,卡片上只有一个编号,顾客每次的消费记录在店里,这就是 服务端有状态
而http本身是无状态的,所以我们只能使用2,3中方法,来保存一些信息。
实际采用的是第3种方法,服务器段保存一次会话所有的信息,并生成一个唯一的id,这个id没有规律而且不会重复,将这个id传回到客户段,保存到cookie中。每次访问服务器时,客户端都会偷偷将这个id传到服务器,服务器根据id查到这次会话保存的内容。就能实现会话中共享一些数据。
3,session怎样创建和销毁 ? how
session是保存在内存中的,所以会有一些性能上的影响。因此本着这个原则,session是只有在使用到的时候才会被创建,如果始终没有用到session,这个session是永远不会被创建的。
比如: 访问servlet ,只要你代码中没有 request.getSession()或request.getSession(true);这两行是等价的,那session是不会创建。又 当你访问静态页面时,根本不会生成servlet,所以也不会创建session。
下面解释一些疑惑: session是第一次请求时创建的?
大家都知道 jsp是被编译成servlet才执行的,问题就在jsp编译的过程。
jsp中有个<%@ page session="true/false"%> 这个开关表示是否创建session,当你不写这行时,它会默认给你加上这句。所以会造成上面的疑惑。当然还有一些标签中可能有getSession()操作,会产生一些不必要的session。
session只能在服务端销毁,有三种途径: 1,到达session的最大请求间隔时间时,2,session。invalidate()
3,服务器进程当掉。
这里也有一些疑惑: 浏览器关闭时,session就会注销。
首先浏览器关闭时,浏览器并没有给服务器发送任何消息,所以服务器不会知道浏览器何时关闭了。
上面我们知道取得session 是因为浏览器cookie中有sessionid,而普通cookie通常会是会话cookie,也就是说浏览器关闭时,这个cookie会被注销,所以当你再访问服务器时就没有sessionid了,所以造成session关闭了的假象,如果昵称通过特殊方法将sessionid传递给服务器,你会发现session还在。
如果想让cookie保存时间长一些,就需要手动指定cookie的过期时间
4,实际项目中的难点:
1,浏览器禁用cookie
这就没办法保存sessionid了,可以采用url重写,转发,加隐藏字段等方法来将sessionid传给服务器。
如: baidu.com:jsessionid=adfasdfasdfasdfasdfafdadf?asdfasdf
baidu.com?jsessionid=asdfasdfasdfadsfad&&adfdf
这根据服务器的不同实现,第一种可以将普通参数区分开。
2,多人共用session的问题
例: a 访问 baidu.com ,但他没有帐号,于是他将连接 baidu.com/login.jsp?jsessionid=adsfasdfad(这个a的sessionid) 发给B, B登录后,a就相当于用b的帐号登录了。你们可以在在本地试试。
解决方法: 当发现通过sessionid从url指定时, 创建一个新的session,将旧session的信息复制到 新sessoin中,然后将新session注销。就能防止上面那种情况了。
3,一个帐号多地方登录
比如: 你用abc帐号登录了baidu.com,有打开了一个浏览器,又用abc帐号登录了一次。当不设计敏感操作时,这无所谓,而当你做一些敏感操作时就必须禁止这样情况,防止同时操作,造成重复操作,或者数据损坏。
解决方法: 监听session,将username和sessionid对应起来,当username再次登录时,注销掉以前的session,保存现在的session,这也是一种比较不错的方案。
分享到:
相关推荐
以下是Session的相关知识点: 1. **依赖关系**:Session通常依赖于Cookie中的jsessionid来标识用户。当服务器找不到客户端的jsessionid或者对应的Session过期或已被销毁,服务器会创建新的Session对象。 2. **创建...
通过对该技术的解释和知识点总结,可以看出 Session 实现购物车是一个复杂的技术,涉及到多个技术点,包括 Hashtable、Session、GridView 和数据库操作。但是,通过正确的实现,可以实现一个功能强大且灵活的购物车...
**JSP实验-购物车(用session实现)** 在Web开发中,购物车是一个常见的功能,它允许用户选择商品并暂时存储,直到他们准备结账。在这个实验中,我们将使用JavaServer Pages (JSP) 技术来创建一个简单的购物车,主要...
### Tomcat7共享Session知识点详解 #### 一、前言 在分布式系统中,随着业务规模的扩大,单个服务器往往难以满足高并发的需求。此时,通常会采用多台服务器来分担请求压力,实现负载均衡。而在这些场景下,保持...
**PHP Session 知识点详解** PHP Session 是一种在服务器端存储用户状态的机制,它允许开发者在用户浏览网站的不同页面之间保持数据。这解决了HTTP协议无状态的问题,因为HTTP请求是独立的,不保留任何关于用户过去...
### JSP管理员登录_session知识点详解 #### 一、概述 在本篇内容中,我们将深入探讨一个关于JSP(JavaServer Pages)中的管理员登录验证功能实现案例,特别关注如何利用`_session`来管理用户的登录状态。通过分析...
### Tomcat集群安装配置_session知识点概述 #### 一、项目背景及环境介绍 根据文档提供的信息,本项目是由西安辉盛科技发展有限责任公司发起的,旨在实现Tomcat集群的搭建,以便于支持高并发访问场景下的应用服务...
相关知识点: * 跨域和 Session 失效问题的定义和原因 * IE 浏览器的 P3P 协议和隐私安全机制 * ASP.NET 中 Session 的工作机制 * 使用 HttpContext.Current.Session 来避免 Session 失效问题 * 添加“P3P”协议来...
**PHP的Session基础** 在Web开发中,PHP的Session机制是一种非常重要的用户状态...在实际项目中,还需考虑Session的存储方式(默认为文件系统,也可以配置为数据库)、Session超时设置以及防止Session劫持的安全措施。
Session是Web应用程序中用于跟踪用户状态的一种技术。它在服务器端创建并存储用户会话的信息,确保用户在浏览网站期间的交互数据得以保留,即使页面重载或跳转。Session的引入主要是为了解决Cookie中数据安全性的...
下面将详细解释`SpringSession`和`Redis`在实现Session共享中的关键知识点。 1. **SpringSession**: - `SpringSession` 是Spring生态系统的一个扩展,它允许我们将HTTP Session数据存储在外部存储(如Redis)中,...
【PHP Session 知识详解】 在PHP中,Session是一种用于保存用户状态的机制,它允许在用户的不同页面请求之间共享数据。在今天的笔记中,我们将深入探讨Session的多个方面,包括其工作原理、配置选项以及如何自定义...
实验"session实验"可能涵盖了以下几个关键知识点: 1. **Session的创建与销毁**:实验可能涉及到如何在服务器端创建一个新的Session,以及在用户登出或会话超时时如何销毁Session。通常,开发者会设置一个会话超时...
下面是关于Springboot实现多服务器session共享的详细知识点: Session共享的原理 在正常情况下,HTTPSession是通过servlet容器创建并管理的,创建成功后都保存在内存中。如果开发者需要对项目进行横向拓展搭建...
本实验旨在利用已学习的Session知识和购物车的基本访问流程,模拟实现一个简单的购物车系统,无需借助数据库存储,而是将数据暂存于Session中。以下是实现该功能的具体步骤和相关知识点。 首先,我们需要了解**...
#### 知识点一:Session的概念与作用 Session是一种服务器端技术,用于在用户的会话期间存储用户特定的信息。当用户访问网站时,服务器可能会为该用户创建一个Session对象来存储关于该用户的信息,如登录状态、...
本文详细介绍了 Session 在 Web 开发中的作用、Tomcat 中 Session 的管理方式、Session 的持久化机制以及如何计算用户交互间隔等知识点。通过理解这些内容,开发者可以更好地管理和优化 Web 应用中的 Session 行为,...
下面将详细介绍Session的相关知识点。 #### 一、Session概念 1. **HTTP协议的特点**:HTTP协议是无状态的,即每次客户端发起的请求都是独立的,服务器不会保存任何关于之前请求的信息。为了克服这一限制,引入了...
知识点八:ORACLE read by other session 等待事件 * 是指一个会话请求的缓冲区当前正在被另一个会话读取到缓冲区缓存中 * 在 ORACLE 10.1 版本之前,这个事件被归类到 "buffer busy wait" 事件下
【知识点详解】: 1. **Tomcat集群**:Tomcat是Apache软件基金会的Java Servlet和JavaServer Pages(JSP)容器,常用于构建Web应用程序。在集群模式下,多台Tomcat服务器可以协同工作,提供更高的可用性和可伸缩性...