Django之cookie/session

cookie

 

当咱们经过浏览器来访问网站的时候,因为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

  1. key:这个cookiekey
  2. value:这个cookievalue
  3. max_age:最长的生命周期。单位是秒。
  4. expires:过时时间。跟max_age是相似的,只不过这个参数须要传递一个具体的日期,好比datetime或者是符合日期格式的字符串。若是同时设置了expiresmax_age,那么将会使用expires的值做为过时时间。
  5. path:对域名下哪一个路径有效。默认是对域名下全部路径都有效。
  6. domain:针对哪一个域名有效。默认是针对主域名下都有效,若是只要针对某个子域名才有效,那么能够设置这个属性.
  7. secure:是不是安全的,若是设置为True,那么只能在https协议下才可用。
  8. 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经常使用的方法以下:

  1. get:用来从session中获取指定值。

  2. pop:从session中删除一个值。

  3. keys:从session中获取全部的键。

  4. items:从session中获取全部的值。

  5. clear:清除当前这个用户的session数据。 从浏览器中删除,不会删除数据库的中

  6. flush:删除session而且删除在浏览器中存储的session_id,通常在注销的时候用得比较多。 直接删除数据库中的

  7. set_expiry(value):设置过时时间。

    1. value能够是整形表明秒数,多少秒后过时
    2. 能够是0,关闭浏览器就过时
    3. 能够是None,会使用全局的session配置。在settings.py中能够设置SESSION_COOKIE_AGE来配置全局的过时时间。默认是1209600秒,也就是2周的时间
  8. clear_expired:清除过时的sessionDjango并不会清除过时的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")
相关文章
相关标签/搜索