Cookies :是浏览器为 Web 服务器存储的一小段信息。 每次浏览器从某个服务器请求页面时,它收到服务器回发送过来的cookies。它保存在浏览器下的某个文件夹下。

Session:Django的Session机制会向请求的浏览器发送cookie字符串。同时也会保存到本地一份,用来验证浏览器登录是否为同一用户。它存在于服务器,Django默认会把session存入到数据库中。

Session依赖于Cookie,如果浏览器不能保存cookies那么session就失效了。因为它需要浏览器的cookie值(sessionid)去session里做对比。session就是用来在服务器端保存用户的会话状态。

Cookie

1、获取Cookie:

request.COOKIES[key]

request.COOKIES.get(key)

# 普通cookie是明文传输的,可以直接在客户端直接打开,所以需要加盐,解盐之后才能查看

request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)

参数:

default: 默认值

salt: 加密盐

max_age: 后台控制过期时间

2、设置Cookie:

rep = HttpResponse(...) 或 rep = render(request, ...)

rep.set_cookie(key,value,...)

# 给cookie签名

rep.set_signed_cookie(key,value,salt='加密盐',...)

参数:

key, 键

value='', 值

max_age=None, 超时时间

expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)

path='/', Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问

domain=None, Cookie生效的域名

secure=False, https传输

httponly=False True只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖),防止xss攻击

由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。

$.cookie("list_pager_num", 30,{ path: '/' });

Session

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

数据库(默认)

缓存

文件

缓存+数据库

加密cookie

1、数据库Session

Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。

a. 配置 settings.py

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

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,默认修改之后才保存(默认)

b. 使用

def index(request):

# 获取、设置、删除Session中数据

request.session['k1']

request.session.get('k1',None)

request.session['k1'] = 123

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

del request.session['k1']

# 所有 键、值、键值对

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

2、缓存Session

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎

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

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,默认修改之后才保存

b. 使用

同上

3、文件Session

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎

SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T

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,默认修改之后才保存

b. 使用

同上

4、缓存+数据库Session

数据库用于做持久化,缓存用于提高效率

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎

b. 使用

同上

5、加密cookie Session

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎

b. 使用

同上

示例:

from django.shortcuts import render,redirect

# Create your views here.

import datetime

def login(request):

print("COOKIES",request.COOKIES) #打印cookies 一个字典,里面多个键值对

print("SESSION",request.session) #session为服务器对应客户信息的键

if request.method=="POST":

name=request.POST.get("user")

pwd=request.POST.get("pwd")

if name=="yuan" and pwd=="123":

# ret=redirect("/index/")

# 给对象ret设置cookie 安全性较差 ,设定有效时间max_age,expires,

# ret.set_cookie("username",{"11":"22"},max_age=10,expires=datetime.datetime.utcnow()+datetime.timedelta(days=3))

# return ret

# COOKIE SESSION一起使用

# session 以字典存放在服务器端,发给客户端的是数据对应的键,

request.session["is_login"]=True # 在session中增加键值对

request.session["user"]=name

return redirect("/index/")

return render(request,"login.html")

def index(request):

if request.COOKIES.get("username",None): # 取不到设置默认值为None

name = request.COOKIES.get("username",None)

return render(request, "index.html", locals())

# session验证 存在数据库中,所以要先makemigrations生成数据库

if request.session.get("is_login",None):

name=request.session.get("user",None)

return render(request,"index.html",locals())

else:

return redirect("/login/")

##session获取

request.session.get("user",None)

# 设置

request.session["user"]=name

# 删除

del request.session.get("user")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: django进阶之cookie和session的使用示例

本文地址: http://www.cppcns.com/jiaoben/python/237371.html

python如何使用session和cookie_django进阶之cookie和session的使用示例相关推荐

  1. python socket编程:实现redirect函数、cookie和session

    在Flask框架中有一个redirect函数,用于实现页面的跳转,现在我们来实现它.原理就是:当浏览器接受到服务器响应的状态码是301或者302时,表示请求的页面已经永久或临时性转移到了新的位置,而这 ...

  2. php跨域session共享,PHP中利用COOKIE与SESSION联合实现SESSION跨域

    大家都知道 在一般情况下,一个网站只有一个域名,www.demo.com,但是也有些网站架构是由多个子域名组建的.所以就需要SESSION可以跨子域被 访问到,这样才可以实现用户的跨域登录.就是说客户 ...

  3. (重温)JavaWeb--Cookie 和 Session入门总结(了解cookie和session这一篇就够了)

    1.Cookie 饼干 a)什么是 Cookie? Cookie 翻译过来是饼干的意思. Cookie 是服务器通知客户端保存键值对的一种技术. 客户端有了 Cookie 后,每次请求都发送给服务器. ...

  4. 90%的程序员都没有完全回答对 Cookie 和 Session 的区别?

    我在做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Session?两者的区别等. ...

  5. cookie和session 以及Django中应用

    cookie和session 以及Django中应用 cookie和session机制 cookie和session机制 cookie机制采用的是在客户端保持状态的方案.作用就是为了解决HTTP协议无 ...

  6. Java Web基础面试问题——Cookie和Session

    Java Web基础面试问题 Cookie 和 Session 的区别 什么是HTTP 超文本传输协议,是一种用于分布式.协作式和超媒体信息系统的应用层协议. 设计HTTP最初的目的是为了提供一种发布 ...

  7. 你真的了解 Cookie 和 Session 吗?

    我在做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Session?两者的区别等. ...

  8. Django:Admin,Cookie,Session

    一. Admin的配置 1.Admin基础设置 admin是django强大功能之一,它能够从数据库中读取数据,呈现在页面中,进行管理.默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经 ...

  9. cookie和session常见问题

    1.cookie和session原理及区别 cookie采用的是客户端的会话状态的一种储存机制.session是一种服务器端的信息管理机制,它把这些文件信息以文件的形式存放在服务器的硬盘空间上 (这是 ...

最新文章

  1. 四大组件之 Activity_任务和返回栈
  2. 我们:待别日相见时,我们都已有所成。挥手向2021告别吧,追求梦想的路上,永远不孤独「2021 年终总结 」
  3. 启明云端分享|ESP32在开发环境时,环境搭建及应用、软件平台时常遇到的问题答疑(FAQ)
  4. Package name must have at least two identifiers 解决办法
  5. 移动端视频缓存保障与CDN调度优化
  6. mysql-gui怎么执行_MySQL 执行大量语句时的正确姿势? mysql *.sql ? 使用 GUI?
  7. PHP优于Node.js的五大理由
  8. RelativeLayout重要属性
  9. RuntimeError: Expected object of device type cuda but got device type cpu for argument #2 'target'
  10. oracle clusterware 11g,Oracle11gR2clusterware启动顺序
  11. linux双系统uefi引导修复,Windows和Ubuntu双系统,修复UEFI引导的两种办法
  12. Java多线程学习十一:你知道哪几种锁?各有什么特点
  13. Discuz常见小问题-如何为每个板块设置不同的图标
  14. 1414 冰雕(思维+暴力)
  15. python DEA: 非径向距离函数(non-radial directional distance function)
  16. 沟通:如何用沟通解决80%的工作问题?
  17. 智能循迹避障小车C语言程序编写思路,基于单片机的智能小车避障循迹系统设计...
  18. 键盘查询方式的c语言编程,求助大佬简单的单片机键盘c语言编程问题
  19. 【华为Atlas人工智能计算平台概述】
  20. html5页面生成动态二维码

热门文章

  1. Python【每日一问】21
  2. Linux学习之CentOS(三十六)--FTP服务原理及vsfptd的安装、配置
  3. Cmd使用方式--命令行运行程序
  4. jquery源码 DOM加载
  5. 洛谷P1119 灾后重建[Floyd]
  6. java基本输入类型数据System.out.println()或System.out.print()
  7. 移动端字体单位该使用px还是rem?
  8. 程序的又一次测量学实际应用(程序对全站仪测量学导出数据文件的读取与修改)...
  9. ———— javascript中数组常用方法总结 ————
  10. .NET中读取csv文件内容