深入理解Cookie和Session的区别

Cookie和Session的区别:

Cookie是保存在用户浏览器端的键值对,而Session则保存在服务器端。在用户验证过程中,敏感信息不适合放在Cookie中,因为存放在本地的Cookie可能被分析并用于欺骗,考虑到安全性应当使用Session。通常,在用户验证时,这两者需要结合使用,而Session可以存储在文件、内存或数据库等地方。

图片[1]-深入理解Cookie和Session的区别-山海云端论坛

一、Cookie:

1.1 获取Cookie:

request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)

1.2 设置Cookie:

response.set_cookie(key, value, max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False)

1.3 设置Cookie有效期:

response.set_cookie(key, value, max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False)

1.4 删除Cookie:

response.delete_cookie("cookie_key", path="/", domain=name)

1.5 优缺点:

  • 优点:减轻服务器端压力,提高网站性能。
  • 缺点:安全性相对较低,容易被查看或破解用户会话信息。

1.6 示例:

# 登录页面 <form action="/login/" method="POST"> <input type="text" name="username" placeholder="用户名" /> <input type="password" name="pwd" placeholder="密码" /> <input type="submit" /> </form>

二、Session:

Django默认支持Session,提供了多种存储方式:

  • 数据库
  • 缓存
  • 文件
  • 缓存+数据库
  • 加密cookie

2.1 Session操作:

# 获取Session中数据 request.session['k1'] request.session.get('k1', None) # 生成Session中数据 request.session['k1'] = 123 request.session.setdefault('k1', 123) # 删除Session中数据 del request.session['k1']

2.2 数据库存储Session:

# settings.py配置 SESSION_ENGINE = 'django.contrib.sessions.backends.db'

2.3 缓存存储Session:

# settings.py配置 SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

2.4 文件存储Session:

# settings.py配置 SESSION_ENGINE = 'django.contrib.sessions.backends.file'

2.5 缓存+数据库存储Session:

# settings.py配置 SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'

2.6 加密Cookie Session:

# settings.py配置 SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'

三、示例:用户登录:

# 登录成功后页面 def home(request): is_login = request.session.get('IS_LOGIN', False) if is_login: username = request.session['USERNAME'] return render(request, 'home.html', {'username': username}) else: return redirect('/app01/login/') # 登录逻辑 def login(request): if request.method == 'POST': username = request.POST.get('username') pwd = request.POST.get('pwd') if username == 'wangjian' and pwd == '123': request.session['IS_LOGIN'] = True request.session['USERNAME'] = username return redirect('/app01/home/') return render(request, 'login.html') # 注销 def logout(request): del request.session['IS_LOGIN'] return redirect('/app01/login/')

配置项:

  1. SESSION_EXPIRE_AT_BROWSER_CLOSE设置为True,浏览器关闭时使cookie失效。
  2. 会话cookie有效时间由SESSION_COOKIE_AGE定义,默认为两周。
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容