不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • python基础

  • python模块

  • django

    • 01_Django基础

      • 01.django介绍
      • 02.环境安装
      • 03.创建django项目
      • 04.路由配置
      • 05.请求与相应
      • 06.类视图
      • 07.中间件
      • 08.cookie
      • 09.session
        • 01.Session
          • 1.1 原理
          • 1.2 Cookie和Session对比
          • 1.3 setting.py配置session
          • 1.4 操作session
        • 02.session登录和注销
          • 2.0 主要功能说明
          • 2.1 views.py
          • 2.2 login.html
          • 2.3 index.html
          • 2.4 settings.py
    • 02_Model数据库操作

    • 03_DRF框架

    • 04_部署

  • flask

  • SYL

  • Celery

  • 微服务

  • python
  • django
  • 01_Django基础
xiaonaiqiang
2021-02-15
目录

09.session

# 01.Session

# 1.1 原理

session操作依赖cookie

  • 1.基于Cookie做用户验证时:敏感信息不适合放在cookie中
  • 2.用户成功登陆后服务端会生成一个随机字符串并将这个字符串作为字典key,将用户登录信息作为value
  • 3.当用户再次登陆时就会带着这个随机字符串过来,就不必再输入用户名和密码了
  • 4.用户使用cookie将这个随机字符串保存到客户端本地,当用户再来时携带这个随机字符串
    • 服务端根据这个随机字符串查找对应的session中的值,这样就避免敏感信息泄露

# 1.2 Cookie和Session对比

  • 1、Cookie是保存在用户浏览器端的键值对

  • 2、Session是保存在服务器端的键值对

# 1.3 setting.py配置session

  • 公用配置
# 1、SESSION_COOKIE_NAME = "sessionid"          # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
# 2、SESSION_COOKIE_PATH = "/"                  # Session的cookie保存的路径(默认)
# 3、SESSION_COOKIE_DOMAIN = None                # Session的cookie保存的域名(默认)
# 4、SESSION_COOKIE_SECURE = False               # 是否Https传输cookie(默认)
# 5、SESSION_COOKIE_HTTPONLY = True              # 是否Session的cookie只支持http传输(默认)
# 6、SESSION_COOKIE_AGE = 1209600                # Session的cookie失效日期(2周)(默认)
# 7、SESSION_EXPIRE_AT_BROWSER_CLOSE = False     # 是否关闭浏览器使得Session过期(默认)
# 8、SESSION_SAVE_EVERY_REQUEST = False          # 是否每次请求都保存Session,默认修改之后才保存(默认)
                                                 # 10s 免登陆时,这里必须配置成True
1
2
3
4
5
6
7
8
9
  • settings.py中配置使用session五种方法
#1 数据库(默认)   #将session数据保存到数据库中
SESSION_ENGINE = 'django.contrib.sessions.backends.db'

#2 缓存             #将session数据保存到缓存中
# 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
# 'default'是下面链接的缓存别名,也可以是另一缓存名'db1'
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': [
            '172.19.26.240:11211',
            '172.19.26.242:11211',
        ]
    },
    'db1': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': [
            '172.19.26.240:11211',
            '172.19.26.242:11211',
        ]
    },
}

#3 文件Session
# 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
# 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T把他当做session目录
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
SESSION_FILE_PATH = os.path.join(BASE_DIR,'cache')          #保存session的文件夹目录

#4 缓存+数据库Session        #默认到缓存中拿session数据,没有再到数据库中取
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'

#5 加密cookie Session        #其实质使用的是cookie,将数据放到了客户端,但是数据经过了加密
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# 1.4 操作session

def index11(request):                #request.session中存放了所有用户信息
    #1 获取   Session中数据
    request.session['k1']
    request.session.get('k1',None)
    
    #2 设置
    request.session['k1'] = 123
    request.session.setdefault('k1',123)    # 存在则不设置
    
    #3 删除
    del request.session['k1']               #删除某个键值对
    #删除某用户登录时在数据库生成的随机字符串的整条数据全部删除
    request.session.delete("session_key")
    
    #4 注销  当用户注销时使用request.session.clear()
    request.session.clear()         #这个短句相当于下面这个长句
    request.session.delete(request.session.session_key)
    
    #5 设置超时时间(默认超时时间两周)
    request.session.set_expiry("value")
    # 如果value是个整数,session会在些秒数后失效。
    # 如果value是个datatime或timedelta,session就会在这个时间后失效。
    # 如果value是0,用户关闭浏览器session就会失效。
    # 如果value是None,session会依赖全局session失效策略。
    
    # 所有 键、值、键值对
    request.session.keys()
    request.session.values()
    request.session.items()
    request.session.iterkeys()
    request.session.itervalues()
    request.session.iteritems()
    
    # 获取某个用户session的随机字符串(不常用)
    request.session.session_key
    
    # 将所有Session失效日期小于当前日期的数据删除(数据库中可以设置超时时间)
    request.session.clear_expired()
    
    # 检查 用户session的随机字符串 在数据库中是否存在(不常用)
    request.session.exists("session_key")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

# 02.session登录和注销

  • session实现用户十秒免登陆,以及注销功能

# 2.0 主要功能说明

  • 1.session默认使用数据库session,使用前必须先执行下面命令
    • python manage.py makemigrations
    • python manage.py migrate
  • 2.settings.py中配置每次用户访问都会推辞更新时间
    • SESSION_SAVE_EVERY_REQUEST = True
  • 3.实现10s免登陆关键步骤
    • 1)设置session : request.session['is_login'] = True
    • 2)设置10s超时: request.session.set_expiry(10)
    • 3)获取session : request.session.get('is_login')

# 2.1 views.py

from django.shortcuts import render,HttpResponse,redirect

def index(request):
    if request.session.get('is_login'):
        return render(request,'index.html',{'username':request.session.get('username')})
    else:
        return HttpResponse('滚')

def login(request):
    if request.method == 'GET':
        return render(request,'login.html')
    elif request.method == 'POST':
        user = request.POST.get('user')
        pwd = request.POST.get('pwd')
        if user == 'tom' and pwd == '123':
            #1 生成随机字符串
            #2 写到用户浏览器cookie
            #3 保存到session中
            #4 在随机字符串对应的字典中设置相关内容
            #5 有等号设置session键值对,没有等号获取键的值

            request.session['username']=user       #1 用户登录成功设置用户名

            request.session['is_login'] = True     #2 登陆成功时可以设置一个标志

            if request.POST.get('rmb') == '1':     #3 当勾选checkbox框后设置10秒超时
                request.session.set_expiry(10)     #4 设置10s后超时,需要重新登录
            return redirect('/index')
        else:
            return render(request,'login.html')

def logout(request):
    request.session.clear()                         #5 访问'/logout/'时注销登陆
    return redirect('/login/')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 2.2 login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/login/" method="POST">
        <input type="text" name="user">
        <input type="text" name="pwd">
        <input type="checkbox" name="rmb" value="1">十秒免登陆
        <input type="submit" value="提交">
    </form>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 2.3 index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>欢饮登陆:{{ username }},{{ request.session.username }}</h1>
    <a href="/logout/">注销</a>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11

# 2.4 settings.py

SESSION_SAVE_EVERY_REQUEST = True
1
上次更新: 2024/3/13 15:35:10
08.cookie
01.配置数据库

← 08.cookie 01.配置数据库→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式