关于http连接的本质 已经cookies和session

网络上的任何交互都是基于socket连接

http  连接响应 close  再次连接 无法确实是否还是xx的连接——无状态,短连接

以博客园举例 无状态和短连接:

for example:

    

Web应用(网站):

浏览器(socket客户端)运行

2.发送请求

博客园为例子 socket服务端)

  1. 监听自己的ip和端口    { cmdPing+网址可在终端拿到(ip)  }

While Ture

3.收到 请求

4.响应

用户断开

#################################################

关于cookies和session的总结(ps:不是很全)

1. http协议的无状态性:

使用cookie:
第一次向服务器发起请求,服务器返回一个cookie给客户端,
客户端存储cookie,当客户端再次发起请求时携带cookie信息给服务器,
服务器接收到cookie信息能够获取用户信息

不使用cookie:
第一次向服务器发起请求,服务器返回一个响应给客户端
第二次再次向服务器发起请求,服务器仍然不知道是哪一个用户发起的请求

2. 使用cookie可以弥补这种http请求的无状态性

1. 客户端发起请求(包含用户信息),服务器接收到请求,验证用户信息,同时返回响应给客户端(携带cookie)

2. 客户端接收响应(存储cookie)

3. 客户端再次发起请求就会携带cookie信息,服务器就能知道是哪个用户发起的请求了

【注意】:
1. cookie不能跨域传递
2. 使用cookie存储数据的容量是有限的, 不能使用cookie存储大量文本信息。
一般来说用cookie存储用户名, sessionid
不同的浏览器, cookie容量不同,最大不会超过4kb


3. 在django中操作cookie

1. 设置cookie

p = HttpResponse()
p.set_cookie(key, value) # 默认过期时间: 浏览器关闭时,不是标签页关闭
p.set_cookie(key, value, max_age=60) # 单位是秒, 设置过期时间

from django.utils.timezone import make_aware

带时区的时间日期对象 = make_aware(时间日期对象)
p.set_cookie(key, value, expires=时间日期对象(带时区))

* 如果同时设置了max_age和expires, 则使用expires的过期时间

2. 删除cookie

p = HttpResponse()
p.delete_cookie('name')

3. 获取cookie

request.COOKIES.get('name')
POST
GET
FILES

PS:(
cookie是保存在客户端的(浏览器)
cookie在客户端中分域名保存
发起请求时客户端自动将当前域名(路劲)下未过期的cookie携带上

4. session

1. 基于cookie实现

2. 过程:

1. 客户端发起请求(用户信息), 服务器接收到请求,
验证通过, 将用户信息加密后存储到session表中,对应着随机生成的session_id

2. 服务器返回响应, 携带cookie, cookie中存储的是session_id

3. 客户端接收到响应, 存储cookie信息到本地浏览器中

4. 客户端再次发起请求, 携带cookie信息(session_id),
服务器接收到请求后,通过session_id就能获取用户信息


注意: cookie存储在客户端(浏览器)
session存储在服务器

5. 在django中操作session

1. 存储:

request.session['key'] = 'value'

同一个用户,创建多个session键值对,在django_session表中只存储为一条session数据;
session表中的session_key是固定的。

2. 获取:

request.session[]
request.session.get()
request.session.items()
request.session.keys()
request.session.values()

3. 删除:

request.session.pop('key')

4. 清除数据:

request.session.clear() # 清除当前用户存储的session键值对,session表中的session数据还在
cookie中仍然有session_id的值

request.session.flush() # 注销;退出登录;
在session表中删除当前用户的整条session数据,
cookie中的session_id也被删除了

* 同一个客户端的同一个用户也可能会产生多条session表中的数据,因为之前的数据都过期了

5. 删除过期的session

1. 代码 request.session.clear_expired()

2. 命令行 python manage.py clearsessions

6. 设置过期时间

request.session.set_expiry()

1. 整型参数: 秒
2. 0:浏览器关闭
3. None:默认的过期时间,2周

settings.py

TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False

猜你喜欢

转载自www.cnblogs.com/pythonyeyu/p/10393677.html