一、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. 机器学习基石第三讲:types of learning

    博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕机器学习基石的第三讲.这一讲主要介绍了机器学习的分类.对何种问题应该使用何种 ...

  2. ASP.NET Identity & OWIN 学习资料

    有关 ASP.NET Identity 的更多细节: http://www.asp.net/identity 从一个空项目中添加 ASP.NET Identity 和 OWIN 支持: http:// ...

  3. POJ 3279 Fliptile (二进制+搜索)

    [题目链接]click here~~ [题目大意]: 农夫约翰知道聪明的牛产奶多. 于是为了提高牛的智商他准备了例如以下游戏. 有一个M×N 的格子,每一个格子能够翻转正反面,它们一面是黑色,还有一面 ...

  4. hadoop+spark集群搭建入门

    忽略元数据末尾 回到原数据开始处 Hadoop+spark集群搭建 说明: 本文档主要讲述hadoop+spark的集群搭建,linux环境是centos,本文档集群搭建使用两个节点作为集群环境:一个 ...

  5. JavaScript之Web通讯

    web通信,一个特别大的topic,涉及面也是很广的.因最近学习了 javascript 中一些 web 通信知识,在这里总结下.文中应该会有理解错误或者表述不清晰的地方,还望斧正! 一.前言 1. ...

  6. xcode 筛选error

    程序编译出太多warning,想从中找到error很不容易,xcode中可以作筛选,点左下角的叹号即可只显示error:

  7. [svc]执行sudo时报错:effective uid is not 0

    http://jingyan.baidu.com/article/c45ad29cd83d4b051753e232.html 今天将 / 授权给了一个普通用户 导致一些问题. 启事: 操作前一定要先在 ...

  8. Eclipse 最有用的快捷键

    Eclipse中10个最有用的快捷键组合  一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升.    ...

  9. NIO--SocketChannel发送HTTP请求

    import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SocketChanne ...

  10. PHP——面向对象

    <body> <?php //类调用用:: //对象调用用-> class Dog1//定义类 { //成员属性(变量) var $name; var $age; var $p ...