session 状态保持
http协议特点是无状态的:每次请求都是一次新的请求,不会记住之前的通信状态
客户端与服务器的一次通信,就是一次会话
实现状态保持的方式:在客户端或服务端存储与会话有关的数据
存储方式包括:cookie ;seession ,会话一般指sessIion对象
使用cookie,所有数据存储在客户端,注意不要存储敏感信息
推荐使用session方式,所有的数据存储在服务器端,在客户端cookie中存储session_Id
状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据
注意:不同额请求者之间不会共享这个数据,与请求者一 一对用。
下图(浏览器从A中获取的内容,在B页面无法获得......这就是指的是无状态,
某一网站登陆成功的时候,服务端可以往客户端返回一些信息cookie
cookie一般存的信息都不敏感;
敏感信息用session来存:
)
启用session
使用django-admin startproject创建的项目默认启动
或者在setting.py 文件中
项 INSTALLED_APPS列表中添加:
“django.contrib.sessions",
项MIDDLEWARE_CLASSES列表中添加
”django.contrib.sessions.middleware.SessionMiddleware",
禁用会话:删除上面指定的两个值,禁用回话将节省一些性能消耗
使用seesion(session是字典对象)
启用会话后,每个HttpRequest对象将具有一个seesion属性,他是一个类字典对象
get(key,default=None):根据键获取会话的值(get方法)
clear():清除所有会话(session)
flush():删除当前会话的数据并删除会话的cookie
del request.seesion["member_id"] :删除某一个会话
----------------------------------------------------------
功能展示
在views.py中创建视图
from django.shortcuts import render,redirect
from django.core.urlresolvers import reversee
def inex(request):
uname=request.session.get("uname")
return render(request,"booktest/index.html",{"uname":uname}
def login(reuqest):
return render(request,"booktest/login.html")
#通过用户登陆联系session
def session(reuqest):
uname=None
context={“uname”:uname
}
return render(request,"booktest.session1.html",context)
------------------------------
session就是一个字典对象
所有字典的内容中增加数据的内容(见下图)
重要的一点内容是:在session中增加数据!!!!!
为什么迁移:默认把session存到数据库表结构里面去
迁移的目的是让我们当前项目中模型类对应数据库中的某个表
用get方法写,没有的话,不会报错,直接提示none
可以设置过期时间 清除掉
------------------------------
session中加信息 读信息 删信息
--------------------------
删除session
uname=request.session["myname]
如果这样写的话,找不到session中的键会报错
uname=request.session。get["myname","未登录“]