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. *** Collection <__NSArrayM: 0x600000647380> was mutated while being enumerated.

    *** Collection <__NSArrayM: 0x600000647380> was mutated while being enumerated.

  2. Selenium:集成测试报告

    参考内容:虫师:<selenium2自动化测试实战——基于python语言> PS:书中的代码,只能做参考,最好还是自己码一码,不一定照搬就全是对的,实践出真知啊,踩了很多坑的说... 随 ...

  3. lesson 8:小程序

    程序源代码: //20163683 蔡金阳 信1605-3 import java.io.*; import java.util.Scanner; public class kaoshi { publ ...

  4. .NET的弹性及瞬间错误处理库Polly

    原文:.NET的弹性及瞬间错误处理库Polly 本文基本是官方说明的翻译和总结(https://github.com/App-vNext/Polly) 什么是Polly? Polly是一款基于.NET ...

  5. 写入mssql出现乱码

    1.出现乱码的场景如下: --------------------------------------------------------------------------------------- ...

  6. zabbix中配置当memory剩余不足20%时触发报警

    在zabbix中默认当内存剩余量不足2G的时候触发报警,并没有使用百分比来触发如下: 现在需要配置:当memory剩余不足20%时触发报警,具体操作方法如下: 1)创建itemConfiguratio ...

  7. 熟记这些git命令,你就是大神

    1.git log  查看 提交历史 默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面 2.git log -p -2 常用 -p 选项展开显示每次提交的内容差异 ...

  8. OC与JS的交互(iOS与H5混编)

    大神总结WKWebView的坑:https://mp.weixin.qq.com/s/rhYKLIbXOsUJC_n6dt9UfA 在开发过程中,经常会出现需要iOS移动端与H5混编的使用场景. iO ...

  9. 《Linux内核分析》第八周:进程的切换和系统的一般执行过程

    杨舒雯(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用gdb ...

  10. 删除运行时权限不足,cmd开启管理员

    管理员帐号活跃代码:net user administrator /active:yes 搜索cmd-右键以管理员身份运行 切换administrator帐号登录 操作后最后关闭这么高的权限,避免被非 ...