session-Django(4.18)

会话过期时间

本节知识点:

一:session的过期时间

二:session是怎么存的,到底存到哪里去了,能不能修改

三:服务器端存这么多session,到底是怎么区分的


单词部分:

expiry[ɪk'spaɪəri]

  • n. 满期,逾期;呼气;终结


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")

存储session

使用存储会话的方式,可以使用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中

使用Redirs缓存session

会话还支持文件,纯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"

管理 redirs的命令(Linux操作)

启动:

停止

重启

sesssion 依赖于于cookie

看下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

这里会录制一个关于上面例子的小视频


------小视频

知识点继续补充

第一点:Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案。

第二点:因为session是用session_id(通过cookie传送)来确定当前会话对应的服务器session,禁用cookie相当于失去了sessionID

第三点:相对而言,Session的安全性和可靠程度都比Cookie高。






你可能感兴趣的:(Django框架)