Django中cookie和session

Stella981
• 阅读 873

cookie和session

Cookie可以翻译为“小甜品,小饼干” ,Cookie 在网络系统中几乎无处不在,当我们浏览以前访问过的网站时,网页中可能会出现 :你好 .xx,Cookie其实是客户端记录用户行为的一个文件,形式通常是键值对的方式,大家可能有过这种经历,登录网站有的浏览器会提示,是否保存Cookie

cookies是指某些网站为了辨别用户身份、进行session跟踪 而储存在用户本地终端上的数据(通常经过加密)。cookie大致上分为两种,分别是会话cookie和持久化cookie。

session是存储在服务端的,获取方式:通过cookie里的session id(通过服务器生成)获取,而session是存放在服务器的内存中的,所以session的数据不断增加会造成服务器的负担,所以只会把很重要的信息存储在session中,而把一些次要的东西存储在客户端的cookie中。会话cookie是存放在客户端浏览器的内存中,他的生命周期和浏览器是一致的,当浏览器关闭会话cookie也就消失了,而持久化cookie是存放在客户端硬盘中,持久化cookie的生命周期是我们在设置cookie时候设置的那个保存时间。

  1. 下定义:保存在浏览器端的键值对

    1. 用处:

    2. 登录

    3. 记住密码/7天免登录

    4. 用户浏览习惯(每页显示10条)

    5. 简单的投票限制

    6. Django操作Cookie

    7. 设置Cookiereq = HttpResponse("OK")req.set_cookie("key", "value")

    设置加盐的cookie

    req.set_signed_cookie("key", "value", salt="shanghais1hao", max_age=秒)

    2. 获取Cookie  request.COOKIES    --> 大字典    request.COOKIES["key"]  request.COOKIES.get("key", "")  # 获取加盐的Cookie  request.get_signed_cookie("key", default="", salt="shanghais1hao")   3. 删除Coookie  req.delete_cookie("key")
    

Session

1. 下定义:    保存在服务端的键值对,依赖于Cookie2. 用处: 1. 登录 2. 保存手机验证码/验证码 3. 保存购物车数据 ...3. Django操作Session

    1. 设置Session  1. request.session["key"] = "value"  2. request.session.set_expiry(秒/日期对象/时间间隔对象/0/None)  3. request.session.setdefault("k1", "v1")   2. 获取Session数据  1. request.session.get("k1", "")  2. request.session["k1"]    3. request.session.keys()  4. request.session.values()  5. request.session.items()  6. request.session.iterkeys()  7. request.session.itervalues()  8. request.session.iteritems()  3. 删除Session  1. request.session.flush()多用于注销  2. request.session.delete()   4. 手动清除早已经过期的session数据  request.session.clear_expired()  5. 相关配置项(写在settings.py中的)  1.每次请求都更新Session失效时间   SESSION_SAVE_EVERY_REQUEST = True   2. SESSION_COOKIE_AGE = 1209600      # 设置Cookie超时时间    3. SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key  4. 其他:   SESSION_COOKIE_PATH = "/"       # Session的cookie保存的路径(默认)   SESSION_COOKIE_DOMAIN = None     # Session的cookie保存的域名(默认)   SESSION_COOKIE_SECURE = False    # 是否Https传输cookie(默认)   SESSION_COOKIE_HTTPONLY = True   # 是否Session的cookie只支持http传输(默认)

session id的作用

当客户端第一次请求session时,服务器端会为客户端创建一个session对象,并且生成一个session id(通过一些加密算法)。然后保存在cookie中。当用户再次登录时,客户端通过cookie,将session id传到服务器,去和服务器中的session id进行对比,寻找这个session 。然后根据查找结果执行对应的操作。

登录过程

id被盗可能导致的问题

因为session Id是保存在cookie中,而cookie是存在于客户端,所以session Id 并不安全

如何避免

1.敏感操作需要用户输入密码来进行二次认证

2.网站https化,提高消息传递过程中的安全系数

3.用户使用一个密匙对参数进行hash,这样即使cookie被盗取,也会因为没有密匙而无法获取session id

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Easter79 Easter79
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Django组件——cookie与session
Django组件——cookie与session<fontcolor00bff一、会话跟踪技术</font<fontcolorff7f501、什么是会话跟踪技术</font先了解一下什么是会话。可以把
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这