本节知识点:
一:session的过期时间
二:session是怎么存的,到底存到哪里去了,能不能修改
三:服务器端存这么多session,到底是怎么区分的
单词部分:
set_expiry(value):设置会话的超时时间
如果没有指定,则在两个星期后过期
如果value是一个整数,会话将在values秒没有活动后过期
如果value是一个timedelta对象,会话将在当前时间加上这个指定的日期/时间过期
如果value是0,那么用户会话的cookie将在用户的浏览器关闭时过期
如果value是None,那么会话永不过期
修改视图中的login_handle函数,查看效果
def login_handle(request):
request.session["uname"] = request.POST["uname"]
#request.session.set_expiry(10)
#request.sesion.set_expiry(timedelta(day=5))
#request.session.set_expiry(8)
#request.session.set_expiry(None)
return redirect(reverse("main:index")
使用存储会话的方式,可以使用settings.py的SESSION_ENGINE项指定
基于数据库的会话:这时django默认的会话存储方式,需要添加django.contrib.sessions
到INSTALLED_APPS设置中,运行manage.py migrate在数据库中安装会话表,可显示指定为 :
下面几种方式表示session存储在哪里???
SESSION_ENGINE="django.contrib.session.backends.db"
基于缓存的会话:只存在本地内存中,如果丢失后不能找回,但是优点是比数据库读写更快
SEESION_ENGLINE=”django,contrib.sessions.backends.cache"
可以将缓存和数据库同时使用:优先从本地缓存中获取,如果没有则在数据库中获取
SESSION_ENGINE=“django.contrib.sessions.bcakends.cached_db"
base64可以逆运算
除了存在内存中,session还可以存在Redirs中
会话还支持文件,纯cookie,Memcached,Redirs等方式存储,下面演示使用redirs存储
安装包
pip install django-redirs-session
修改settings中配置,增加如下项
SESSION_ENGINE="redirs_sessions_session"
SESSION_REDIRS_HOST="localhost"
SESSION_REDIRS_PORT=6379
SESSION_REDIRS_DB=0
SESSION_REDIRS_PASSWORD=""
SESSION_REDIRS_PREFIX=”session"
启动:
停止
重启
看下session存储的执行过程:
当用户请求servlet,servlet会首先查看客户端cookie中是否有sessionID,如果有则证明是旧的会话,
那么就通过cookie将sessionID发送到服务器,服务器就会根据sessionID到服务器的内存中查找
session对象(因为每个session都会有一个sessionID来标识session对象),找到之后然后使用。
如果cookie中没有sessionID这证明是一个新的会话。服务器就会创建一个新的Session对象,
然后将SessionID存放早cookie中,通过cookie把sessionID发送到客户端。客户端下一次访问的时候,
就会将SessionID发送到服务器以便再次找到这个session对象,完成会话跟踪所以如果用户将cookie关闭
session也将会失效。session是依赖与cookie的。
与cookie的区别与联系:cookie在客户端保存用户的信息,而session在服务器上保存客户的信息
session依赖于cookie。如果用户关闭cookie,则session失效,
原因是sessionID无法从客户端传递到服务端,也不能从服务端传递到客户端.
(每个人登陆都有对应的session存在服务器上,对于每个人的session应该怎么区分呢?)
相当于cookie中也存有session一样的值
每个cookie中都存有session_id用来区分哪个是你的,哪个是 我的)
以淘宝网站为例,当禁用cookie后,在登陆页面填写账号密码,会发现无法跳转!
没有cookie,服务器无法识别到session_id
------小视频
第二点:因为session是用session_id(通过cookie传送)来确定当前会话对应的服务器session,禁用cookie相当于失去了sessionID
第三点:相对而言,Session的安全性和可靠程度都比Cookie高。