原文链接: 转载请注明

本文分为几部分来进行介绍:

  1. django中session与cookie的概念,以及相互之间的关系;
  2. session id的作用;
  3. session id被盗可能会引起的危害;
  4. 如何避免危害的发生。

django中session与cookie的概念

我的理解,session与Cookie都可以称作是一种缓存,其存在的最大目的都是为了减少用户request与response之间的时间损耗,提高用户的浏览体验。

Cookies

cookies 是浏览器为 Web 服务器存储的一小段信息。 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies。它保存在浏览器下的某个文件夹下。

Session

Django的Session机制会向请求的浏览器发送cookie字符串。同时也会保存到本地一份,用来验证浏览器登录是否为同一用户。它存在于服务器,Django默认会把session存入到数据库中。

Session依赖于Cookie,如果浏览器不能保存cooki那么session就失效了。因为它需要浏览器的cooki值去session里做对比。 session就是用来在服务器端保存用户的会话状态。由于session是保存在服务器端的,所以用户永远不可能拿到session内的具体内容。

session id的作用

session id是保存在cookie中的一个随机字符串。服务器通过查看用户cookie中的session id信息,获取id,来与session中的用户名进行比对,比对成功,则说明认证通过,可进行其他的操作。

id被盗可能会导致的问题

由于session id是保存在cookie中,而cookie是保存在客户端,因此session id并不安全,如果被不法用户盗取cookie,伪造用户进行登录操作,获得更高的权限,进而对用户账户,或网站造成更大的损害。

解决这个的问题有以下几个方面:

  1. 敏感操作需要用户输入密码来进行二次认证;
  2. 网站https化,提高消息传递过程中的安全系数;
  3. 类似oauth,用户使用一个私钥来对参数进行hash,这样即便cookie被盗,也会因为没有私钥而无法获知session id;

由于django中的SESSION_COOKIE_HTTPONLY默认值为True,只能通过http协议来读取,而不能通过js来实现对cookie的窃取。因此不用对此安全性过分担心。

以上就是我对于session id的全部理解,欢迎大家跟我讨论~

参考资料:

小谈django 的 cookie和session

Django中的cookie与session

django 快速实现session的操作

会话( Session )在Web开发 是一种常见的机制,用于在不同的请求之间存储和传递数据。会话 ID 是唯一标识一个会话的字符串,可以用于在不同的请求 定位和访问会话数据。通过使用 Django 提供的会话支持,你可以轻松地获取会话 ID 并在Web应用程序 存储和访问会话数据。本文提供了获取会话 ID 的示例代码,并介绍了如何使用会话 ID 进行会话数据的存储和访问。你可以根据需要在视图函数 使用会话 ID 进行后续处理,比如存储和访问会话数据。此设置将启用 Django 的会话功能,并将会话数据存储在默认的后端数据库 。 需要验证请求的 cookie 里面是否有 sessionid ,并且检查 session 表,看看是否存在 session _key为该 sessionid 的一条记录,该记录的数据字典里面是否 包含了 usertype 为 mgr 的 数据,我们可以把前面数据库增删改查视为我们的主页,只需要从主页函数调用之前去做下检查即可。 django _ session 表的单独获取查看操作一般在程序里不会出现,因为前后端都是通过 cookie sessionid 直接获取到对应的数据,但为了以防万一,或者你对这张表有一些兴趣,这里额外介绍一下如何单独操作这张表里的数据。然后通过 session _key 来获取这条数据,比如 session _key 为。 http协议是无状态的,每一次请求都是一次新的请求,不会记得之前的状态。 客户端(浏览器)与服务器之前的每次通信都是一次会话。 状态保持的方法:在客户端或者服务器存储会话相关的数据。 存储方式有两种: 1、数据存储在客户端, cookie 。 2、数据存储在服务器,在客户端存储 session _ id 。 状态保持的目的是在一段时间内... 想 理解 cookie 的请看上面一篇博客这次给大家了解的是 session 介绍: session 相对比 cookie 是要安全很多, session 就像是银行卡,客户拿到的只是一个银行卡卡号(也就是浏览器的 sessionid ),用户的存钱,取钱记录,都是根据银行卡号保存在银行的系统里面(web 服务器端),所以只是得到一个 sessionid 是没什么用的1.首先在views视图 配置2.跟 cookie 类似,接下来... 设置 session 存储在数据库. 本次保存在MySQL数据库(注意配置和开启MySQL数据库) SESSION _ENGINE = ' django .contrib. session s.backends.db' 启用 Session : Django 默认启用,若没有启用在’M ID DLEWARE_CLASSES’ 添加以下语句: ' django .co...