当咱们经过浏览器来访问网站的时候,因为HTTP自己是无状态的,因此当咱们结束访问后第二次再来访问的时候,服务器自己是不认识咱们(它不知道咱们以前来过,也就不会保存咱们以前的信息),好比当咱们第一次登入的网站后第二次再来的时候咱们仍是须要从新登入,这样网站不能保存咱们的密码,是否是很麻烦,那如何解决这个问题呢?那cookie和session就是为了解决这个问题而产生的。python
cookie:(1)咱们第一次访问服务器的时候是 request直接请求过去,而后服务器会返回response和一个设置好的cookie值给浏览器,这个cookie直接保存在浏览器本地能够设置过时时间,当咱们第二次访问这个网站的时候咱们发送的服务器的不在是单纯的request而是加上了一个cookie值(这个值是惟一的,服务器经过这个值来判断这个访问者是谁,有哪些记录等),服务器根据这些值再发给浏览器信息。(图左)数据库
(2)cookie是保存在本地的一种存储机制,大小不超过4Kbdjango
session:(1)咱们第一次访问服务器的时候,服务器在产生一个session的文件保存在服务器数据库中,这session文件中保存的就是这个客户的一些信息包括一个session_id,用户名,过时时间等等,而且是以加密的形式保存;而后服务器响应给浏览器的时候会把这个session_id发送给浏览器,当用户下次访问服务器的时候会把session_id一块儿发送给服务器,服务器经过session_id去数据库中查找该用户的信息,解析这些信息后,返回给浏览器特定的页面。浏览器
(2)session自己是一种思路,解决方案,不一样的语言,框架设置session的方式不一样;它是一种保存在服务器数据库中的一种存储方式;它是加密的。安全
Django中cookie的设置:服务器
设置cookie:cookie
response.set_cookie("key","value",max_age = 180,path="/cms/")session
key
:这个cookie
的key
。value
:这个cookie
的value
。max_age
:最长的生命周期。单位是秒。expires
:过时时间。跟max_age
是相似的,只不过这个参数须要传递一个具体的日期,好比datetime
或者是符合日期格式的字符串。若是同时设置了expires
和max_age
,那么将会使用expires
的值做为过时时间。path
:对域名下哪一个路径有效。默认是对域名下全部路径都有效。domain
:针对哪一个域名有效。默认是针对主域名下都有效,若是只要针对某个子域名才有效,那么能够设置这个属性.secure
:是不是安全的,若是设置为True
,那么只能在https
协议下才可用。httponly
:默认是False
。若是为True
,那么在客户端不能经过JavaScript
进行操做。获取cookie:框架
经过request.COOKIES
来得到。这个对象是一个字典类型dom
删除cookie:
经过delete_cookie("username")来删除cookie,其实是把cookie的值设置为空额字符串,而后把过时时间设置为0;关闭浏览器天然就删除了
cookie代码实例
from django.http import HttpResponse from datetime import datetime from django.utils.timezone import make_aware def index(request): #设置cookie response = HttpResponse("ok") expires = datetime(year=2019,month=12,day=20,hour=0,minute=0,second=0) expires = make_aware(expires) response.set_cookie("username","abc",max_age=190,expires = expires,path="/cms/") return response def delete_cookie(request): #删除cookie response = HttpResponse("delete") response.delete_cookie("username") return response def cookie_list(request): #获取cookie cookies = request.COOKIES username = cookies.get("username") return HttpResponse(username)
django中session的设置:
session
经常使用的方法以下:
get
:用来从session
中获取指定值。
pop
:从session
中删除一个值。
keys
:从session
中获取全部的键。
items
:从session
中获取全部的值。
clear
:清除当前这个用户的session
数据。 从浏览器中删除,不会删除数据库的中
flush
:删除session
而且删除在浏览器中存储的session_id
,通常在注销的时候用得比较多。 直接删除数据库中的
set_expiry(value)
:设置过时时间。
session
配置。在settings.py
中能够设置SESSION_COOKIE_AGE
来配置全局的过时时间。默认是1209600
秒,也就是2周的时间clear_expired
:清除过时的session
。Django
并不会清除过时的session
,须要按期手动的清理,或者是在终端,使用命令行python manage.py clearsessions
来清除过时的session
。
from datetime import timedelta def session_list(request): # request.session["username"] = "username" #添加session # username = request.session.get('username') #获取session # print(username)
request.session.clear() #删除session_id 不会删除数据库中的数据
request.session.flush() #暴力删除数据库中的数据一块儿删除
request.session.clear_expired() #清除过时的session expiry = timedelta(days=2) request.session.set_expiry(None) return HttpResponse("ok")