基于cookie做用户验证时:敏感信息不适合放在cookie中

session依赖cookie

session原理

cookie是保存在用户浏览器端的键值对

session是保存在服务器端的键值对

session服务端中存在的数据为:

session = {

   随机字符串1:{

   用户1的相关信息

}

   随机字符串2:{

   用户2的相关信息

}

}

session客户端即客户端的浏览器的cookie中存的数据是当前用户对应的随机字符串

session的工作过程

1、    生成随机字符串

2、    写到用户浏览器的cookie中

3、    保存到session中

4、    在随机字符串对应的字典中设置相关内容

而上述过程在Django中的体现为:

request.session["username"]=user

这里的username为通过request.POST.get("username")从前端html页面中获取到的用户名信息

注意:

在Django中要用session中一定要先执行:

python manage.py makemigrations

python manage.py migrate

当用户登录的时候的就会在数据库的django_session表中记录session信息

同样的通过request.session["username"]也可以获取相应的值

在这个过程中:

1、    首先获取当前用户的随机字符串

2、    根据随机字符串获取对应的内容

session的操作

request.session["k1"]  如果不存在则会报错

request.session.get["k1"],如果不存在则会报错,为了防止出错可以request.session.get('k1',none)

request.session['k1'] = 123 设置session值

request.session.setdefault('k1',123)  存在则不设置

del request.session['k1']  删除

request.session.clear()    删除

所有 键、值、键值对

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")

删除当前用户的所有Session数据

request.session.delete("session_key")

request.session.set_expiry(value)

默认的过期时间是两周,如果自己设置了过期时间,这样自己设定的优先级就会高于默认的

如果value是个整数,session会在些秒数后失效。

如果value是个datatime或timedelta,session就会在这个时间后失效。

如果value是0,用户关闭浏览器session就会失效。

如果value是None,session会依赖全局session失效策略。

配置setting.py

SESSION_COOKIE_NAME = "sessionid"      # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)

SESSION_COOKIE_PATH = "/"              # Session的cookie保存的路径(默认)

SESSION_COOKIE_DOMAIN = None             # Session的cookie保存的域名(默认)

SESSION_COOKIE_SECURE = False          # 是否Https传输cookie(默认)

SESSION_COOKIE_HTTPONLY = True         # 是否Session的cookie只支持http传输(默认)

SESSION_COOKIE_AGE = 1209600             # Session的cookie失效日期(2周)(默认)

SESSION_EXPIRE_AT_BROWSER_CLOSE = False    # 是否关闭浏览器使得Session过期(默认)

SESSION_SAVE_EVERY_REQUEST = False        # 是否每次请求都保存Session,默认修改之后才保存(默认)

Django中对于session的存储方式

Django中支持session,其中内部提供了5种类型的session供开发者使用:

数据库(默认)

缓存

文件

缓存+数据库

加密cookie

1、如果是数据库,需要在settings.py中配置如下:

SESSION_ENGINE = 'django.contrib.sessions.backends.db' (引擎(默认))

2、如果是缓存session,需要在settings.py中配置如下:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'(引擎)

SESSION_CACHE_ALIAS= 'default'  使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

1、    如果是文件session, 需要在settings.py中配置如下:

SESSION_ENGINE = 'django.contrib.sessions.backends.file' (引擎)

SESSION_FILE_PATH=None  缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()

2、    如果是缓存+数据库session,需要在settings.py中配置如下:

SESSION_ENGINE='django.contrib.sessions.backends.cached_db'       (引擎)

django_session的更多相关文章

  1. django使用session报错:no such table: django_session

    Django版本:1.11.15 使用session的代码:request.session['key'] = value 运行后报错:no such table: django_session 解决办 ...

  2. 报错: no such table:django_session解决方式

    如果出现这个错误 “no such table:django_session” 这个错误跟Session的机制有关, 既然要从Web服务器端来记录用户信息, 那么一定要有存放用户session id对 ...

  3. Django中出现no such table: django_session

    这个错误跟Session的机制有关, 既然要从Web服务器端来记录用户信息, 那么一定要有存放用户session id对应信息的地方才行. 所以,我们需要创建django_session表. Djan ...

  4. DatabaseError: no such table: django_session

    最近我也遇到这个问题了,从网上查了下,说是数据库同步出了问题,只需要运行如下命令:python manage.py syncdb就可以了 (这是django1.4之前的命令,1.4之后的是 pytho ...

  5. python16_day17【Django_session、ajax】

    一.Session 1.settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认) SESSION_COOK ...

  6. Django | 解决“(1146, "Table 'mydb.django_session' doesn't exist")”报错的方法

    我只写了下面一行 就生成了session表 manage.py makemigrations sessions manage.py migrate sessions 参考:https://www.cn ...

  7. 解决“(1146, "Table 'mydb.django_session' doesn't exist")”报错的方法

    执行 ./manage.py makemigrations sessions ./manage.py migrate sessions

  8. Django解决(1146, "Table 'd42.django_session' doesn't exist")方法

    执行 ./manage.py makemigrations sessions ./manage.py migrate sessions

  9. Django

    一.Django 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS(内容管理系统) ...

随机推荐

  1. 编译参数-ObjC的说明

    一些第三方库里对系统库的类加了 category , 这时,就需要使用编译参数: -ObjC ,这样第三方库中对系统类作的扩展方法才能在工程中使用. 但是使用 -Objc 后,会产生两个问题: 1 . ...

  2. iOS开发-NSLog不打印设置 Prefix

    首先在-Prefix.pch,文件里添加如下代码 #ifdef DEBUG #define NSLog(...) NSLog(__VA_ARGS__) #define debugMethod() NS ...

  3. [PDOException] SQLSTATE[HY000] [2002] No such file or directory

    编译安装PHP7之后,在安装mysql之后,用pdo操作数据库的时候,出现了此错误[PDOException] SQLSTATE[HY000] [2002] No such file or direc ...

  4. 解压文件夹python

    # _*_ coding: utf-8 _*_ import zipfile import shutil import os print os.getcwd() basedir = os.path.d ...

  5. maven无法下载依赖jar包—几种仓库的区别

    一.问题背景 最近这两天,感觉自己智商急剧退化,到了自己都捉急的地步,呃,有必要记录下来,以后智商被人甩几条街的时候,看看这篇文字,找找灵感也是好的! 这个项目呢,是用IDEA开发的,我一切都弄好了, ...

  6. ora-08104 该索引对象 159639 正在被联机建立或重建

    SSH远程连接数据库创建索引,网络中断后,删除索引信息报ora-08104 解决方法: 使用ONLINE_INDEX_CLEAN清除索引痕迹 在sys用户下执行 SQL> conn /as sy ...

  7. 【Luogu】P3389高斯消元模板(矩阵高斯消元)

    题目链接 高斯消元其实是个大模拟qwq 所以就着代码食用 首先我们读入 ;i<=n;++i) ;j<=n+;++j) scanf("%lf",&s[i][j]) ...

  8. d3 比例尺

    .domain([, ]) 定义域范围 .range([, ]) 值域范围 var scale = d3.scale.linear() .domain([, ]) .range([, ]); 将100 ...

  9. Linux System Programming 学习笔记(七) 线程

    1. Threading is the creation and management of multiple units of execution within a single process 二 ...

  10. 【Visual Studio】error C2220: 警告被视为错误 - 没有生成“object”文件 (转)

    原文转自 http://www.cnblogs.com/kex1n/archive/2011/10/19/2217266.html [错误原因] 该文件的代码页为英文,而我们系统中的代码页为中文. [ ...