您的位置:首页 > 其它

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

2019-06-01 15:48 453 查看

cookie与session

  • cookie的读取
  • cookie的删除
  • session
  • django1.11上session配置Redis数据库
  • 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的读取

    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('nam
    4000
    e1')
    return

    session

    什么是session

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

    数据库存储session

    1.安装应用

    如果需要使用数据库存储session,要安装应用
    在项目的同名文件夹下的settings.py中MIDDLEWARE内输入:

    数据库中的session



    注意点:在Django项目中,session的引擎没有设置,因为这是默认的存储方式

    django1.11上session配置Redis数据库

    1.安装第三方扩展


    如果权限不够则sudo开头

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

    在项目的同名文件夹下的settings.py内输入:
    可以参考官方文档:https://docs.djangoproject.com/en/2.2/ref/settings/

    在终端redis查看session内容

    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

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: