谈谈 cookies 和 session
因为HTTP协议是无状态的,导致会话状态难以保持。Cookies和Session就是为了保持会话状态而诞生的两个存储技术。
-
cookies和session的区别:
- Cookie 把数据存放在客户的浏览器上,Session 把数据放在服务器上(数据库里)。
- 因为cookies有自动提交的特点,把数据存在浏览器上,别人可以利用这一点进行 csrf 攻击。从安全角度考虑,建议使用session。
- 因为Session 在一定时间内会保存在服务器上。当访问增多,会比较占用服务器的性能,从要减轻服务器性能方面考虑,建议使用 Cookie。
- 单个 Cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 Cookie。
- 可以考虑将登陆信息等重要信息存放为 Session,其他信息如果需要保留,可以放在 Cookie 中。
-
cookies和session的关系:
虽然 session 相对于 cookies 安全一些,但是禁用 Cookie 就不能得到 Session了。因为 Session 是用 Session ID 来确定当前对话所对应的服务器 Session,而 Session ID 是通过 Cookie 来传递的,禁用 Cookie 相当于失去了 SessionID,也就得不到 Session。
-
django 中 sessionid 的存储位置?
django 将 sessionid 存储在表 django_session 中,当用户群体很大时,mysql可能就会扛不住了,可以每晚执行 python3 manage.py clearsessions 【该命令可删除已过期的session数据】
-
禁用cookies,还想使用session的方案?
- 通过 Url 重写(可以在地址栏看到 sessionid=KWJHUG6JJM65HS2K6 之类的字符串)
- 表单隐藏字段的方式将 SessionId 传回给服务器,以便服务通过 SessionId 获取客户端对应的 Session。
-
怎么删除 cookies 和 session?
-
清除所有会话,在存储中删除值部分
request.session.clear()
-
清除会话数据,在存储中删除会话的整条数据。
request.session.flush()
-
删除会话中的指定键及值,在存储中只删除某个键及对应的值。
del request.session['键']
-
设置会话的超时时间,如果没有指定过期时间则两个星期后过期。
如果 value 是一个整数,会话将在 value 秒没有活动后过期。
如果 value 为 0,那么用户会话的 Cookie 将在用户的浏览器关闭时过期。
如果 value 为 None,那么会话永不过期
request.session.set_expiry(value)
-