一、session和sessionid:

sessionid是cookie的一个字段,sessionid一般如下:

 """请求报文"""
"""
GET /myapp1/session/ HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cookie: login_flag=1; login_name=admin; sessionid=wdsj0ug1yuy634xhqn0ln010ghwk3ofr
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
"""
""""""

这里要明确一个session是存在数据库后端的,cookie是存在客户端(用户)本地的。

sessionid 并不只是可以名字是sessionid,也可以是sid,jsessionid,phpsessionid等等,再来看一个百度的:

 """
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cookie: BAIDUID=8078C92C8DB5E9579911B40A626F655F:FG=1; BIDUPSID=8078C92C8DB5E9579911B40A626F655F; PSTM=1516783068; BD_HOME=0; H_PS_PSSID=1441_18194_21116_20928
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
"""

来看看相关session的配置文件:

 #配置setting.py

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

针对这些配置讲解如何才能更安全:

1、session的路径建议单独保存,切不可再web服务上直接范文。

2、对应的域要配置

3、https肯定要支持

4、过期时间建议不超过2h

5、关闭浏览器过期是必须的

服务器端需要用的很多东西就可以存储在session中而不是sessionid中!例如可以验证码的值存储在sessionid中

例如一个验证码:

可以通过某种图片方式传递到客户端,然后服务器端存储在session中,等待请求报文发过来验证:

 def verify(request):
if request.method != 'POST':
s = uuid.uuid1()
s = str(s)
content = {}
content["code"] = s
request.session["verifycode"] = s
return render(request,"verify.html",content)
else:
if request.POST["code"] == request.session["verifycode"]:
user = request.COOKIES.get("login_name")
print user
print request.COOKIES
if user == None:
return HttpResponseRedirect("/myapp1/login")
response = HttpResponseRedirect("/myapp1/mainpage?name=%s"%user)
response.set_cookie("login_flag","")
return response

可以总结出session的存取:

 #session的读:
request.session["key_name"]
#或者:
request.session.get("key_name")
request.session.get("key_name",None) #session的写:
session["key"] = value """
在Django中要用session中一定要先执行: python manage.py makemigrations python manage.py migrate
"""

其他操作:

 request.session.setdefault('k1',123)  #存在则不设置
del request.session['k1'] #删除键值对
request.session.clear() #删除session #所有 键、值、键值对
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失效策略。

Django学习笔记第十一篇--关于session的更多相关文章

  1. Django学习笔记(进阶篇)

    Django学习笔记(进阶篇):http://www.cnblogs.com/wupeiqi/articles/5246483.html

  2. Django学习笔记(基础篇)

    Django学习笔记(基础篇):http://www.cnblogs.com/wupeiqi/articles/5237704.html

  3. ASP.NET Core 2 学习笔记(十一)Cookies & Session

    基本上HTTP是没有记录状态的协定,但可以通过Cookies将Request来源区分出来,并将部分数据暂存于Cookies及Session,是写网站常用的用户数据暂存方式.本篇将介绍如何在ASP.NE ...

  4. Django学习笔记第六篇--实战练习二--简易实现登录注册功能demo

    一.绪论: 简易实现登录功能demo,并没有使用默认身份验证模块,所以做的也很差,关闭了csrf保护,没有认证处理cookie和session,只是简单实现了功能.另外所谓的验证码功能是伪的. 二. ...

  5. Django学习笔记第三篇--关于响应返回

    一.返回简单类型: #1.返回简单字符串 #from django.http import HttpResponse return HttpResponse("return string&q ...

  6. Python框架之Django学习笔记(十一)

    话说上次说到数据库的基本访问,而数据库我们主要进行的操作就是CRUD,也即是做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete),俗 ...

  7. Django学习笔记第十篇--实战练习六--发送邮件

    一.发送邮件需要引入的包依赖文件(Django1.8 Python2.7) from django.core.mail import send_mail,send_mass_mail 其中send_m ...

  8. Django学习笔记第八篇--实战练习四--为你的视图函数自定义装饰器

    零.背景: 对于登录后面所有视图函数,都需要验证登录信息,一般而言就是验证cookie里面的一些信息.所以你可以这么写函数: def personinfo(request): ": retu ...

  9. Django学习笔记第七篇--实战练习三--关于更有层级的url请求、404错误以及其他响应函数

    一.关于更有层级的URL: 可以实现每一个APP一个子URL目录,例如app1的所有操作都在http://www.localhost1.com:5443/app1/xxxx 在工程主文件夹下的工程同名 ...

随机推荐

  1. 零基础学python-5.4 数字精度与复数

    1.整数精度 这里我们对照一下python2.7与python3.4的整数精度 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/ ...

  2. JEECG 多数据源设计

    转至元数据起始   为什么要有多数据源? 通常一个系统只需要连接一个数据库就可以了,Jeecg数据源是配置在spring-mvc-hibernate.xml文件中,这种数据源我们叫做主数据源.但是在企 ...

  3. Ubuntu中建立ftp 503错误解决办法

    The problem is because your folder is owned by root, instead of ftpuser. To fix it run: sudo chown - ...

  4. java中native关键字的用法

    前言: 如果阅读过JDK的源码,我们会发现Thread.java类里有一个方法比较特殊 private native void start0(); 概念: native关键字说明其修饰的方法是一个原生 ...

  5. SCUT入门-环境搭建

    SCUT是一款基于C#且开源的游戏服务端框架,并且有一定的上线项目.最近正在入门中... 1.安装 去官网可以直接下载安装版:http://www.scutgame.com/ 源代码建议OSC Chi ...

  6. samba 文件和目录权限控制

    [laps_test]         comment = laps_test         path = /home/laps         browseable = yes         w ...

  7. 李洪强iOS开发之数据存储

    李洪强iOS开发之数据存储 iOS应用数据存储的常用方式 1.lXML属性列表(plist)归档 2.lPreference(偏好设置) 3.lNSKeyedArchiver归档(NSCoding) ...

  8. ubutun:从共享文件夹拷贝文件尽量使用cp命令而不是CTRL+C/V

    为了方便,VBOX安装的Ubuntu,并在硬盘上创建了一个与Windows的共享文件夹sharefolder方便在两个系统之间传文件 但是经常发现的问题就是从sharefolder中拷贝文件到ubun ...

  9. poj3261(后缀数组)

    题意:给出一串长度为n的字符,再给出一个k值,要你求重复次数大于等于k次的最长子串长度........ 思路:其实也非常简单,直接求出height值,然后将它分组,二分答案......结果就出来了.. ...

  10. beaglebone black ubuntu display x11 server的配置

     Change default resolution on BeagleBone modesetting vs fbdev digiteltlc May 7th, 2014, 03:28 PM Hi ...