Django:Session和Cookie

傷城~ 2023-10-08 12:09 149阅读 0赞

文章目录

      • 1、Session和Cookie的关系是什么?
        • 1.1、session和cookie的区别
      • 2、cookie操作
      • 3、Session操作
      • 4、session在哪儿?
        • 4.1、服务器里
        • 4.2、浏览器端(客户端)
  • Session是基于Cookie, 是因为把数据写入session时将会生成一个随机字符串并将随机字符串存入cookie。
  • 读取时,是先从cookie中获取这个随机字符串,再根据这个随机字符串,去服务器数据库获取session内容
  • 在SessionMiddleware中的process_request方法里面可以看到
  • a) 存放位置:session存放于服务器,cookie存放在客户端;
  • b) 安全性:cookie不安全,session安全,因此session在服务端,cookie在客户端;
  • c)
    大小限制:cookie会由客户端浏览器控制,单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。而session在在服务端,理论上没有大小限制。
  • d)
    系统性能影响:session存在服务端,当session比较多的情况下,服务端会受其影响,而cookie在客户端,不会影响服务器性能。

例:设置cookie

  1. from django.template import loader ,Context
  2. from django.http import HttpResponse
  3. def main(request):
  4. #不用模板
  5. response= HttpResponse('test')
  6. response.set_cookie('my_cookie','cookie value')
  7. return response
  8. def main(request):
  9. #用模板
  10. response= render_to_response('xxxx.html', {
  11. })
  12. response.set_cookie('my_cookie','cookie value')
  13. return response

例:获取cookie

  1. def get_cookie(request):
  2. """获取cookie"""
  3. name = request.COOKIES['name']
  4. 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:不可逆加密
暴力破解,匹配

例:

  1. def welcome(request):
  2. # 写入Session
  3. se = request.session
  4. login_user_name = se.get('login_user_name')
  5. return render(request, "welcome.html", {
  6. 'login_user_name': login_user_name})
  7. # 登录页面
  8. def login(request):
  9. return render(request, "login.html")
  10. # 登录的业务逻辑
  11. def do_login(request):
  12. # 获取登录用户名、密码
  13. userName = request.POST.get('userName')
  14. # 存在就将用户名写入session
  15. request.session['login_user_name'] = userName
  16. return redirect("/user/welcome")
  17. # 注销逻辑
  18. def logout(request):
  19. # 把userName从当前的session移除
  20. # del request.session['login_user_name']
  21. request.session.flush()
  22. 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获取服务器用户登录信息

发表评论

表情:
评论列表 (有 0 条评论,149人围观)

还没有评论,来说两句吧...

相关阅读

    相关 sessioncookie

            http协议是无状态协议,不能以状态来区分和管理请求和响应。无法根据之前的状态处理本地的请求处理。这种无状态的优点是减少服务器的CPU、内存资源的消耗。缺点是,

    相关 CookieSession

    一、Cookie 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属

    相关 CookieSession

    > Cookie 一.概述         当用户通过浏览器访问 web 应用时,通常情况下,服务器需要对用户的状态进行跟踪.例如,用户在网站结算商品时,Web 服