Django框架05:状态保持

  • 内容
  • 相关

状态保持(cookie和session)


一、cookie

面试题: 
           谈谈你对cookie的理解?
      

           答: 先说概念, 再说流程, 最后从http协议的角度上说


概念:    保存在客户端的数据


流程:
       第一次请求过程
       1. 我们的浏览器第一次请求服务器的时候,不会携带任何cookie信息
       2. 服务器收到请求后, 发现请求中没有任何cookie信息
       3. 服务器会在响应中设置cookie
       4. 我们的浏览器收到响应后, 发现响应中有cookie信息,会把cookie信息保存起来
      第二次及其之后的过程
       1. 当我们的浏览器第二次及其之后的请求都会携带cookie信息

       2. 我们的服务器收到请求后, 会发现请求中携带的cookie信息,这样的话就知道是谁的请求了


       cookie是保存在客户端的  
       cookie是基于域名(IP)的   (遵循同源策略) 

 1.设置cookie

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

 HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)

    示例:

def cookie(request):
      response = HttpResponse('ok')
       response.set_cookie('xcooo1', 'python1')  # 临时cookie
       response.set_cookie('xcooo2', 'python2', max_age=3600)  # 有效期一小时
       return response

 2 读取Cookie

def cookie(request):
     cookie1 = request.COOKIES.get('xcooo1')
     print(cookie1)
     return HttpResponse('OK')

 3 删除Cookie

response.delete_cookie('xcooo2')
或者
response.set_cookie(key,value,max_age=0)


二、session

面试题:
           问题1 : 我换了浏览器,还能获取到session信息麽?  可以  不可以
                 答: 不可以, session依赖于cookie
                 
           问题1 : 谈谈你对session的理解?

                 答: 先说概念, 再说流程, 最后从http协议的角度上说


概念: 保存在服务端的数据,  session 依赖于cookie


流程:
        第一次请求过程
        1. 我们第一次请求的时候可以携带一些信息(用户名/密码), cookie中没有任何信息
        2. 当我们的服务器收到请求后, 进行用户名和密码的验证, 验证成功设置session信息
        3. 在设置session信息的同时(session信息保存在服务端), 服务器会在响应头自动设置一个sessionid
        4. 客户端(浏览器)收到这个响应之后, 会将cookie信息保存起来(保存sessionid 的信息)

       第二次及其之后的过程
        1. 第二次及其之后的请求都会携带sessionid 的信息
        2. 当服务器收到这个请求, 会获取到sessionid的信息, 然后进行验证,验证成功,则可以获取 session信息    (session信息保存到服务器端)
    
        如果浏览器禁用了cookie, 则session不能实现
          
  
1 启用Session
     Django项目默认启用Session。
     可以在settings.py文件中查看
     
2 存储方式
  2.1 数据库
SESSION_ENGINE='django.contrib.sessions.backends.db'

  2.2 本地缓存

SESSION_ENGINE='django.contrib.sessions.backends.cache'

  2.3 混合存储

 SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
  2.4 Redis

    1) 安装扩展

pip install django-redis

    2)settings.py配置

        CACHES = {
            'default': {
                'BACKEND': 'django_redis.cache.RedisCache',
                'LOCATION': 'redis://127.0.0.1:6379/1',
                'OPTIONS': {
                    'CLIENT_CLASS': 'django_redis.client.DefaultClient',
                }
            }
        }
        SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
        SESSION_CACHE_ALIAS = 'default'
    注意: 如果redis的ip地址不是本地回环127.0.0.1,而是其他地址,访问Django时,可能出现Redis连接错误
    解决方法:

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

sudo vim /etc/redis/redis.conf

    重新启动redis服务

sudo service redis-server restart


3 session操作

   1) 以键值对的格式写session。

 request.session['键']=值

   2)根据键读取值。

 request.session.get('键',默认值)

   3)清除所有session,在存储中删除值部分。

request.session.clear()

   4)清除session数据,在存储中删除session的整条数据。

 request.session.flush()

   5)删除session中的指定键及值,在存储中只删除某个键及对应的值。

del request.session['键']

   6)设置session的有效期

request.session.set_expiry(value)
    1. 如果value是一个整数,session将在value秒没有活动后过期。
    2. 如果value为0,那么用户session的Cookie将在用户的浏览器关闭时过期。
    3. 如果value为None,那么session有效期将采用系统默认值, 默认为两周,可以通过在settings.py中设置SESSION_COOKIE_AGE来设置全局默认值。

您阅读这篇文章共花了: 

本文标签:

版权声明:转载请带上版权原创为《辛诚

解压密码:若设有密码均为:www.xcooo.cn

收录状态:百度已收录点击查看详情

Django框架05:状态保持

发表评论

您可以选择匿名评论,保护个人隐私 !