1、相同与不同

  Cookie和Session都是为了记录用户相关信息的方式,

  最大的区别就是Cookie在客户端记录而Session在服务端记录内容。

2、Cookie和Session之间的联系的建立:

  对于Django默认情况来说,当用户登陆后就可以发现Cookie里油一个sessionid的字段,根据这个key就可以取得在服务端记录的详细内容。

  如果将这个字段删除,刷新页面就会变成未登录状态了。

对session的处理主要在源码django/contrib/sessions/middleware.py中,如下所示:

import time
from importlib import import_module
from django.conf import settings
from django.contrib.sessions.backends.base import UpdateError
from django.core.exceptions import SuspiciousOperation
from django.utils.cache import patch_vary_headers
from django.utils.deprecation import MiddlewareMixin
from django.utils.http import cookie_date
class SessionMiddleware(MiddlewareMixin):def __init__(self, get_response=None):self.get_response = get_responseengine = import_module(settings.SESSION_ENGINE)self.SessionStore = engine.SessionStoredef process_request(self, request):session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME)request.session = self.SessionStore(session_key)def process_response(self, request, response):"""If request.session was modified, or if the configuration is to save thesession every time, save the changes and set a session cookie or deletethe session cookie if the session has been emptied."""try:accessed = request.session.accessedmodified = request.session.modifiedempty = request.session.is_empty()except AttributeError:passelse:# First check if we need to delete this cookie.# The session should be deleted only if the session is entirely emptyif settings.SESSION_COOKIE_NAME in request.COOKIES and empty:response.delete_cookie(settings.SESSION_COOKIE_NAME,path=settings.SESSION_COOKIE_PATH,domain=settings.SESSION_COOKIE_DOMAIN,)else:if accessed:patch_vary_headers(response, ('Cookie',))if (modified or settings.SESSION_SAVE_EVERY_REQUEST) and not empty:if request.session.get_expire_at_browser_close():max_age = Noneexpires = Noneelse:max_age = request.session.get_expiry_age()expires_time = time.time() + max_ageexpires = cookie_date(expires_time)# Save the session data and refresh the client cookie.# Skip session save for 500 responses, refs #3881.if response.status_code != 500:try:request.session.save()except UpdateError:raise SuspiciousOperation("The request's session was deleted before the ""request completed. The user may have logged ""out in a concurrent request, for example.")response.set_cookie(settings.SESSION_COOKIE_NAME,request.session.session_key, max_age=max_age,expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,path=settings.SESSION_COOKIE_PATH,secure=settings.SESSION_COOKIE_SECURE or None,httponly=settings.SESSION_COOKIE_HTTPONLY or None,)return response

View Code

当接收到一个请求的时候,先在Cookie中取出key,然后根据key创建Session对象,在response时候判断是否要删除或者修改sessionid。

也就是说,Django中如果客户把浏览器Cookie禁用后,用户相关的功能就全都失效了,因为服务器端根本没法知道当前用户是谁。

对于这种情况,关键点就是如何把sessionid不使用Cookie传递给客户端,常见的比如放在URL中,也就是URL重写技术。想实现这点可以自己写Middleware。不过django并不建议这么做:

The Django sessions framework is entirely, and solely, cookie-based. It does not fall back to putting session IDs in URLs as a last resort, as PHP does. This is an intentional design decision. Not only does that behavior make URLs ugly, it makes your site vulnerable to session-ID theft via the “Referer” header.

转载自:https://www.jb51.net/article/119892.htm

转载于:https://www.cnblogs.com/LYliangying/p/9662314.html

Django中的Session与Cookie相关推荐

  1. php通过session保存用户信息,如何在php中利用session与cookie保存用户的登录信息

    如何在php中利用session与cookie保存用户的登录信息 发布时间:2020-12-18 15:49:56 来源:亿速云 阅读:95 作者:Leah 如何在php中利用session与cook ...

  2. Flask 中的session 和 cookie

    文章目录 前言 什么是Cookie? Cookie 和 Session 什么是Seesion? 什么是token? Cookie和session的区别 token和session的区别 Flask中使 ...

  3. Django框架(22.Django中设置session以及session对象及方法)

    Session 对于敏感.重要的信息,建议要储在服务器端,不能存储在浏览器中,如用户名.余额.等级.验证码等信息. 在服务器端进行状态保持的方案就是Session. 数据迁移后会在数据库中创建出存储S ...

  4. ASP.NET MVC 中解决Session,Cookie等依赖的方式

    目录 介绍 使用Filter方式 Filter在MVC生命周期中的位置 Filter常见的应用场景 Filter的执行顺序 MVC中常见的对Session,Cookie的依赖 使用Filter解除依赖 ...

  5. 如何在AjaxPro.net的AjaxMethod中使用session和cookie

    添加一个AjaxPro.HttpSessionStateRequirement 枚举的值到你的AjaxPro.AjaxMethodAttribute中. 例如: [AjaxPro.AjaxMethod ...

  6. ASP.NET中的Session和Cookie

    SessionID 属性用于唯一地标识在服务器上包含会话数据的浏览器.SessionID 值由 ASP.NET 随机生成,并存储在浏览器的不过期 Cookie 中.每次向 ASP.NET 应用程序发送 ...

  7. Django 中的 cookie 和 session

    一.cookie 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新的 ...

  8. Django中cookie和session的存、取、删除

    Django中: cookie的存: response = HttpResponse('登陆成功') #改成重定向等都可以 response.set_cookie('username',usernam ...

  9. cookie和session 以及Django中应用

    cookie和session 以及Django中应用 cookie和session机制 cookie和session机制 cookie机制采用的是在客户端保持状态的方案.作用就是为了解决HTTP协议无 ...

最新文章

  1. 全球黑客盛会:2008年黑帽大会要闻摘要(2)
  2. 交叉路口红绿灯控制程序linux,PLC十字路口的交通灯控制编程实例!
  3. Spring 的3种依赖注入方式
  4. java调度:(一)几种任务调度的 Java 实现方法与比较
  5. IDEA使用git提交代码时,点了commit之后卡死在performing code analysis部分,或者performing code analysis结束后没有进入下一步操作。
  6. linux mysql 5.7密码忘记_Mysql5.7.14 linux版密码忘记的找回方法
  7. 从头开始编写一个时间序列数据库
  8. Flink Forward Asia 2021 延期,线上相见
  9. 2020 Kyligence 面经
  10. DPDK - mlx5 drop action 性能 patch
  11. 若变量已正确定义并赋值,不符合c语言语法的表达式是____.,若变量已正确定义并赋值,表达式______不符合C语言语法.A、a*b/c; B、3.14%2 C、2,b D、a/b/...
  12. Win10华硕atk驱动怎么安装_正版win10下载好后怎么安装?正版win10安装教程
  13. 2021年9月再次更新-日立电梯,艾默生变频器维修图纸,原理图
  14. delphi pi怎么得到?
  15. mmorpg服务器物理,伸缩性MMORPG服务器架构的设计与实现
  16. Hive3.1.2 on spark
  17. uni-app 评论五星
  18. 实现Word页面行数控制、公文排版就是那么精准
  19. Turing Tape (推公式 模拟)
  20. ArcGIS Pro二次开发环境配置及项目创建示例

热门文章

  1. strtotime()加半个小时_炖羊肉,必须加这4种料,缺一味就不香!很多人做错,难怪不好吃...
  2. yii2 behavior 排除某个方法_中学科目二 | 教学方法
  3. javacript 裁切图片
  4. eclipse 设置workspace编码格式
  5. python array操作,Python中数组的基本操作
  6. 中的挂起是什么意思_客厅适合挂什么字画 要想有品位就挂这样的
  7. 三菱gx软件初始化失败怎么解决_三菱PLC的常见问题大全!
  8. easyui datagrid不是相邻的能合并单元格吗_介绍一种划分账龄的方法,要不了半个小时就能完成...
  9. sql的error如何查看是什么故障_什么是420mA控制回路?常见故障如何排查?
  10. 地理必修一三大类岩石_高一地理必修一知识点总结归纳