1什么是session?
session是在服务器上开辟一段存储空间用于保存浏览器和服务器交互时的重要数据
2为什么没有cookie,session玩不转?
用户输入用户名密码点击登录按钮后,浏览器会把用户名和密码通过http传给后端,服务器拿到用户名和密码之后,肯定时要做数据层面的验证:
1验证有没有这个用户
2验证你的密码是否正确
如果验证成功,那么此时后端就会给客户端创建一个凭证存储到本地,同时会生成一个凭证号码发送给客户端,当客户端接收到这个凭证号码之后,会将这个凭证号存储到浏览器的cookie里,下一次浏览器请求服务的时候会把这个存储在cookie里的凭证号一起发送给服务端,这个凭证号就是sessionID,这个过程就是session的存储过程,因此没有cookie,客户端就没办法存储sessionID,所以想玩session,必须要有cookie的支持。
3session和cookie的区别?
session是将所有的状态数据存储到服务器端,传给客户端的只是数据存储的地址标识即sessionID。
cookie是直接把所有的状态数据交给客户端自己存储,安全程度比较低,数据容易被篡改
4在django中如何使用session?
答:需要在setting.py中检查是否已经配置了session,配置方法如下(默认已经配置好):
5session如何使用?
session类似于字典,能够存储str,int,dict,list等类型
6Django如何设置session的过期时间?
在settings.py中相关配置项:
1指定sessionid在cookies中保存的时常(默认2周)
例如:SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
2设置浏览器关闭时,session就失效(默认为False)
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
注意:django的session数据存储在数据库中,所以使用session前需要确保已经执行过migrate
7Django session的问题:
django不会自动清除数据库表里的过期session,这就会造成表数据越来越大,因此我们可以选择合适的时间使用手动方式去执行过期的数据清楚,方法是执行:python manage.py clearsessions,也可以作个定时任务,例如每晚11点自动清理过期的session数据
8小练习:
编写两个视图函数,一个用于设置session,另外一个用于获取session,要求每个函数配一个url,先执行设置,再执行获取,然后把浏览器的session清空后再执行获取看看是不是获取不到session而出现报错:
1)url:
2)views
3)浏览器访问: