Django中session和cookie简单的使用

一、简单的理解

session和cookie是request下的两个对象,操作他们的值就是在操作字典,设置他们的属性就是调用方法。

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。解决此问题,常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

在Django中要用session一定要先执行(创建表的过程):
python manage.py makemigrations
python manage.py migrate

在这里插入图片描述

二、session:

*session存储机制
(1)、当用户来访问服务端时,服务端生成一个随机字符串;
(2)、当用户登录成功后 把 {sessionID :随机字符串} 组织成键值对 加到 cookie里发送给用户;
(3)、服务器以发送给客户端 cookie中的随机字符串做键,用户信息做值,保存用户信息;

所以服务器存储的session格式应该是:
{sessionid:{‘username’:xx,‘password’:yy}}
request.session[‘username’] = ‘xx’
默认生成了随机的sessionid,并且隐含了通过sessionID找到用户信息那一步;

1.、设置值(字典):

request.session['username'] = 'Genius淼'
request.session['password'] = 'genius123'request.session.setdefault('username','password')#username 默认值为'password'

2、设置属性

request.session.set_expiry(value) -- 设置session过期时间,默认是两周。value:
- 数字(单位:秒)
- datatime(具体日期)
- None(依据全局失效策略)
- timedelta(时间增量)
注意:request.session.set_expiry(timedelta(days=30))时要在setting中添加:SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer'

3、查看

request.session.keys()  
request.session.values() 
request.session.items()	

4、获取

request.session["username"] 		 #  以字典形式读取,键不存在会报错
request.session.get("username")		 #  以get方法形式读取,键不存在会报错
request.session.get("username",None) #  加参,如果username不存在则读取到None
request.session.session_key		     # 用户session的随机字符串

5、删除

del request.session["username"]		# 以字典形式删除
request.session.delete("username")	# 以方法形式删除
request.session.delete('session_key') #删除所有session
request.session.clear()				# 删除所有session
request.session.clear_expired()		# 删除已失效session
在setting中配置session(转)

session存储位置:
数据库(默认) SESSION_ENGINE = ‘sdjango.contrib.sessions.backends.db’
缓存 SESSION_ENGINE = ‘django.contrib.sessions.backends.cache’
文件 SESSION_ENGINE = ‘django.contrib.sessions.backends.file’
缓存+数据库 SESSION_ENGINE=‘django.contrib.sessions.backends.cached_db’
加密cookie(相当于没有用session,又把敏感信息保存到客户端了) SESSION_ENGINE = ‘django.contrib.sessions.backends.signed_cookies’

#session配置文件
SESSION_ENGINE = ‘django.contrib.sessions.backends.db’ # 引擎(默认)

SESSION_FILE_PATH = 文件路径 # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()

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,默认修改之后才保存(默认)


三、cookie:

在django中,cookie是在声明一个HttpResponse之后,通过set_cookie方法来设置的。它通过在响应头里Set-Cookie设置键值对来实现在浏览器客户端保存Cookie。

res = HttpResponse()		# 具体是什么响应要看自己的return

  • 设置值(字典):

     res.set_cookie('username','password')res.set_cookie('Genius淼','genius123')
    
  • 获取

      username = request.COOKIES.get('username')
    
  • 删除

      res.delete_cookie('username')
    
  • 设置属性
    查看HttpResponseBase类:

    def set_cookie(self, key, value='', max_age=None, expires=None, path='/',domain=None, secure=False, httponly=False):......
    

    可传参:
    key:Cookie的名称
    value:Cookie的值
    max_age:失效时间,单位-秒。默认是-1 ——>负数:关闭浏览器失效;0表示删除该cookie。
    expires:失效日期,同session的set_expiry
    path:该Cookie的使用路径,’/‘为允许所有。’/index/‘则只能在/index下可以访问,注意最后的 /
    domain:可以访问该cookie的域名,以 ‘.‘开头’,如’.baidu.com’
    secure:该Cookie是否仅被使用安全协议传输,默认是False。当使用https时,必须要secure设置为True
    httponly:限制在浏览器控制台获取键值对,但无法对抓包工具进行限制。

    举例:res.set_cookie(“age”, “10”,max_age=“10”,expires=“2019-01-31”,)

  • 加密
    设置值:res.set_signed_cookie(‘age’, ‘10’,salt=“I’m secript”)
    取值:request.get_signed_cookie(‘age’,salt=“I’m secript”)
    如同多加了一条暗号

session与cookie参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

摄影中的曝光补偿是什么?

When you use your camera in some automatic modes like Program—or one of the semi-manual modes like Aperture Priority or Shutter Speed Priority—you don’t give up total control over everything: you can still control the exposure using exposure compensatio…

ajax回调打开新窗体防止浏览器拦截方法

2019独角兽企业重金招聘Python工程师标准>>> 问题剖析: function click_fun(){ window.open("www.baidu.com");//能打开 $.ajax({ url: ${pageContext.request.contextPath}/activity/savePrizes.htm, type: post, dataType: json, data: data…

ES6学习--对象属性的遍历

ES6一共有5种方法可以遍历对象的属性。 (1)for...in for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)。 (2)Object.keys(obj) Object.keys返回一个数组,包括对象自身的&#xff…

多点认证wi-fi_准备使用Wi-Fi 6:认证将于2019年第三季度启动

多点认证wi-fiThe Wi-Fi Alliance already announced Wi-Fi 6 back in October. Today, it’s announcing the details of the Wi-Fi 6 certification process, which will launch in the third quarter of 2019. Expect many new Wi-Fi 6 devices later this year. Wi-Fi联盟已…

jQuery初识和常用事件(一)

文章目录一、jQuery二、入口函数三、选择器选择器小结 ★全部选择器参考 ☆四、常用的 jQuery 事件方法事件写法鼠标事件元素事件键盘事件文档/窗口事件全部事件方法参考 ☆五、效果事件显示与隐藏:hide,show,toggle淡入和淡出:fa…

nginx内嵌变量

FORWARD:http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_core_module.html#variables ngx_http_core_module模块支持内嵌变量,变量名与Apache服务器对应。 首先,这些变量可以表示客户端的请求头字段,诸如$http_user_agent、$ht…

pdf文档遇到了共享冲突_如何将链接共享为PDF格式的Google文档链接

pdf文档遇到了共享冲突Using Google Docs is a great way to collaborate on and share documents. Sometimes, though, you want to provide somebody with a PDF instead of an editable document. Google Docs now lets you edit your sharing link to provide a PDF. Best …

Visual Studio 2019 preview中体验C# 8.0新语法

准备工作: Visual Studio 2019 Preview版本中并没有包含所有的C# 8.0的新功能,但目前也有一些可以试用了。在开始之前,需要进行入两项设置: 将Framework设置为.net core 3.0 将C#语法设置为8.0 也可以直接编辑.csproj文件&#x…

jQuery 对HTML的操作(二)

文章目录一、jQuery获取、设置HTML标签的内容和属性获得内容 - text()、html() 以及 val()获取属性 - attr(),prop()二、增删 HTML 的内容增加删除三、操作CSSaddClass 添加removeClass 删除toggleClass 切换css 获取与设置所有操作html、css方法参考 ☆四、操作元素…

roku能不能安装软件_如何在Roku中使用Google Assistant

roku能不能安装软件As more of our devices connect to each other, it’s always nice to know that different products from different companies work together. A Chromecast isn’t expensive, but being able to use your TV directly with Google Assistant is better.…

在线建立或重做mysql主从复制架构方法(传统模式和GTID模式)【转】

mysql主从复制架构,是mysql数据库主要特色之一,绝大多数公司都有用到。 而GTID模式是基于事务的复制模式的意思,发展到现在也是越来越多人用。 以前很多文章,介绍搭建mysql主从复制架构,是需要停止应用服务来做的,对于生产环境&am…

面试学习资料

1 Java面试资料总结 (github推荐指数高) 2 后端架构师 1. 综合 《Java 面试题 —— 老梁 Java 面试通关要点汇总集》《Java 面试题 —— 老徐 Java 初中级准备的面试题》《Java 面试题 —— 零度 Java 面试题系列》《Java 面试题 —— 东黄的学习方法和面…

jQuery对Ajax的封装应用(三)

文章目录一、Ajax二、load三、ajax(参数),get,set$.ajax$.ajax的get、post简写形式四、ajax全部方法参考 ☆一、Ajax AJAX 是与服务器交换数据的技术,它在不重载全部页面的情况下,实现了对部分网页的更新。…

如何使用卡巴斯基急救盘清理感染的PC

When you’re dealing with a PC that is completely infected in viruses, sometimes the best thing to do is reboot into a rescue disk and run a full virus scan from there. Here’s how to use the Kaspersky Rescue Disk to clean an infected PC. 当您要处理一台完全…

2018.12.08 codeforces 946D. Timetable(背包)

传送门 题意简述:有一个人上n天课,每天有m个小时的时间安排表(一个01串),为1表示要上课,否则不上课,求出如果可以最多翘kkk节课这nnn天在校待的总时间的最小值(一天必须在所有课上完…

jQuery杂项进阶(四)

文章目录一、$ 的替换二、使用JSONP实现跨域三、jQuery 杂项方法、实用工具、回调对象、延迟对象参考 ☆四、jQuery 自身属性参考 ☆五、jQuery 插件介绍和参考 ☆jQuery 树型菜单插件(Treeview)jQuery Validate表单验证,jQuery Password Validation(密码…

什么是WLIDSVC.EXE和WLIDSVCM.EXE,它们为什么运行?

You’re no doubt reading this article because you’re wondering what those two processes are doing cluttering up Task Manager, and also wondering why they are in capital letters. You’ve come to the right place. 毫无疑问,您阅读本文是因为您想知道…

[USACO10DEC] Treasure Chest

题目链接 90 Points:智障的区间 DP……设 dp[i][j] 表示区间 [i, j] 能取的最大价值,但我还是 sd 地开了第三维表示先取还是后取的价值。 交上去以为能 A,结果 #2 开心地 MLE……一看内存,64MB(把评测机吊起来打一顿&a…

工程化,模块化,组件化,规范化

前端讲究 工程化,模块化,组件化,层层递进。 一、工程化 工程化是整个工程的结构、样式和动作分离,工程化是一种思想而不是某种技术(当然为了实现工程化我们会用一些技术)。各种规范、技术选型、项目构建优…

linux压缩和解压缩_Linux QuickTip:一步下载和解压缩

linux压缩和解压缩Most of the time, when I download something it’s a file archive of some kind – usually a tarball or a zip file. This could be some source code for an app that isn’t included in Gentoo’s Portage tree, some documentation for an internal …