会话

d y 04 cookie和session

1 cookie

cocokie和session

  • cookie
cookie的由来
大家都知道HTTP协议是无状态的。

无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,所以它不会受到前面的请求和响应情况响应

一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的。

状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留。会话中产生的数据又是我们需要保存的,也就是说要“保持状态”。因此cookie就是在这样一个场景下诞生。

有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等
- 实现状态保持主要有两种方式:
  - 在客户端存储信息使用`Cookie`
  - 在服务器端存储信息使用`Session`

什么是cookie
cookie翻译成中文意思是曲奇饼、饼干。然而,在因特网内cookie就和饼干没关系了。cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。

  • 4.2使用chrome浏览器查看cookie
Cookie以键值对的格式进行信息的存储。
Cookie基于域名安全,不同域名的Cookie是不能互相访问的,如访问jd.com时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到jd.com写的Cookie信息。

当浏览器请求某网站时,会将浏览器存储的跟网站相关的所有Cookie信息提交给网站服务器 

# expires 按照时间字符串计算过期时间, 浏览器会存在本地缓存路径, 自动删除过期cookie    
#只有max_age, 则按秒计算过期时间, 浏览器会存在本地缓存路径, 并自动删除过期cookie       
# 若 max_age和 expires 同时存在, 则默认使用 max_age    
# 如果设置的cookie时间小于计算机时间, 浏览器则不提取cookie   
# 设置cooke    
response = HttpResponse('python')  
response.set_cookie('name','hualong',expires=50000) # 使用set_cookie设置,
return response    
# 读取cookie
cookie1 = request.COOKIES.get('sixstar1')
print(cookie1)
return HttpResponse('OK')
*cookie的流程**

第一次请求过程
            1.我们的浏览器第一次请求服务器的时候,不会携带任何cookie信息

    2.服务器接收到请求之后,发现请求中没有任何cookie信息
            3.服务器设置一个cookie.这个cookie设置在相应中
            4.我们的浏览器接收到这个相应之后,发现相应中有cookie信息,浏览器会将cookie信息保存起来
        第二次及其之后的过程
           1.当我们的浏览器第二次及其之后的请求都会携带cookie信息
           2.我们的服务器接收到请求之后,会发现请求中携带的cookie信息,这样的话就认识是谁的请求了
  • 4.3session
session是什么?

服务器为了保存用户状态而创建的一个特殊的对象。 当浏览器第一次访问服务器时,服务器创建一个session对象(该对象有一个唯一的id,一般称之为sessionId),

session的作用:做状态的保持,比如用户验证登陆保持用户登陆状态

session的应用
对于敏感、重要的信息,建议要储在服务器端**,不能存储在浏览器中,如用户名、余额、等级、验证码等信息。
案例操作
def set_session(request):
    """设置session"""
    request.session['username'] = 'tong'
    request.session['age'] = 18
    return HttpResponse('设置session')


     
def get_session(request):
    """获取session"""
   username = request.session['username']
   age = request.session['age']
     

   return HttpResponse(username + ":" + str(age))


     
def clear_session(request):
    """清除所有session信息"""
    request.session.clear()
    return HttpResponse('使用clear()清除成功')

     
def flush_session(request):
    """清除session数据"""
    request.session.flush()
    return HttpResponse('使用flush()清除成功')
  访问set_session视图函数,进行设置,然后访问get_session视图函数进行获取值

 当访问过clear_session和flush_session任何一个视图函数时,再访问get_session就会报错,因为已经清除了session,需要再次访问set_session后进行设置,才可以获取到session 

5. cooke和session的区别

cookie和session的区别?
Cookie的根本作用就是在客户端存储用户访问网站的一些信息 ,Session的根本作用就是在服务端存储用户和服务器会话的一些信息 
cookie 缺陷:增加了流量 安全性成问题 HTTP请求中的Cookie是明文传递的 大小限制在4KB左右
cookie 是保存在客户端,session 的是保存在服务端
cookie 不安全(对敏感数据,需要加密) 
session因为有session_id的存在往往要借助cookie来实现,但是非必要,只能说是一种通用性交换的实现方案
如果cookie删除了,或者是浏览器禁用了,那么session也会失效,
session, 可以放在文件中,数据库中,或者内存,都可以,一般用户验证这种场合都会用到session

redis配置

1在虚拟环境中下载redis的安装包
pip install django-redis
2配置 在setting.py中添加配置
# 缓存数据库
CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/0',
        'OPTIONS': {
            'CLIENT_CLASS':'django_redis.client.DefaultClient',
        }
    },
    'code': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS':'django_redis.client.DefaultClient',
        }
    },
}
# default 库名是不能修改的
# SESSION_ENGINE='django.contrib.sessions.backends.cache_db' # 混合存储
# SESSION_ENGINE='django.contrib.sessions.backends.db' # 缓存指定采用的数据库类型 默认采用数据库
# SESSION_ENGINE='django.contrib.sessions.backends.cache' # redis
# SESSION_CACHE_ALIAS = "default" # 指定缓存的数据库


# session的存储配置
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 将sessin保持到redis中
SESSION_CACHE_ALIAS = 'default'   #指定缓存的数据库

# 设置session失效时间,单位为秒
SESSION_COOKIE_AGE = 60*5

redis简单使用

urls.py中定义接口

path('index5/',views.index5),
path('order/',views.order),

views.py中
def index5(request):
    # 使用默认数据库
    conn = get_redis_connection('default') 
     print(conn)
    # 添加数据
    conn.set('age',100)
    # 添加哈希数据
    # conn.hset('k1','name','长清')
    conn.save()
    # print(conn.get('age'))
    print(conn.hgetall('k1'))
   
    return HttpResponse('设置成功')
def order(request):
    # 使用添加的code
    conn = get_redis_connection("code")
    print(conn)
    # conn.set('age', 100)
    conn.hset('k1','name','长清')
    session = request.session.get('name')
    print(session)
    
    conn.save()
    # print(conn.get('age'))
    print(conn.hgetall('k1'))
    # print(conn.hgetall('k2'))
    # conn.hdel('k1','name')
    # print(conn.hgetall('k1'))
    return HttpResponse("获取成功")


6总结

  • 1本课程重点是cookie和session的使用,必须掌握。
  • 2掌握cookie和session的区别。
  • 3熟悉cookie和sesion的原理。
  • 4 配置redis中为session的缓存。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容