django中的cookie和session

版权声明:本文为博主原创文章,转载请注明来源。 https://blog.csdn.net/Crazy__Hope/article/details/78215185

问:为什么要cookie和session,它们有什么作用?

答:http请求本身是无状态的,也就是说你之前登录过某些网站,刷新之后就需要重新登录,这时候就需要用cookie或者session来保持你的登录状态。又因为cookie是保存在浏览器本地,不安全,所以使用session来保持用户状态。下面就来看看在Django中cookie和session的怎么使用.

1.创建cookie

构造HttpResponse对象
response = HttpResponse()
response.set_cookie(key, value='', max_age=None, expires=None)

 #设置cookie在120秒后过期
    response.set_cookie('user', '123456', 120)

    #设置cookie在2017年10月10号过期
    response.set_cookie('user', '123456', None,datetime(2017,10,10))

# max_age是一个整数,表示在指定秒数后过期
# expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期
# max_age与expires二选一
# 如果不指定过期时间,默认两个星期后过期

2.删除cookie

delete_cookie(key):删除指定的key的Cookie,如果key不存在则什么也不发生
response.delete_cookie(key)

3.查看cookie

属性

COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串

#如果存在user这个key就取

if request.COOKIES.has_key('user'):
    request.COOKIES['user']

session

1. django项目中默认开启session, 可在settings.py中的MIDDLEWARE_CLASSES找到

这里写图片描述
如果不想开启session的话直接禁用session中间件即可.

2. session的存储方式:

     可以存储在数据库、缓存、Redis  

2.1存储在数据库

SESSION_ENGINE='django.contrib.sessions.backends.db'
#这句话可写可不写,因为django默认把session存储在数据库当中

2.2存储在本机内存中,缺点是如果丢失则不能找回,比数据库的方式读写更快SION_ENGINE='django.contrib.sessions.backends.cache

2.3混合存储,优先从本机内存中存取,如果没有则从数据库中存取

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

存储在数据库中,需要在项INSTALLED_APPS中安装Session应用(默认已安装)
这里写图片描述
数据迁移后,会在数据库当中生成django_session这个表,表结构如下
由表结构可知,操作Session包括三个数据:键,值,过期时间

1. session依赖于cookie,要想使用session,浏览器必须支持cookie,否则无法使用session
2. 存储Session时,键与Cookie中的sessionid相同,值是开发人员设置的键值对信息,进行了base64编码,过期时间由开发人员设置

设置session

request.session['键']=值
如果键(key)存在就取键对应的值,不存在则返回默认值None,这里的default可以自定义返回什么都行
request.session.get('键',default=None)
或者 request.session[‘键’] 效果是一样的,但是如果这个键不存在的话,使用这种方法会报错!建议使用第一种方法!

clear():清除所有会话,在存储中删除值部分
flush():清除会话数据,在存储中删除会话的整条数据
del request.session[‘member_id’]:删除指定的某条session
设置会话的超时时间,如果没有指定过期时间则用户的浏览器关闭时过期

# 如果value是一个整数,会话将在value秒没有活动后过期
# 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期
# 如果value为None,那么会话永不过期
request.session.set_expiry(value)

扩展

session默认以base64的加密方式存在django_session这个数据表中,如果想要查看session_data里的数据,将其复制粘贴在base64在线解码的网站平台上就可看到输出结果.

猜你喜欢

转载自blog.csdn.net/Crazy__Hope/article/details/78215185