Cookie 简单设置使用
cookie的理解可以为,存放在用户浏览器上的一个文件,里面是键值对数据,用于跟服务端通讯。前端可以通过jquery cookie插件设置和读取,后端直接设置
1、获取Cookie:
1
2
3
4
5
6
|
request.COOKIES[ 'key' ] request.get_signed_cookie(key, default = RAISE_ERROR, salt = '', max_age = None ) 参数: default: 默认值 salt: 加密盐 max_age: 后台控制过期时间 |
2、设置Cookie:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
rep = HttpResponse(...) 或 rep = render(request, ...) rep.set_cookie(key,value,...) rep.set_signed_cookie(key,value,salt = '加密盐' ,...) 参数: key, 键 value = '', 值 max_age = None , 超时时间 expires = None , 超时时间(IE requires expires, so set it if hasn't been already.)按日期时间算 path = '/' , Cookie生效的路径, / 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问 domain = None , Cookie生效的域名 secure = False , https传输,网站走https时要加上 httponly = False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖) |
由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie,如设置和获取。
后端设置加密的cookie:
res=redirect('/home')
res.set_signed_cookie('user1',u,max_age=5,salt='123')
后端获取加密cookie:
v = request.get_signed_cookie(key='user1',salt='123')
简单例子:
views:
from django.shortcuts import render,HttpResponse,redirect dic = {
"tom":{"pwd":''},
"lily":{"pwd":''}
}
def login(request):
if request.method=="GET":
return render(request,'login.html')
u=request.POST.get('user')
pwd=request.POST.get('pwd')
if dic.get(u):
if dic[u]["pwd"]==pwd:
res=redirect('/home')
# res.set_cookie('user1',u) #不设置缓存有效时间,浏览器重启后失效
# res.set_cookie('user1',u,max_age=5) #设置max_age指定多少秒后失效
import datetime
curr_time=datetime.datetime.now()
expire_time=curr_time + datetime.timedelta(seconds=5)
print(curr_time,expire_time)
res.set_cookie('user1',u,expires=expire_time) #设置max_age指定多少秒后失效
return res
else:
return redirect('/login')
return redirect('/login') def home(request):
v = request.COOKIES['user1']
if not v:
return render(request,'login.html') return render(request,'home.html',{"curr_user":v})
templates:
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
<input type="text" name="user" placeholder="用户名" />
<input type="text" name="pwd" placeholder="密码" />
<input type="submit"/>
</form>
</body>
</html> home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎你,{{ curr_user }}</h1>
</body>
</html>
额外功能views:
def page(request):
list = [] #生成要发给前端的数据列表
for i in range(1,779):
list.append(i) cur_page = request.GET.get('page')
if not cur_page:
cur_page = 1
else:
cur_page = int(cur_page) obj = paginations.page_mod(data=list,cur_page=cur_page,dis_count=10,tray_len=7)
data = obj.per_page_data #分页后的内容
nav_str = obj.page_str("/page") #分布后的导航 return render(request,'page.html',{'list':data,'dis_list':nav_str})
dic = {
"tom":{"pwd":'123'},
"lily":{"pwd":'111'}
}
def login(request):
if request.method=="GET":
return render(request,'login.html')
u=request.POST.get('user')
pwd=request.POST.get('pwd')
if dic.get(u):
if dic[u]["pwd"]==pwd:
res=redirect('/home')
res.set_cookie('user1',u) #不设置缓存有效时间,浏览器重启后失效
# res.set_cookie('user1',u,max_age=5) #设置max_age指定多少秒后失效
res.set_cookie('user1',u,path='/home') #设置生效url,只在规定uri路径下才能获取当前设置的cookie
# import datetime
# curr_time=datetime.datetime.now()
# expire_time=curr_time + datetime.timedelta(seconds=5)
# print(curr_time,expire_time)
# res.set_cookie('user1',u,expires=expire_time) #设置max_age指定多少秒后失效
return res
else:
return redirect('/login')
return redirect('/login') def home(request):
v = request.COOKIES.get('user1')
if not v:
return render(request,'login.html') return render(request,'home.html',{"curr_user":v})
...
Cookie 简单设置使用的更多相关文章
- Java用Cookie简单限制点赞次数
楼主最近在搞一个当下比较流行的点赞功能,这个功能也是让程序员又爱又恨啊 说起爱,点赞是个社会化的动作,全民都在为美好的事情,行为,动作,点赞. 说起恨,你很难在用户没有登录的情况下限制恶意点赞的机器人 ...
- Session会话与Cookie简单说明
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- Cookie简单实例
Cookie简单实例 1.创建CookieServlet package com.servlet.study; import java.io.IOException; import java.io.P ...
- 【配置】检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。
× 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式). 我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 5 ...
- EditPlus开发Python的简单设置
EditPlus是一个功能强大的编辑器,这里介绍用它来开发Python程序所需要的简单设置. 环境:win7 1.设置Python语法缩进: [1]工具-->设置用户自定义工具 [2]在分类面板 ...
- Android课程---Android Studio简单设置
Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings-->Appearance-->Theme, ...
- Kali-linux安装之后的简单设置
1.更新软件源:修改sources.list文件:leafpad /etc/apt/sources.list然后选择添加以下适合自己较快的源(可自由选择,不一定要全部): #官方源deb http:/ ...
- 【转】Android Studio简单设置
原文网址:http://ask.android-studio.org/?/article/14 Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以 ...
- Android Studio简单设置(转)
Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings --> Appearance --> Th ...
随机推荐
- undo系统参数详解
查看与undo相关的系统参数 1.undo_management 有两个参数值:auto.manual(默认) manual:系统启动后使用rollback segment存储undo信息: auto ...
- php优秀框架codeigniter学习系列——CI_Lang类学习
这篇文章主要介绍CI核心框架工具类CI_Lang. 根据CI文档自己的定义,该类用来: 提供相关的函数,用于检索语言文件和文本行,以便国际化. 以下选取类中的重点方法进行说明. __construct ...
- Java的命名规范
1.类名.接口名:首单词的第一个字母要大写.如果有多个单词,其他单词的首字母要大写. 2.包名:全部小写. 3.变量名.方法名:首单词的第一个字母小写.如果有多个单词,其他单词的首字母要大写. 4.常 ...
- 一个切换内外网IP地址的批处理BAT
做了一个切换内外网的小脚本.没想到这个老的没剩几颗牙的DOS竟然功能如此强大.盛名之下名副其实啊!不亏是想当年叱咤风云的操作系统啊! 脚本内容1.建立两个TXT文件,分别按行存储内外网的IP,MASK ...
- c语言实现两个单链表的交叉合并
#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; struc ...
- 小伙 zwfw-new.hunan.gov.cn.iname.damddos.com [222.240.80.52]
由于这个应用出问题非常影响用户体验:于是立马让运维保留现场 dump 线程和内存同时重启应用,还好重启之后恢复正常.于是开始着手排查问题.
- java web从入门到精通
1.Springboot配置 1.1mybatis mapper.xml所在的目录必须为resource的资源文件夹,如果xml文件在java的package里面,需要修改文件夹类型 idea修改方式 ...
- ubuntu编译安装opencv
简易安装opencv2: conda install --channel https://conda.anaconda.org/menpo opencv 或: sudo apt-get install ...
- MS Sql Server 查询数据库中所有表数据量
方法一: SELECT a.name,b.rows FROM sysobjects a INNER JOIN sysindexes b ON a.id=b.id ,) AND a.Type='u' O ...
- 远程过程调用发展历程 WebAPI GRPC Hprose
作者:马秉尧链接:https://www.zhihu.com/question/23299132/answer/109978084来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...