• 关于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

  • 相关阅读:
    php 网络图片转base64
    uniapp微信小程序拒绝授权后,重新调起授权页
    uniapp获取用户信息 getuserinfo
    基于JSP和Mybatis框架技术的应用总结
    Java第16周作业集
    Java第15周作业集
    Java第14周作业集
    Java第13周作业集
    软件工程结课作业
    Java第13次作业--邮箱的正则表达式
  • 原文地址:https://www.cnblogs.com/pythonyeyu/p/10393677.html
Copyright © 2020-2023  润新知