cookie:  现在所有网站基本都要开启cookie

  客户端浏览器上的一个文件

  例如:   {‘key’: 'sefwefqefwefw'} 是一个键值对

简单实现cookie认证:

user_in = {
'zhangjian': {'pwd': '123'},
'xiefengmei': {'pwd': '123'},
}
def log(request):
if request.method == 'GET':
return render(request, 'log.html')
if request.method == 'POST':
u = request.POST.get('username')
p = request.POST.get('pwd')
dic = user_in.get(u)
if not dic:
return render(request, 'log.html')
if dic['pwd'] == p:
res = redirect('/tpl/')
res.set_cookie('username', u)
return res
else:
return render(request, 'log.html') def tpl(request):
v = request.COOKIES.get('username')
if not v:
return redirect(request, '/log/')
return render(request, 'tpl.html', {'current_user': v})

HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{{ current_user }}</h1>
</body>
</html>

获取客户端的cookie:

request.COOKIES

request.COOKIES['username111']

request.COOKIES.get('username111')

设置用户cookie:

response = render(request, 'index.html')

response = redirect('/index/')

response.set_cookie('key',‘value’) #这种方式只能设置cookie, 关闭浏览器就会失效

return response

设置加密的cookie:

obj = HttpResponse('s')

obj.set_signed_cookie('username',"zhangjian",salt="wioahf2i3")  #设置加密的cookie,salt是一个加密字符串

request.get_signed_cookie('username',salt="wiioahf2i3") #接收加密的cookie,利用salt解密

cookie参数:

超时时间:

   1.response.set_cookie('key',‘value’,max_age=10) # max_age过期时间,cookie失效时间,多少秒之后失效

   2. import datetime

    current_date = datetime.datetime.utcnow() + datetime.timedelta(seconds=10)

    response.set_cookie('key',‘value’,expires=current_date)  # expires是到什么时间失效

路径:

  response.set_cookie('key',‘value’,path=‘/’)  #cookie生效的路径, ‘/’表示根路径,根路径的cookie可以被任何url访问

域名:

  response.set_cookie('key',‘value’,domain=None) #cookie生效的域名

其他:

  response.set_cookie('key',‘value’,secure=False) #如果是https的网站需要,改为True

  response.set_cookie('key',‘value’,httponly=False) #表示只能使用http协议传输,无法使用javascript获取(document.cookie)

JS操作cookie:

def user_list(request):
current_page = request.GET.get('p', 1)
current_page = int(current_page)
val = request.COOKIES.get('per_page_count',10) #取出前端JS传来的cookie里面的 ‘per_page_count’ ,默认值设置为10
page_obj = Page(current_page, len(LIST), int(val)) data = LIST[page_obj.start: page_obj.end] page_str = page_obj.page_str("/user_list/")
return render(request, 'user_list.html', {'li': data, 'page_str': page_str})

HTML

    <script src="/static/jquery.min.js"></script>
<script src="/static/jquery.cookie.js"></script>
<script>
$(function() {    #网页加载时运行          
var v = $.cookie('per_page_count'); #加载网页时 取cookie里面‘per_page_count’的值v
$('#ps').val(v);             #将值v设置到 id=ps 的标签里面
}); function changePageSize(ths) {
var v = $(ths).val(); #绑定 onchange事件得到值 v
$.cookie('per_page_count', v); #将 v 设置到 键为‘per_page_count’里面
location.reload(); #刷新网页
}; </script>

  

简单的用JS设置一个cookie:

基于cookie做用户验证时:敏感信息不适合放在cookie中

session原理:

  cookie是保存在用户浏览器的键值对

  session是保存在服务器端的键值对

    例如: session = afhashebwf213@!#: {

              'is_login': True,

              'user': 'zhang'

              'nid': ...

              ...

            }

# 基于session做用户验证
def logi(request):
if request.method == "GET":
return render(request, 'logi.html')
elif request.method == "POST":
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'root' and pwd == "123":
request.session['username'] = user # 给session中设置值
request.session['is_login'] = True  # 给session中设置值 
return redirect('/ind/')
else:
return render(request, 'logi.html') def ind(request):
if request.session['is_login']: # 获取session中的值
return HttpResponse(request.session['username'])
else:
return HttpResponse('请你登录')

  

# 获取、设置、删除Session中数据

request.session['k1']  #取k1的值 如果不存在报错
request.session.get('k1',None)  #取k1的值 如果不存在返回None
request.session['k1'= 123   #设置k1的值为123
request.session.setdefault('k1',123# 存在则不设置
del request.session['k1']  #删除k1
 
# 所有 键、值、键值对
request.session.keys() 
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()
 
# 用户session的随机字符串
request.session.session_key
 
# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()
 
# 检查 用户session的随机字符串 在数据库中是否
request.session.exists("session_key")
 
# 删除当前用户的所有Session数据
request.session.delete("session_key")
 
request.session.set_expiry(value)
      * 如果value是个整数,session会在些秒数后失效。
      * 如果value是个datatime或timedelta,session就会在这个时间后失效。
      * 如果value是0,用户关闭浏览器session就会失效。
      * 如果value是None,session会依赖全局session失效策略。
 
#注销时清空session
def logout(request):
request.session.clear()
return redirect('/login/')

#设置session来实现免登陆

<form action="/logi/" method="POST">
<input type="text" name="user"/>
<input type="text" name="pwd"/>
<input type="checkbox" name="rmb" value="1" /> 10秒免登陆
<input type="submit" value="提交"/>
</form>
def logi(request):
if request.method == "GET":
return render(request, 'logi.html')
elif request.method == "POST":
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'root' and pwd == "123":
request.session['username'] = user
request.session['is_login'] = True
if request.POST.get('rmb',None) == '1':
request.session.set_expiry(10) # 超时时间
return redirect('/ind/')
else:
return render(request, 'logi.html')

#session配置文件及其参数:

settings.py里面配置管理

     SESSION_ENGINE = 'django.contrib.sessions.backends.cache'    # 引擎

    SESSION_CACHE_ALIAS = 'default'                                                   # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
 
    SESSION_COOKIE_NAME = "sessionid"                                             # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
    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_COOKIE_AGE = 1209600                                                       # Session的cookie失效日期(2周)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                                   # 是否关闭浏览器使得Session过期
    SESSION_SAVE_EVERY_REQUEST = False                                            # 是否每次请求都保存Session,默认修改之后才保存(每次用户操作需不需要更新过期时间)

#  引擎的配置Django中默认支持Session,其内部提供了5种类型的Session供开发者使用:

  • 数据库(默认)
  • 缓存
  • 文件
  • 缓存+数据库
  • 加密cookie

1. 数据库:

  SESSION_ENGINE = 'django.contrib.sessions.backends.db'  # 表示把session放在数据库中

2. 缓存:

   SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 表示把session放在缓存中存储

   SESSION_CACHE_ALIAS = 'memcache-1'
  

    CACHES = {    # 例如memcache连接信息
'memcache-1': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
3. 文件:
    SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 表示把session存储在临时文件中

    SESSION_FILE_PATH = os.path.join(BASE_DIR,'cache')    # 表示存储session的临时文件的文件路径
4. 缓存+数据库同时使用:
      SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' 
5. 加密cookie
     SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
 
 
 
 
 
 

Django-website 程序案例系列-10 cookie 和 session的应用的更多相关文章

  1. Django学习系列之Cookie、Session

    Cookie和Session介绍 cookie 保存在客户端 session 保存在服务端 session依赖于cookie,比如服务端想往客户端写东西的时候就把cookie写到客户端浏览器 djan ...

  2. Django学习笔记(5)——cookie和session

    一,前言 1.1,什么是会话跟踪技术 在JavaWeb中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束.在一个会话的多个请求中共享数据,这就是会话跟踪技术. 例如在一 ...

  3. django 2 ORM操作 ORM进阶 cookie和session 中间件

    ORM操作 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...

  4. Django的Form、CSRF、cookie和session

    Django是一个大而全的web框架,为我们提供了很多实用的功能,本文主要介绍Form.CSRF.cookie和session 一.Form 在web页面中form表单是重要的组成部分,为了数据安全和 ...

  5. Django(十三)状态保持 —— cookie与session+ajax异步请求+session记住登录状态+cookie记住登录名密码

    一.状态保持的概述 http协议是无状态的.下一次去访问一个页面时并不知道上一次对这个页面做了什么.因此引入了cookie.session两种方式来配合解决此问题. Duplicate entry:重 ...

  6. Django之Form、CSRF、cookie和session

    Django是一个大而全的web框架,为我们提供了很多实用的功能,本文主要介绍Form.CSRF.cookie和session 一.Form 在web页面中form表单是重要的组成部分,为了数据安全和 ...

  7. 关于django用户登录认证中的cookie和session

    最近弄django的时候在用户登录这一块遇到了困难,网上的资料也都不完整或者存在缺陷. 写这篇文章的主要目的是对一些刚学django的新手朋友提供一些帮助.前提是你对django中的session和c ...

  8. PHP学习10——Cookie和Session技术

    主要内容: Cookie技术 创建cookie 查看cookie 读取cookie 用cookie记录访问时间和次数 删除cookie cookie的生命周期 Session技术 session工作原 ...

  9. Django框架(十六)—— cookie和session组件

    目录 cookie和session组件 一.cookie 1.cookie的由来 2.什么是cookie 3.cookie的原理 4.cookie的覆盖 5.在浏览器中查看cookie 6.cooki ...

随机推荐

  1. saltstack配置管理之states

    states是saltstack中的配置语言,我们安装一个包,管理一个配置文件,最后保证服务的正常运行,都需要我们编写一些states sls文件(描述状态的文件)去描述和实现我们的功能.sls文件都 ...

  2. 学习CSS布局 - 没有布局

    如果你只想把所有内容都塞进一栏里,那么不用设置任何布局也是OK的. 然而,如果用户把浏览器窗口调整的很大,这时阅读网页会非常难受: 读完每一行之后,你的视觉焦点要从右到左移动一大段距离. 试着调整下浏 ...

  3. Spark运行时错误与解决

    Spark  java.io.IOException: Filesystem closed partition数量太小,读取数据后进行repartition重新分片再处理. Spark Streami ...

  4. TerraGate软件安装后,服务无法启动的解决方法

    前些天有朋友问,TerraGate安装后,服务无法启动,而且启动按钮也是不可用的状态,不知道是为什么,如下图: 打开TerraGate的安装目录,发现里面缺少一些文件,如下图: *解决办法: 重新安装 ...

  5. Oracle 将一个查询结果值动态赋值给一个变量

    在写存储过程或函数时,经常需要用到中间变量,需要将一些值做临时存储. 可以通过动态变量方式来赋值.如下: FUNCTION YOUR_FUN (VAL1 IN NVARCHAR2) RETURN NC ...

  6. Python写代码的时候为什么要注释?Sun因此被Oracle收购

    导读: 此块分为:1.注释的重要性 2.如何正确注释 注释的重要性 在我们看代码的时候,会遇到很多看不懂得代码,特别是在做项目的时候,代码的注释以及命名习惯的重要性就有了为什么这么说呢? 因为在很多情 ...

  7. CF1110H Modest Substrings AC自动机、DP

    传送门 如果\(r-l\)比较小,可以将所有满足条件的串扔进\(AC\)自动机然后在上面DP,从前往后确定字符串的每一位. 但是\(l,r \leq 10^{800}\)就十分不可行,所以需要优化这个 ...

  8. JQuery加载html网页

    在ASP.NET MVC环境中,使用jQuery脚本去实现加载html网页. 一般情况之下,在ASP.NET MVC项目中,你不能在~/Views目录之下添加或是创建任何html为后缀的网页.但这也不 ...

  9. Luogu P2473 [SCOI2008]奖励关

    比较恶心的概率(期望)+状压DP,想正推2H的我瑟瑟发抖 由于数据范围不大,因此我们可以直接状压每个宝物取或不取的情况,设\(f_{i,j}\)表示前\(i\)轮且宝物是否取过的状态为\(j\)时的方 ...

  10. TRIO-basic指令--九九乘法表demo

    在路上闲的没事,想到之前自己用别的语言实现乘法口诀表,于是来了兴趣用TRIO-basic试一下,挺简单的一段代码,大家看看就好. ' TRIO-basic '实现乘法口诀表 定义两个整型的局部变量 D ...