Django:Session和Cookie
文章目录
- 1、Session和Cookie的关系是什么?
- 1.1、session和cookie的区别
- 2、cookie操作
- 3、Session操作
- 4、session在哪儿?
- 4.1、服务器里
- 4.2、浏览器端(客户端)
1、Session和Cookie的关系是什么?
- Session是基于Cookie, 是因为把数据写入session时将会生成一个随机字符串并将随机字符串存入cookie。
- 读取时,是先从cookie中获取这个随机字符串,再根据这个随机字符串,去服务器数据库获取session内容
- 在SessionMiddleware中的process_request方法里面可以看到
1.1、session和cookie的区别
- a) 存放位置:session存放于服务器,cookie存放在客户端;
- b) 安全性:cookie不安全,session安全,因此session在服务端,cookie在客户端;
- c)
大小限制:cookie会由客户端浏览器控制,单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。而session在在服务端,理论上没有大小限制。 - d)
系统性能影响:session存在服务端,当session比较多的情况下,服务端会受其影响,而cookie在客户端,不会影响服务器性能。
2、cookie操作
例:设置cookie
from django.template import loader ,Context
from django.http import HttpResponse
def main(request):
#不用模板
response= HttpResponse('test')
response.set_cookie('my_cookie','cookie value')
return response
def main(request):
#用模板
response= render_to_response('xxxx.html', {
})
response.set_cookie('my_cookie','cookie value')
return response
例:获取cookie
def get_cookie(request):
"""获取cookie"""
name = request.COOKIES['name']
return HttpResponse(name)
3、Session操作
参考文章:https://www.cnblogs.com/Minlwen/p/10488676.html
Session中的操作方法:
1、获取 request.session.get(key)或者是request.session[key]
2、写入request.session[key] = value
3、删 del request.session[key]
4、删除当前session request.session.flush()
Session的过期时间设置:方法是set_expiry(value)
1.如果value=0那么浏览器关闭时,session会过期
2.如果value=datetime或者timedelta就是设置到什么时间点过期,必须要在settins.py中设置SESSION_SERIALIZER = ‘django.contrib.sessions.serializers.PickleSerializer’
3.如果value=None,跟全局的settings.py中的SESSION_COOKIE_AGE决定
Session存入的值是一个Base64加密的串,可以进行解密
MD5:不可逆加密
暴力破解,匹配
例:
def welcome(request):
# 写入Session
se = request.session
login_user_name = se.get('login_user_name')
return render(request, "welcome.html", {
'login_user_name': login_user_name})
# 登录页面
def login(request):
return render(request, "login.html")
# 登录的业务逻辑
def do_login(request):
# 获取登录用户名、密码
userName = request.POST.get('userName')
# 存在就将用户名写入session
request.session['login_user_name'] = userName
return redirect("/user/welcome")
# 注销逻辑
def logout(request):
# 把userName从当前的session移除
# del request.session['login_user_name']
request.session.flush()
return redirect("/user/welcome")
4、session在哪儿?
前面讲了这么多,有人可能还是不知道session到底在哪儿,到底存在哪儿?
4.1、服务器里
这里我用一个django项目举例
比如“登陆某个页面,服务器需要记录这个登录用户的id”,我们创建session记录id
这里的request.session[key] = value便会自动存入服务器和前端
在页面登录成功后,我们返回服务器查看数据库
服务器里,session就存在这里
4.2、浏览器端(客户端)
用户登录前,我们查看到cookie的内容大概是这样的
登录后
我们发现cookie里多了个session字段,用于保存session_key,然后根据这个key获取服务器用户登录信息
还没有评论,来说两句吧...