博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django之cookie/session
阅读量:7071 次
发布时间:2019-06-28

本文共 3012 字,大约阅读时间需要 10 分钟。

cookie

 

当我们通过浏览器来访问网站的时候,由于HTTP本身是无状态的,所以当我们结束访问后第二次再来访问的时候,服务器本身是不认识我们(它不知道我们之前来过,也就不会保存我们之前的信息),比如当我们第一次登入的网站后第二次再来的时候我们还是需要重新登入,这样网站不能保存我们的密码,是不是很麻烦,那如何解决这个问题呢?那cookie和session就是为了解决这个问题而产生的。

cookie:(1)我们第一次访问服务器的时候是 request直接请求过去,然后服务器会返回response和一个设置好的cookie值给浏览器,这个cookie直接保存在浏览器本地可以设置过期时间,当我们第二次访问这个网站的时候我们发送的服务器的不在是单纯的request而是加上了一个cookie值(这个值是唯一的,服务器通过这个值来判断这个访问者是谁,有哪些记录等),服务器根据这些值再发给浏览器信息。(图左)

    (2)cookie是保存在本地的一种存储机制,大小不超过4Kb

session:(1)我们第一次访问服务器的时候,服务器在产生一个session的文件保存在服务器数据库中,这session文件中保存的就是这个客户的一些信息包括一个session_id,用户名,过期时间等等,并且是以加密的形式保存;然后服务器响应给浏览器的时候会把这个session_id发送给浏览器,当用户下次访问服务器的时候会把session_id一起发送给服务器,服务器通过session_id去数据库中查找该用户的信息,解析这些信息后,返回给浏览器特定的页面。

    (2)session本身是一种思路,解决方案,不同的语言,框架设置session的方式不同;它是一种保存在服务器数据库中的一种存储方式;它是加密的。

 

Django中cookie的设置:

  设置cookie:

  response.set_cookie("key","value",max_age = 180,path="/cms/")

  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来获得。这个对象是一个字典类型

  删除cookie:

  通过delete_cookie("username")来删除cookie,实际上是把cookie的值设置为空额字符串,然后把过期时间设置为0;关闭浏览器自然就删除了

cookie代码实例

from django.http import HttpResponse  from datetime import datetimefrom 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  responsedef delete_cookie(request):    #删除cookie    response = HttpResponse("delete")    response.delete_cookie("username")    return responsedef 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  timedeltadef 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")

 

转载于:https://www.cnblogs.com/yan-peng/p/10145290.html

你可能感兴趣的文章
linux:SUID、SGID详解
查看>>
【转】大数据批处理框架 Spring Batch全面解析
查看>>
EChars学习-2
查看>>
Python模块--psutil
查看>>
新版App Store有哪些变化呢
查看>>
分布式搜索方案选型
查看>>
AIR文件操作(二):使用文件对象操作文件和目录
查看>>
mongodb的删除语句
查看>>
Linux 实用技巧
查看>>
hadoop-
查看>>
团队博客
查看>>
4.Struts2中Action的三种访问方式
查看>>
delphi 10.3 IOS中英文错位
查看>>
初识RabbitMQ
查看>>
“Linux内核分析”实验二
查看>>
WCF使用MSMQ通信
查看>>
前后端分离djangorestframework——权限组件
查看>>
使用默认图片替代某张图为空时的情况
查看>>
用牙签进食易生意外
查看>>
redis去重方案
查看>>