Django中的cookie和session


Posted in Python onAugust 27, 2019

http协议是无状态的。下一次去访问一个页面时并不知道上一次对这个页面做了什么。

无状态的应用层面的原因是:浏览器和服务器之间的通信都遵守HTTP协议。

根本原因是:浏览器与服务器是使用Socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的Socket连接,而且服务器也会在处理页面完毕之后销毁页面对象。

有时需要保存下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等。 实现状态保持主要有两种方式:

在客户端存储信息使用Cookie。在服务器端存储信息使用Session。cookiecookie及其使用

Django中的cookie和session

cookie是由服务器生成,存储在浏览器端的一小段文本信息。

cookie的特点:

  • 1)以键值对方式进行存储。
  • 2)通过浏览器访问一个网站时,会将浏览器存储的跟网站相关的所有cookie信息发送给该网站的服务器。request.COOKIES
  • 3)cookie是基于域名安全的。www.baidu.com www.tudou.com
  • 4)cookie是有过期时间的,如果不指定,默认关闭浏览器之后cookie就会过期。

cookie使用示例

设置cookie

def set_cookie(request):
  """设置cookie信息"""
  response = HttpResponse("设置cookie")
  # 设置一个cookie信息,名字为num,值为1
  response.set_cookie('num', 1)  
  # 返回response
  return response

获取cookie

def get_cookie(request):
  """获取cookie信息"""
  # 取出cookie num的值
  num = request.COOKIES['num']
  return HttpResponse(num)

设置cookie过期时间

def set_cookie(request):
  """摄制cookie信息"""
  response = HttpResponse("设置cookie")
  # 设置一个cookie信息,名字为num,值为1,并且设置 cookie的过期时间为2周,两种方式
  response.set_cookie('num', 1, max_age=14*24*3600)
  # response.set_cookie('num', 1, expires=datetime.now()+timedelta(days=14))
  return response

设置多个cookie

def set_cookie(request):
  """摄制cookie信息"""
  response = HttpResponse("设置cookie")
   # 设置多个cookie
  response.set_cookie('num', 1)
  response.set_cookie('num2', 2)
  return response

cookie记住用户名示例

编写login.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Login</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<form action="/login_check/" method="post">
  <label for="username">用户:
    <input type="text" id="username" name="username" value="{{ usernam }}">
  </label>
  <br />
  <label for="password">密码:
    <input type="password" id="password" name="password">
  </label>
  <br />
  <input type="checkbox" name="remember">记住用户名
  <br />
  <input type="submit" value="登录">
</form>

</body>
</html>

编写login_check函数

def login_check(request):
  # 1.获取用户名和密码
  username = request.POST.get("username")
  password = request.POST.get("password")
  remember = request.POST.get("remember")
  print(username, password)
  # 2.进行校验
  # 3.返回应答
  if username == "yifchan" and password == "yifchan":
    response = redirect("/index")
    # 判断是否需要记住用户名
    if remember == 'on':
      # 设置cookie username-过期时间为1周
      response.set_cookie('username', username, max_age=7*24*3600)
    return response
  else:
    return HttpResponse("账号或密码错误")

编写login函数

def login(request):
  """登录处理函数"""
  # 获取cookie username
  if 'username' in request.COOKIES:
    username = request.COOKIES['username']
  else:
    username = ''
  return render(request, "booktest/login.html", {'usernam': username})

设计路由

url(r'^login/$', views.login), 
url(r'^login_check/$', views.login_check),

Session

Django中的cookie和session

session存储在服务器端。

session的特点:

  • 1) session是以键值对进行存储的。
  • 2) session依赖于cookie。唯一的标识码保存在sessionid cookie中。
  • 3) session也是有过期时间,如果不指定,默认两周就会过期。

session对象和方法

对象及方法

通过HttpRequest对象的session属性进行会话的读写操作。

1) 以键值对的格式写session。

request.session['键']=值

2)根据键读取值。

request.session.get('键',默认值)

3)清除所有session,在存储中删除值部分。

request.session.clear()

4)清除session数据,在存储中删除session的整条数据。

request.session.flush()

5)删除session中的指定键及值,在存储中只删除某个键及对应的值。

del request.session['键']

6)设置会话的超时时间,如果没有指定过期时间则两个星期后过期。

request.session.set_expiry(value)

  • 如果value是一个整数,会话将在value秒没有活动后过期。
  • 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期。
  • 如果value为None,那么会话永不过期。

session使用示例

# 设置session
def set_session(request):
  """设置session"""
  request.session['username'] = 'yifchan'
  request.session['age'] = 18
  request.session.set_expiry(10) # 设置session的有效时间为10s
  return HttpResponse('设置session成功')


# 获取session
def get_session(request):
  """获取session"""
  username = request.session['username']
  age = request.session['age']
  info = username + ":" + age
  return HttpResponse(info)


# 清除session
def clear_session(request):
  """清除session信息"""
  # request.session.clear() # 只会清除有用信息部分,但这整条信息不回被清除
  request.session.flush() # 清除整条session信息
  return HttpResponse("清除session成功")

注意:所谓的session过期指的是浏览器端存储的cookie的sessionid过期了。

cookie和session的应用场景

cookie:记住用户名。安全性要求不高。
session:涉及到安全性要求比较高的数据。例如银行卡账户,密码等。

总结

以上所述是小编给大家介绍的Django中的cookie和session,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python 命令行参数sys.argv
Sep 06 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
Feb 19 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
python中学习K-Means和图片压缩
Nov 20 Python
用Python写王者荣耀刷金币脚本
Dec 21 Python
python中的变量如何开辟内存
Jun 26 Python
python xpath获取页面注释的方法
Jan 14 Python
python动态视频下载器的实现方法
Sep 16 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
Python接口自动化测试框架运行原理及流程
Nov 30 Python
分享unittest单元测试框架中几种常用的用例加载方法
Dec 02 Python
Python max函数中key的用法及原理解析
Jun 26 Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 #Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 #Python
在Python中获取操作系统的进程信息
Aug 27 #Python
python3 下载网络图片代码实例
Aug 27 #Python
Python (Win)readline和tab补全的安装方法
Aug 27 #Python
python中字典按键或键值排序的实现代码
Aug 27 #Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 #Python
You might like
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
Python连接Redis的基本配置方法
2018/09/13 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
使用python实现对元素的长截图功能
2019/11/14 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
信访工作经验交流材料
2014/05/23 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS
Golang 并发编程 SingleFlight模式
2022/04/26 Golang