cookie与session的基本认识(浏览器与服务器之间的状态保持)

cookie与session

  • cookie
    • 什么是 cookie,为什么要有这个Cookie
    • cookie的特点:
    • cookie的创建
      • Response.set_cookie()
    • cookie的读取
    • cookie的删除
  • session
    • 什么是session
    • 数据库存储session
      • 1.安装应用
      • 数据库中的session
    • django1.11上session配置Redis数据库
      • 1.安装第三方扩展
      • 配置引擎(redis作为session的保存数据库的设置)
      • 在终端redis查看session内容
    • session的创建
  • session存储四种方式

cookie

什么是 cookie,为什么要有这个Cookie

cookie:饼干. 其实是一份小数据, 是服务器给客户端,并且存储在客户端上的一份小数据
为什么要有这个Cookie:http的请求是无状态。 客户端与服务器在通讯的时候,是无状态的,其实就是客户端在第二次来访的时候,服务器根本就不知道这个客户端以前有没有来访问过。 为了更好的用户体验,更好的交互 [自动登录],其实从公司层面讲,就是为了更好的收集用户习惯[大数据]

cookie的特点:

1.键值结构
2.cookie是基于域名安全的,不同域名之间是不可以进行相互的访问的
3.当浏览器请求某一个网站,会将当前网站所有cookie提交给服务器
4.cookie数据不允许存储敏感信息,密码,支付密码

cookie的创建

Response.set_cookie()

子项目的urls.py中编写路径

url(r'createcookie/',createcookie),

view.py文件中写入以下代码:

def createcookie(request):
    #set_cookie(self, key, value='', max_age=None, expires=None, path='/',
     #          domain=None, secure=False, httponly=False):
    response_object = HttpResponse('OK')
    response_object.set_cookie('name','xiaowang',max_age=60)
    response_object.set_cookie('name1','xiaowang1',max_age=60*60)

    return response_object

max_age=60 表示最大缓存时间为60秒
cookie与session的基本认识(浏览器与服务器之间的状态保持)_第1张图片
键值结构:
在这里插入图片描述

cookie的读取

Response.COOKIES.get(键名)
子项目的urls.py中编写路径

url(r'readcookie/',readcookie),

view.py文件view.py文件中写入以下代码:

def readcookie(request):
    #用来获取的是cookie的值,如果不存在,可以设置默认值
    #request.COOKIES.get()
    print(request.COOKIES.get('name','校长'))
    return HttpResponse('读取成功')

cookie的删除

子项目的urls.py中编写路径

  url(r'deletecookie/',deletecookie),

view.py文件中写入以下代码:

def deletecookie(request):
    response = HttpResponse('删除成功')
    response.delete_cookie('name1')
    return

session

什么是session

session:会话 , Session是基于Cookie的一种会话机制。 Cookie是服务器返回一小份数据给客户端,并且存放在客户端上。 Session是,数据存放在服务器端。

数据库存储session

1.安装应用

如果需要使用数据库存储session,要安装应用
在项目的同名文件夹下的settings.py中MIDDLEWARE内输入:
cookie与session的基本认识(浏览器与服务器之间的状态保持)_第2张图片

数据库中的session

cookie与session的基本认识(浏览器与服务器之间的状态保持)_第3张图片
cookie与session的基本认识(浏览器与服务器之间的状态保持)_第4张图片
注意点:在Django项目中,session的引擎没有设置,因为这是默认的存储方式

django1.11上session配置Redis数据库

1.安装第三方扩展

在这里插入图片描述
如果权限不够则sudo开头

配置引擎(redis作为session的保存数据库的设置)

在项目的同名文件夹下的settings.py内输入:
可以参考官方文档:https://docs.djangoproject.com/en/2.2/ref/settings/
cookie与session的基本认识(浏览器与服务器之间的状态保持)_第5张图片

在终端redis查看session内容

cookie与session的基本认识(浏览器与服务器之间的状态保持)_第6张图片

session的创建

子项目的urls.py中编写路径

     url(r'createsession/',createsession),

view.py文件中写入以下代码:

def createsession(request):
    request.session['age']=18
    return HttpResponse('session_ok')

session存储四种方式

Django中的Session有3种存储方式:放在数据库、缓存或者文件系统中,下面分别予以介绍。

将Session存储在数据库中:
如果要将Session存储在数据库中,我们需要将 ’django.contrib.sessions’ 加入到INSTALLED_APPS 变量中。然后运行 manage.py syncdb 在数据库中创建相应的存储Session的数据库表。

将Session存储在缓存中:
如果想获得更好的性能,我们可以将Session保存在缓存中。这里有两种配置方式:一种是设置SESSION_ENGINE 为”django.contrib.sessions.backends.cache” 。这是一种简单配置,Session将之被保存在缓存中,但是不保证Session总是能取到(比如缓存溢出时Session会丢失);另一种方式是设置SESSION_ENGINE 为 “django.contrib.sessions.backends.cached_db”。这种方式下,Session在保存到缓存的同时还会被保存到数据库中,当Django在缓存中找不到Session时,会从数据库中找到。第二种方式会有一点点性能开销,但是安全性和冗余性更好。

将Session存储在文件系统中:
还有一种方式是将Session存储在文件系统中。需要设置SESSION_ENGINE 为”django.contrib.sessions.backends.file”,这时你还需要同时设置SESSION_FILE_PATH 变量,它代表Session文件保存的位置,缺省的设置一般是tempfile.gettempdir(),表示系统的临时目录。这里要确保应用程序对那个目录有读写的权限。

4.这个是混合存取:
django.contrib.sessions.backends.cached_db

你可能感兴趣的:(cookie与session的基本认识(浏览器与服务器之间的状态保持))