Django--Cookie与Session

Cookie 

Cookie,有时也用其复数形式 Cookies. 指的是由服务端生成,保存在客户端的一种数据存储形式,内部以 key-value 键值对形式存储. value大小有限制(最大为4kb). 数据不安全.
Cookie 是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将 Cookie 的 key/value 保存到某个目录下的文本文件内,下次请求同一网站时就发送该 Cookie 给服务器(前提是浏览器设置为启用 cookie )。
Cookie 名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等。
服务器可以利用 Cookies 包含信息的任意性来筛选并经常性维护这些信息,以判断在 HTTP 传输中的状态。
Cookies 最典型记住用户名。建议:Cookie 是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用
  • Cookie 以键值对 Key-Value 形式进行信息的存储

  • Cookie 基于域名安全,不同域名的 Cookie 是不能互相访问的

例如:

保存在 www.baidu.com 域名下面的 cookie 不能够被其他域名的访问

可以通过 HttpResponse 对象中的 set_cookie 方法来设置 cookie。

# 使用方法: 

 创建 response 对象
response = HttpResponse()

 调用对象的 set_cookie() 函数
response.set_cookie(key,value,max_age)
参数解析:

key: cookie 中保存信息的名称

value: cookie 中保存信息时,名称对应的值部分

max_age: cookie 中保存信息的有效期,超过有效期,key-value 失效

​其中 max_age 单位为秒,默认为 None. 如果设置 None 值,则关闭浏览器失效.

例如:

response.set_cookie('tracydzf','python读取 Cookie

可以通过 HttpRequest 对象( request )的 COOKIES 属性来读取本次请求携带的 cookie 值。

 使用方法: 
# 其中: request.COOKIES 为字典类型

value = request.COOKIES.get(key')

request.COOKIES 为字典类型,可以使用字典的 get( )

例如:

value = request.COOKIES.get(itcast')     python

Session

Session 了解

Session 是一种会话控制方式. 由服务端创建,并且保存在服务端的数据存储形式. 内部以 key/value 键值对的形式存储. 可以存储敏感信息,内容有些会被加密. 一般生成 session 后,我们会把 sessionid 传递给 cookie 保存.
Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。 当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户信息。

Session 的作用

  • 在服务器上保存用户状态信息,以供前端页面访问
  • 因为数据保存在服务器端,所以可以保存敏感信息. 每次前端发送请求,可以随时获取对应的信息. 保持会话状态

Session 的特点

  • 依赖 cookies
  • 存储敏感、重要的信息
  • 支持更多字节
  • Session 共享问题

启用 Session

Django 项目默认启用 Session

可以在 settings.py 文件中查看,如图所示

 

 如需禁用 session,将上图中的 session 中间件注释掉即可。

Redis

在 redis 中保存 session,需要引入第三方扩展,我们可以使用 django-redis 来解决。

1) 安装扩展

pip install django-redis

2)配置

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

CACHES = {
    "default": {
        BACKEND": django_redis.cache.RedisCache,LOCATIONredis://192.168.195.129:6379OPTIONS: {
            CLIENT_CLASSdjango_redis.client.DefaultClientdjango.contrib.sessions.backends.cache
SESSION_CACHE_ALIAS = "
注意

如果 redis 的 ip 地址不是本地回环 127.0.0.1, 而是其他地址,访问 Django 时,可能出现 Redis 连接错误,如下:

 

解决方法:

修改 redis 的配置文件,添加特定 ip 地址。

打开 redis 的配置文件

sudo vim /etc/redis/redis.conf

在如下配置项进行修改(如要添加 192.168.195.129:6379 地址)

 重新启动 redis 服务

sudo service redis-server restart

测试

打开view.py文件

def index(request):
    创建redis Session
    request.session[name'] = tracydzf"
    获取Session
    value = request.session.get(')
    print(value)


    return HttpResponse(OK")

打开urls.py

urlpatterns = [

    re_path(r^index/$

 

原文地址:https://www.cnblogs.com/tracydzf

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


注:所有源代码均实测运行过。所有源代码均已上传CSDN,请有需要的朋友自行下载。
继承APIView和ViewSetMixin;作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。ViewSet在开发接口中不经常用。
一、Django介绍Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 。Django学习线路Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。这个MVT模式并
本文从nginx快速掌握到使用,gunicorn快速掌握到使用,实现小白快速搭建django项目,并对可能出现的报错进行了分析
uniapp微信小程序订阅消息发送服务通知
Django终端打印SQL语句 1 Setting配置: 2 默认python 使用的MysqlDB连接,Python3 支持支持pymysql 所有需要在app里面的__init__加上下面配置:
url: re_path('authors/$', views.AuthorView.as_view()), re_path('book/(?P\d+)/$', vie
前提 关于html寻找路线: template 如果在各个APP中存在, Django 会优先找全局template 文件下的html文件,如果全局下的template文件没有相关的html Djan
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
from bs4 import BeautifulSoup#kindeditordef kindeditor(request): s = ''' <li><s
view.py 配置 html 配置
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault('content_type&#
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
return HttpResponse("OK") 返回一个字符串 return redirect("/index/") 返回URL return render
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault('content_type&#
浏览器有一个很重要的概念——同源策略(Same-Origin Policy)。所谓同源是指,域名,协议,端口相同。不同源的客户端脚本(javascript、ActionScript)在没明确授权的情况
自动发送 > 依赖jQuery文件 实例-->GET请求: 手动发送 > 依赖浏览器XML对象(也叫原生ajax) Ajax主要就是使用 【XmlHttpRequest】对象来完成请
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
return HttpResponse("OK") 返回一个字符串 return redirect("/index/") 返回URL return render