Django框架下Cookie与Session运行机制及代码相关问题咨询
问题1解答
是否下发新cookie、生成新session,核心取决于客户端再次发起请求时,是否还携带了上次服务端下发的有效sessionid cookie:
- 如果客户端没有删除本地的
sessionidcookie,且该cookie还在有效期内,只是临时断连后重连,请求会自动携带该sessionid,服务端匹配到已存储的对应session,就不会下发新cookie、也不会生成新session。 - 如果客户端关闭了浏览器(默认
sessionid是会话级cookie,关闭浏览器就会被清除)、或者手动删除了sessionidcookie,再次访问时请求没有有效会话标识,服务端就会下发新的sessionidcookie,同时生成新的session存储在服务端。
问题2解答
你的两个细分问题解答如下:
- 会话结束后另一个cookie是否保留:会正常保留。你设置的
zap是会话级cookie,没有指定有效期,浏览器关闭、会话结束就会被清除;而sakaicar设置了max_age=1000,属于持久化cookie,只要没到1000秒的有效期,哪怕浏览器关闭、会话结束,这个cookie依然会存在于客户端,直到过期或者用户手动清除。 set_cookie设置的内容是否会自动存服务端session:不会。resp.set_cookie()是直接操作客户端的cookie存储,仅会把指定的键值对写入响应头下发给客户端保存,和服务端的session体系完全独立。只有你操作request.session对象写入数据时,Django才会自动把数据存在服务端的session存储中,同时自动下发sessionidcookie来关联对应会话,和手动调用set_cookie的逻辑互不干扰。
你给出的示例代码全程没有操作request.session,所以服务端不会生成任何session存储,也不会自动下发sessionid cookie。
内容的提问来源于stack exchange,提问作者helloworld
相关产品推荐
相关产品推荐

