常用会话技术cookie&session

本文深入解析HTTP协议的无状态特性,对比分析cookie和session两种会话技术,详细阐述它们的优缺点及适用场景,帮助读者理解如何在Web开发中合理选择会话管理方案。

1.Http:
http协议是一种无状态协议,下一次请求无法获得上次请求中数据,因为一次请求完成后,这个请求中数据就销毁了.如果在项目中我们需要多次请求中数据共享就得用会话技术.

2.会话:
当打开一个浏览器访问服务器端的网站,发送多次请求,到浏览器关闭这个过程就是一次会话.常用会话技术有两种cookie和session.

3.Cookie(依赖浏览器):
通过浏览器将用户数据存在客户端的会话技术.cookie按key-value方式来存值的.如果cookie没有设置有效期,cookie中数据是存在客户端的内存中.如果cookie设置了有效期,cookie中数据就存在客户端的硬盘上.
注意:cookie必须依赖浏览器,然后大部分浏览器不支持离线版cookie,但是所有浏览器都支持在线版cookie;每个浏览器最多只能存300个cookie,浏览器针对每个网站最多能存20个cookie,每个cookie最大只能4kb.
3.1:优点:减轻服务器端的压力;用户第二次加载数据时效率高;可长久存数据;
缺点:数据不安全;cookie存数据的长度有限制;
3.2:适用场景:存储一些跨请求的不重要的用户数据用cookie.
eg:购物车,历史记录
3.3:常用方法:
3.3.1:创建cookie对象存数据:
Cookie ob=new Cookie(String name, String value);
3.3.2:将cookie对象通过浏览器存在客户端:
response.addCookie(Cookie cookie);
3.3.3:得到客户端的所有cookie信息.
request.getCookies();
3.3.4:设置cookie有效期,以秒为单位:
cookie对象.setMaxAge(int expiry);
注意:如果cookie的有效期设置为0或负数,表示cookie失效,相当于删除了当前cookie.
3.3.5:修改cookie对象中value值:
cookie对象.setValue(String newValue)
3.3.6:获得cookie对象中键名:cookie对象.getName()
3.3.7:获得cookie对象中value值:cookie对象.getValue()

4.Session:将用户的数据存在服务器端的内存中会话技术.按key-value对方式存值.
session的存值原理:
当浏览器第一次访问服务器的网站时,服务器会根据当前的浏览器在服务器端的内存中开辟一个空间专门用来存与当前这个浏览器会话的数据,并且生成一个sessionId,将sessionId存在当前浏览器的cookie中.当浏览器第二个访问服务器的网站时,服务器检查到浏览器中sessionId,会根据这个sessionId找到服务端对应内存空间来存值和取值.
4.1:优点:数据安全;存数据无长度限制.
缺点:服务器压力大;用户加载数据效率较低;session不能长久存数据.
4.2:适用场景:存储跨请求的一些重要数据用session.
eg:密码等.
4.3:常用方法:
4.3.1:按key-value方式将值存在session中:
session.setAttribute(String name, Object value);
4.3.2:按Key取出session中value值:
session.getAttribute(String name);
4.3.3:按Key删除session中key-value对:
session.removeAttribute(String name)
4.3.4:获得sessionId:session.getId();
4.3.5:获得上下文对象: session.getServletContext()
4.3.6:设置session有效期:
第一种设置session有效期,单位是秒:
session.setMaxInactiveInterval(int interval);
第二种设置session有效期,单位是分种,在web.xml中设置:

  <session-config>
  	<session-timeout>1</session-timeout>
  </session-config>
会话技术Web开发中用于跟踪用户状态的重要手段,其中cookie和session是两种常见的会话技术。它们的主要区别在于数据的存储位置和处理方式。 ### Cookie Cookie是一种由服务器发送给客户端(通常是浏览器)的数据片段,客户端会将这些数据存储在本地,并在后续的请求中将其发送回服务器。 1. **存储位置**:客户端(浏览器)。 2. **生命周期**:可以设置过期时间,如果没有设置,则在浏览器关闭时失效。 3. **安全性**:数据存储在客户端,存在被篡改的风险。可以设置HttpOnly和Secure属性来增强安全性。 4. **容量限制**:每个域名下的cookie数量和大小有限制(通常不超过4KB)。 ### Session Session是一种服务器端的技术,用于在服务器上存储用户的状态信息。服务器会为每个用户创建一个唯一的会话ID,并通过cookie或URL重写将该ID发送给客户端。 1. **存储位置**:服务器端。 2. **生命周期**:默认情况下,session在浏览器关闭时失效,但可以通过设置超时时间来延长。 3. **安全性**:数据存储在服务器端,相对更安全。 4. **容量限制**:服务器端的存储容量通常较大,但受限于服务器配置。 ### 应用场景 - **Cookie**:用于存储一些不敏感的信息,如用户的偏好设置、登录状态等。 - **Session**:用于存储敏感信息,如用户的登录凭证、购物车内容等。 ### 示例 ```javascript // 设置cookie document.cookie = "username=John Doe; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/"; // 获取cookie function getCookie(name) { let value = "; " + document.cookie; let parts = value.split("; " + name + "="); if (parts.length === 2) return parts.pop().split(";").shift(); } // 使用session // 假设使用Node.js和Express框架 const express = require('express'); const session = require('express-session'); const app = express(); app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: true })); app.get('/login', (req, res) => { req.session.user = { name: 'John Doe' }; res.send('Logged in'); }); app.get('/dashboard', (req, res) => { if (req.session.user) { res.send('Welcome, ' + req.session.user.name); } else { res.send('Please login'); } }); app.listen(3000, () => { console.log('Server is running on port 3000'); }); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值