浏览器同源策略(same-origin policy)

csrf攻击防御核心点总结

django的cookie和session操作-7天免登录

flask操作cookie&django的seesion和cookie机制

cookie操作参考: http://www.cnblogs.com/lhj588/archive/2011/10/27/2226976.html

这玩意可以实现7天免登录等功能.

session和cookie机制原理和交互过程

交互过程

① 客户端访问,无服务端写入的Cookie
② 服务端的Cookie写入浏览器
③ 浏览器解析Cookie,保存至浏览器文件
④ 客户端访问,有服务端写入的Cookie
⑤ 服务器获取

django请求中的cookie

第一次访问服务端会给一个csrf的cookie

登录完成后,默认给一个为期半个月的cookie 用于访问别的也没使用.



django中cookie与session的实现原理

app默认注册了拦截器session, 浏览器的request先过这个拦截器后,走views逻辑

之后django_session表里会维护一个记录.

django session设置

Django中操作session:

  获取session:request.session[key]     request.session.get(key)
  设置session:reqeust.session[key] = value
  删除session:del request[key]

users/views.py

def login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
if username == "maotai" and password == "123456":
request.session['name'] = "maotai-session" #定义一个session key
request.session['name2'] = "maotai2-session"#定义一个session key name = request.session.get("name", "") # 获取一个session key
name2 = request.session.get("name2", "")
# return redirect("/")
return render(request, "index.html", {"name": name, "name2": name2}) #将session key返回到前端
else:
return render(request, "login.html")
elif request.method == "GET":
return render(request, "login.html")

登录系统

可以看到设置了一个cookie字段, 可见我后端无论设置多个session key, 都给前端返回一个cookie

这里我设置了2个
request.session['name'] = "maotai-session" #定义一个session key
request.session['name2'] = "maotai2-session"#定义一个session key

点登录可以获取到key.

templates/login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<div>
<form action="/login/" method="post">
<p><input type="text" placeholder="username" name="username"></p>
<p><input type="text" placeholder="password" name="password"></p>
<p><input type="submit"></p>
{% csrf_token %}
</form>
</div>
</body>
</html>

django cookie默认15天过期时间设置 settings.py

cookie可以有过期时间,这样浏览器就知道什么时候可以删除cookie了。

如果cookie没有设置过期时间,当用户关闭浏览器的时候,cookie就自动过期了。

你可以改变 SESSION_EXPIRE_AT_BROWSER_CLOSE 的设置来控制session框架的这一行为。

缺省情况下, SESSION_EXPIRE_AT_BROWSER_CLOSE 设置为 False ,这样,会话cookie可以在用户浏览器中保持有效达 SESSION_COOKIE_AGE 秒(缺省设置是两周,即1,209,600 秒)。

如果你不想用户每次打开浏览器都必须重新登陆的话,用这个参数来帮你。如果 SESSION_EXPIRE_AT_BROWSER_CLOSE 设置为 True ,当浏览器关闭时,Django会使cookie失效。

如果SESSION_EXPIRE_AT_BROWSER_CLOSE 设置为true的话,则每次关闭浏览器打开都得重新登录. 默认是false,即每次不必重新登录.

发现个小问题,即使每次重新登录, django_session里的session的旧记录仍然存在.

[py][mx]django的cookie和session操作-7天免登录的更多相关文章

  1. [py][mx]django处理登录逻辑

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

  2. Django之Cookie、Session、CSRF、Admin

    Django之Cookie.Session.CSRF.Admin   Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES['key'] request.get ...

  3. Django基础cookie和session

    Django基础cookie和session 1.会话跟踪 ​ 什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如给10086打个电话,你就是客户端, ...

  4. Django中cookie和session的操作

    一.cookie和session cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是 ...

  5. Django中Cookie和Session配置和操作

    Cookie Cookie以键值对Key-Value形势进行信息的存储. Cookie基于域名安全,不同域名的Cookie是不能互相访问的 Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏 ...

  6. Django中的Cookie和Session操作以及CBV

    1.Cookie 平常我们在浏览网页的时候,在需要输入密码的地方,如果已经登陆了一次,并且时间间隔比较近的话,是不需要登陆的,为什么了?这就是Cookie的作用. Cookie(或Cookies)指某 ...

  7. django的cookie和session以及内置信号、缓存

    cookie和session cookie和session的作用: cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话.两者最大的区别是cookie的信息是存放在浏览 ...

  8. django的cookie 和session

    Cookie 1.获取cookie: request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt=' ...

  9. Django组件-cookie与session

    一.会话跟踪技术 1.什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而 ...

随机推荐

  1. springboot集成rabbitmq的一些坑

    一.默认管理页面地址是 http://127.0.0.1:15672 但是spring配置连接里面要把端口改成5672,如果不配置的话默认就是端口5672 spring.rabbitmq.host=1 ...

  2. mysql 登录远程数据库

    mysql -h${hostIP} -P${hostPort} -u${userName} -p${passwd}

  3. java封装实现Excel建表读写操作

    对 Excel 进行读写操作是生产环境下常见的业务,网上搜索的实现方式都是基于POI和JXL第三方框架,但都不是很全面.小编由于这两天刚好需要用到,于是就参考手写了一个封装操作工具,基本涵盖了Exce ...

  4. background-color没有none值

    在工作中发现, 这样是没反应的, 要写这个样式才能去掉背景颜色(background-color:transparent;)

  5. Lucene.net(4.8.0) 学习问题记录六:Lucene 的索引系统和搜索过程分析

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  6. ubuntu16.04使用Qt开发ROS

    本文介绍一种Qt下进行ROS开发的完美方案,使用的是ros-industrial的Levi-Armstrong在2015年12月开发的一个Qt插件ros_qtc_plugin,这个插件使得Qt“新建项 ...

  7. Java的各种打包方式

    JAR (Java Archive file) 包含内容:class.properties文件,是文件封装的最小单元:包含Java类的普通库.资源(resources).辅助文件(auxiliary ...

  8. centos 安装教程 服务器配置教程 服务器中安装python 服务器中安装Django 安装MySQL 配置MySQL

    一 .解决python编译安装所需的软件依赖 yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel opens ...

  9. 为何串口dma发送数据可能不完整

    串口dma数据发送不完整, 1. 通过打印log说明数据合成,送给dma buff都是正常的. 2. 数据通过硬件串口直接配置,是正常的 3. 数据通过单片机dma转发后数据异常,通过检查发现 dma ...

  10. python实现支持目录FTP上传下载文件的方法

    #!/usr/bin/env python # -*- coding: utf-8 -*- import ftplib import os import sys class FTPSync(objec ...