状态保持以及Cookie和session

2020-08-31  本文已影响0人  haoxuan_xia

状态保持

Cookie 是保持在客户端,基于域名(Domain)的

  1. 设置Cookie
def set_cookie(request):
 
    username = request.GET.get('username')
    response = HttpResponse('set_cookie')
    # 通过HttpResponse对象的set_cookie方法来设置cookie
    # max_age单位为秒, 默认是None 如果是临时cookie,可不设置
    response.set_cookie('username', username, max_age=3600)
    return response
  1. 读取Cookie
def get_cookie(request):

    cookie = request.COOKIES
    username = cookie.get('username')
    return HttpResponse('get_cookie:', username)

3.Cookie的请求流程

4.从HTTP协议角度深度掌握Cookie流程

Session是保存在服务器 依赖于Cookie,禁用Cookie则Session无法实现

1.启用Session
Django项目默认启用Session。

image.png
2.存储方式
SESSION_ENGINE='django.contrib.sessions.backends.db'
# 如果存储在数据库中,需要在项INSTALLED_APPS中安装Session应用。
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',  # 安装Session应用
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'book.apps.BookConfig',
]
SESSION_ENGINE='django.contrib.sessions.backends.cache'
SESSION_ENGINE='django.contrib.sessions.backends.cached_db
1) 安装扩展
pip install django-redis
2)配置

在settings.py文件中做如下设置

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'

3.设置Session

def set_session(request):
    # 1.cookie中没有任何信息
    print(request.COOKIES)
    #2.对用户名和密码进行验证
    # 假设认为 用户名和密码正确
    user_id=6666
    #3.设置session信息
    # 设置session的时候其实 session做了2件事
    #第一件: 将数据保存在数据库中
    #第二件: 设置一个cookie信息,这个cookie信息是以sessionid为key
    request.session['user_id']=user_id

    #4. 返回响应
    return HttpResponse('set_session')

4.读取Session信息

def get_session(request):
    # . 请求都会携带 session id信息
    print(request.COOKIES)

    # 2. 会获取到sessionid信息,然后进行验证,
    # 验证成功,可以获取 session信息(
    # request.session 字典
    user_id=request.session['user_id']
    user_id=request.session.get('user_id')
    # 3.返回响应
    return HttpResponse('get_session')

5.Session流程

6.HTTP协议角度深度掌握Session流程
① 第一次请求,在请求头中没有携带任何cookie信息
② 我们在设置session的时候,session会做2件事.
#第一件: 将数据保存在数据库中
#第二件: 设置一个cookie信息,这个cookie信息是以sessionid为key value为 xxxx
③ 第二次及其之后的:都会携带 cookie信息,特别是 sessionid

上一篇下一篇

猜你喜欢

热点阅读