Cookie和Session的区别:
Cookie是保存在用户浏览器端的键值对,而Session则保存在服务器端。在用户验证过程中,敏感信息不适合放在Cookie中,因为存放在本地的Cookie可能被分析并用于欺骗,考虑到安全性应当使用Session。通常,在用户验证时,这两者需要结合使用,而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/')
配置项:
SESSION_EXPIRE_AT_BROWSER_CLOSE
设置为True,浏览器关闭时使cookie失效。- 会话cookie有效时间由
SESSION_COOKIE_AGE
定义,默认为两周。
暂无评论内容