【Django框架】——25 Django视图 07 状态保持Session
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
文章目录
cookie
不安全会把所有敏感数据放到浏览器保存。
session
是把敏感数据存到自己的服务器中给浏览器一把钥匙就行了是基于cookie
完成的。
Django 提供对匿名会话(session
)的完全支持。这个会话框架让你可以存储和取回每个站点访客任意数据。它在服务器端存储数据, 并以cookies
的形式进行发送和接受数据。
1.session流程图
-
创建一把随机字符串 钥匙。
-
把随机字符串和请求数据键值对组成的数据 放到
django-session
表里去 绿色部分都是django的中间件实现的。 -
将钥匙按照cookie方式传给浏览器浏览器只保留钥匙。
2.session语法与案例
# 1、设置Sessions值
request.session['session_name'] ="admin"
# 2、获取Sessions值
session_name = request.session["session_name"]
# 3、删除Sessions值
del request.session["session_name"]
# 4、flush()
# 删除当前的会话数据并删除会话的Cookie。这用于确保前面的会话数据不可以再次被用户的浏览器访问
def s_login(request):
if request.method == "GET":
return render(request, "login.html")
else:
user = request.POST.get("user")
pwd = request.POST.get("pwd")
try:
user_obj = User.objects.get(user=user,pwd=pwd)
# 写session
# 1、中间件会自己创建随机字符
# 2、将随机字符串作为session-key 将session作为session-data 插入到djang-session表中自带的
# 3、session_id和随机字符串组成键值作为cookie返回客户端
request.session["is_login"] = True
request.session["username"] = user_obj.user
return redirect("/s_index/")
except:
return redirect("/s_login/")
def s_index(request):
# 读session
# 1、去session_id的钥匙
# 2、去django-session表中查询符合条件的记录
# 3、将取出的session-data.get('is_login')
is_login = request.session.get("is_login")
if is_login:
# 登录成功过
username = request.session.get("username")
return render(request, "index.html", {"user": username})
else:
# 登录没成功
return redirect("/s_login/")
'''
shop.html:
<p>
客户端最后一次访问时间{{ last_time|default:"第一次访问" }}
</p>
<h3>商品页面</h3>
'''
def shop(request):
last_time = request.session.get("last_time")
now = datetime.datetime.now().strftime("%Y-%m-%d %X")
request.session["last_time"] = now
return render(request, "shop.html", {"last_time": last_time})
# 退出登录 删除session
def s_logout(request):
# 暴力删除会删除整条记录 访问时间也没有了
# request.session.flush()
# del比较友好 只删除指定的数据删除
del request.session["username"]
del request.session["is_login"]
return redirect("/s_login/")
session 在服务器端cookie 在客户端浏览器
session 默认被存在在服务器的一个数据库不是内存
session 的运行依赖 session id而 session id 是存在 cookie 中的.
session 可以放在 文件、数据库、或内存中都可以。
用户验证这种场合一般会用 session
3.session配置
# Django默认支持Session并且默认是将Session数据存储在数据库中即django_session 表中。
# 配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎默认
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key即sessionid=随机字符串默认
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径默认
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名默认
SESSION_COOKIE_SECURE = False # 是否Https传输cookie默认
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输默认
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期2周默认
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期默认
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session默认修改之后才保存默认