http协议里面session的管理

Problem

http 协议是无状态的,每个GET 请求,都会进行以下三步:

1.打开一个与web 服务器的连接

2.下载相关数据

3.关闭 连接

对于一个嵌套图片或frame 这样的的多文档组成的页面来说,这些操作是相当耗时的,嵌套的每个页面和页面上的图片都要与服务器进行一次单独请求.

HTTP 1.1

http1.1 将试图解决以下条件下产生的问题:

1.一个连接一直保持打开状态

2.同一浏览器的请求可能只用一个连接

3.一个连接将自动关闭,如果一段时间不处于活动状态

4.同样的一个请求可能被多个页面重复发送

5.Session 管理的问题不能解决

Session management

应用程序状态维持

分布式应用程序的每个分布组件将维持一个状态

web 应用程序期望的的状态

典型的web 应用,比如购物车,服务器端,很希望有张可以维持到支付时用的物品清单

web 对持久状态支持的几乎疲乏

Stateful server(持久状态的服务器)

在一个 c/s 的应用中,服务器端状态的信息

Stateless server(无状态服务器)

在一个 c/s 的应用中,服务器端状态的信息

Static Web documents(静态web文档)

两边都不需要维持状态.http1.0 就是这样设计的

CGI Applications

CGI 应用程序运行时状态是随HTTP session 的变化

CGI应用程序的生命周期是随http session 的周期

Web Applications

状态的维持要通过CGI 应用

浏览器要维护一个状态信息

浏览器不能保存服务器的所有状态信息,他只保存或者 发送一个值给服务器

浏览器保存或者发送个服务器的值不能太敏感,不能是认证信息或认证数字 

State information(状态信息)

浏览器可以将状态信息保存到:

Cookies

Hidden form fields

URL rewriting

Challenge/response

未完...

来自:http://jan.netcomp.monash.edu.au/ecommerce/session.html

<think>好的,我现在需要回答用户关于sessionid在Web开发中的作用及实现方式的问题。首先,我得回忆一下session和cookie的相关知识,确保自己理解正确。根据用户提供的引用资料,特别是引用[4],里面提到session是服务端的内存区域,每个session有唯一的sessionid,通过cookie返回给前端。每次请求时浏览器自动携带cookie中的sessionid,服务端根据这个id找到对应的session对象。 接下来,我要整理sessionid的主要作用。首先,用户身份识别是关键,每个用户登录后服务端生成唯一的sessionid,用来标识不同的用户。然后是状态保持,HTTP是无状态的,通过sessionid可以在多次请求中维持用户状态,比如保持登录状态。另外,引用[3]提到Spring-Session通过Filter和HttpServletRequestWrapper来管理session,这说明实现方式可能涉及拦截请求和自定义session管理。 在实现方式方面,服务端生成sessionid通常在用户第一次访问时创建,比如登录成功后。生成算法可能有UUID或者安全随机数,确保唯一性。存储位置方面,引用[3]和[4]指出session存在服务器的内存中,不过分布式系统可能需要集中存储如Redis。客户端存储则是通过cookie,设置Set-Cookie头部,之后浏览器自动发送sessionid。服务端验证部分,每次请求解析cookie获取sessionid,然后查找对应的session数据,如果无效或过期则要求重新登录。 还需要考虑安全性,比如防止session劫持,使用HTTPS、设置HttpOnly和Secure属性。另外,引用[5]提到开发时要注意session的有效期管理和存储大小,避免内存泄漏。可能用户还会关心session和cookie的区别,但问题主要围绕sessionid,所以可以简要提到它们的联系,如session依赖cookie传递sessionid。 最后,根据用户的要求生成相关问题,比如sessionid的安全性问题、分布式系统中的处理、与cookie的关系等。确保引用正确,比如引用[4]解释sessionid的生成和传递,引用[3]说明服务端管理session的方式。回答要结构清晰,分点说明,同时保持自然的中文表达,不使用Markdown格式。</think>### SessionID在Web开发中的作用及实现方式 #### 一、SessionID的核心作用 1. **用户身份识别** 服务端为每个会话分配唯一的$sessionID$,用于标识不同用户的会话状态。例如,用户登录后,服务端生成$sessionID$并将其绑定到用户数据[^4]。 2. **状态保持** HTTP协议本身无状态,通过$sessionID$可在多次请求中关联用户数据。例如,购物车内容、登录状态等均依赖$sessionID$维持。 3. **安全控制** $sessionID$可结合加密算法(如HMAC)验证请求合法性,防止伪造会话[^3]。 --- #### 二、实现方式详解 1. **服务端生成与存储** - **生成时机**:用户首次访问或登录时创建$sessionID$,例如: $$ sessionID = \text{安全随机算法(如UUID)} $$ - **存储位置**:服务端内存(如Tomcat)、数据库或Redis等集中存储(分布式场景)[^3]。 2. **客户端存储** - **Cookie传递**:服务端通过`Set-Cookie`头部将$sessionID$写入浏览器: ```http Set-Cookie: JSESSIONID=abc123; Path=/; HttpOnly; Secure ``` - **URL重写**:若浏览器禁用Cookie,可将$sessionID$嵌入URL(如`/page;jsessionid=abc123`)[^2]。 3. **服务端验证** - 每次请求解析Cookie或URL中的$sessionID$。 - 根据$sessionID$查找对应的会话数据,若失效则要求重新认证[^4]。 --- #### 三、关键技术与安全性 1. **Session劫持防护** - 使用HTTPS加密传输,防止$sessionID$被窃听。 - 设置Cookie属性:`HttpOnly`(阻止JS访问)、`Secure`(仅HTTPS传输)。 2. **分布式Session管理** - 通过Redis或Spring-Session实现跨服务会话共享。 - 设计Filter拦截请求,自定义Session存储逻辑(如引用[3]中的`HttpServletRequestWrapper`)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值