cookie和session的简介,session工作原理
目录
一,cookie和session的简介
Cookie 和 Session 是在 Web 开发里用于管理用户会话的重要机制,以下是对它们的详细介绍:
1. Cookie
Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据。它会在客户端和服务器之间随 HTTP 请求和响应来回传递,可用于存储用户的一些信息。
特点
- 客户端存储:
Cookie数据存于客户端浏览器,所以可以在浏览器下次向同一服务器发送请求时携带这些数据。 - 有大小限制:一般来说,每个
Cookie的大小限制在 4KB 左右。 - 可设置过期时间:能设置
Cookie的过期时间,过期后Cookie会自动被浏览器删除。 - 安全性较低:因为
Cookie存储在客户端,容易被篡改或窃取,所以不适合存储敏感信息。
示例代码
以下是使用 Python 的 Flask 框架设置和获取 Cookie 的示例:
python
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/set_cookie')
def set_cookie():
resp = make_response('Setting cookie!')
resp.set_cookie('username', 'JohnDoe')
return resp
@app.route('/get_cookie')
def get_cookie():
username = request.cookies.get('username')
return f'Username from cookie: {username}'
if __name__ == '__main__':
app.run(debug=True)
2. Session
Session 是一种服务器端的会话机制,用于跟踪用户的会话状态。服务器会为每个用户创建一个唯一的 Session ID,并将其发送给客户端,客户端通过 Cookie 或 URL 参数来保存这个 Session ID。
特点
- 服务器端存储:
Session数据存于服务器端,相对安全。 - 无大小限制:服务器端存储数据不受
Cookie大小的限制。 - 依赖
Session ID:客户端通过Session ID来访问服务器端的Session数据。 - 可设置过期时间:同样可以设置
Session的过期时间,过期后Session数据会被服务器删除。
示例代码
以下是使用 Python 的 Flask 框架设置和获取 Session 的示例:
python
from flask import Flask, session, redirect, url_for
app = Flask(__name__)
app.secret_key = 'your_secret_key'
@app.route('/set_session')
def set_session():
session['username'] = 'JohnDoe'
return 'Session set!'
@app.route('/get_session')
def get_session():
username = session.get('username')
if username:
return f'Username from session: {username}'
else:
return 'Session not set!'
@app.route('/delete_session')
def delete_session():
session.pop('username', None)
return 'Session deleted!'
if __name__ == '__main__':
app.run(debug=True)
3. Cookie 和 Session 的比较
- 安全性:
Session存于服务器端,安全性更高;而Cookie存于客户端,容易被篡改或窃取。 - 数据存储位置:
Cookie存于客户端,Session存于服务器端。 - 数据大小限制:
Cookie有大小限制,而Session没有。 - 性能:
Session需要服务器端的额外开销,性能相对较低;Cookie由于是客户端存储,性能较高。
在实际开发中,通常会结合使用 Cookie 和 Session,用 Cookie 来存储 Session ID,用 Session 来存储用户的敏感信息和会话状态。
二,session的工作原理
Session 作为服务器端的会话管理机制,其工作原理主要涉及以下几个关键步骤:
1. 客户端发起请求
当用户首次访问网站时,浏览器会向服务器发送一个 HTTP 请求。这个请求可能是访问首页、登录页面或者其他资源。在这个阶段,客户端并没有携带 Session ID,因为还没有建立 Session。
2. 服务器创建 Session
- 服务器接收到客户端的请求后,会检查请求中是否包含
Session ID。由于是首次请求,此时请求中没有Session ID。 - 服务器会为该客户端创建一个新的
Session对象,这个对象会在服务器端存储与该用户会话相关的数据,例如用户的登录状态、购物车信息等。 - 服务器会为这个
Session分配一个唯一的Session ID,这个Session ID通常是一个长字符串,用于标识该Session。
3. 服务器发送 Session ID 给客户端
- 服务器会在响应头中添加一个
Set-Cookie字段,将Session ID作为Cookie发送给客户端。例如:
plaintext
Set-Cookie: session_id=abcdef123456; Path=/; HttpOnly
- 这里的
session_id就是服务器为客户端分配的Session ID,Path=/表示该Cookie适用于整个网站,HttpOnly表示该Cookie只能通过 HTTP 请求访问,不能通过 JavaScript 脚本访问,这样可以提高安全性,防止Session ID被窃取。
4. 客户端保存 Session ID
- 浏览器接收到服务器的响应后,会将
Session ID作为Cookie保存在本地。之后,在后续的每个 HTTP 请求中,浏览器都会自动在请求头中添加这个Cookie,将Session ID发送给服务器。例如:
plaintext
Cookie: session_id=abcdef123456
5. 服务器验证 Session ID
- 服务器接收到客户端的请求后,会从请求头中提取
Session ID。 - 服务器会根据这个
Session ID在服务器端查找对应的Session对象。如果找到对应的Session对象,说明该客户端已经建立了Session,服务器可以根据Session中存储的数据来处理请求。
6. 服务器更新 Session 数据
- 在处理客户端请求的过程中,服务器可能会更新
Session中的数据。例如,用户登录成功后,服务器会将用户的登录状态存储在Session中。 - 服务器会将更新后的
Session数据保存到服务器端。
7. Session 过期处理
- 为了节省服务器资源,
Session通常会设置一个过期时间。如果在一定时间内客户端没有向服务器发送请求,Session会自动过期。 - 当
Session过期后,服务器会删除该Session对象及其相关数据。客户端再次发送请求时,服务器会将其视为新的会话,重新创建Session。
示例代码
以下是一个使用 Python 的 Flask 框架的示例,展示了 Session 的工作原理:
python
from flask import Flask, session, request
app = Flask(__name__)
app.secret_key = 'your_secret_key'
@app.route('/')
def index():
# 检查 Session 中是否有用户信息
if 'user' in session:
return f'Welcome back, {session["user"]}!'
else:
return 'You are not logged in.'
@app.route('/login')
def login():
# 模拟用户登录
session['user'] = 'JohnDoe'
return 'You have logged in.'
@app.route('/logout')
def logout():
# 模拟用户退出登录
session.pop('user', None)
return 'You have logged out.'
if __name__ == '__main__':
app.run(debug=True)
在这个示例中,当用户访问 /login 路径时,服务器会将用户信息存储在 Session 中;当用户访问 /logout 路径时,服务器会从 Session 中删除用户信息;当用户访问首页时,服务器会检查 Session 中是否有用户信息,并根据检查结果返回相应的信息。
更多推荐

所有评论(0)