05-session-会话跟踪技术
1、session简介
Django中默认支持Session,其内部提供了5种类型的Session供开发者使用:
- 数据库(默认)
- 缓存
- 文件
- 缓存+数据库
- 加密cookie
Session是服务器端技术,利用这个技术,服务器在运行时可以 为每一个用户的浏览器创建一个其独享的session对象,
由于 session为用户浏览器独享,所以用户在访问服务器的web资源时 ,可以把各自的数据放在各自的session中,
当用户再去访问该服务器中的其它web资源时,其它web资源再从用户各自的session中 取出数据为用户服务。

2、session之保存登录状态信息
1、写session






2、session读取



3、不同浏览器,会创建不同的session_id





4、views视图代码
def login_session(request):
if request.method == "POST":
user = request.POST.get("user")
pwd = request.POST.get("pwd")
# user_obj = UserInfo.objects.filter(username=user, password=pwd) # AttributeError: 'QuerySet' object has no attribute 'username'
user_obj = UserInfo.objects.filter(username=user, password=pwd).first()
if user_obj:
# 设置session
request.session['is_login'] = True
request.session['username'] = user_obj.username """
设置session步骤
1.生成随机字符串 q4r5q4rfar32543
2.response.set_cookie("session_id",q4r5q4rfar32543)
3.在django-session表创建一条记录:
session-key session-data
q4r5q4rfar32543 {"is_login":True, "username":"alex"}
""" return HttpResponse("登录成功") return render(request, 'login_session.html') def index_session(request):
# 获取session
is_login = request.session.get("is_login")
print("is_login:", is_login) # True
if not is_login:
return redirect("/login_session/") username = request.session.get("username") """
获取session流程
1 request.COOKIE.get("session") # wspn39juwcrrqxs0916ftmlcvyl7c1gg
2 django-session表中过滤记录:
在django-session表中创建一条记录:
session-key session-data
wspn39juwcrrqxs0916ftmlcvyl7c1gg {"is_login":True, "username":"alex"}
obj = django-session.object.filter(session-key=wspn39juwcrrqxs0916ftmlcvyl7c1gg) 3 obj.session-data.get("is_login")
""" return render(request, "index_session.html", {"username": username})
4、session应用之保存上次登录时间


5、前部分session代码
modles
from django.db import models class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
主url
from django.contrib import admin
from django.urls import path, re_path, include urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^', include(('app01.urls', 'app01')))
]
url
from django.urls import path, re_path, include
from app01 import views urlpatterns = [
re_path(r'^login_session/$', views.login_session, name='login_session'),
re_path(r'^index_session/$', views.index_session, name='index_session'),
]
views
from django.shortcuts import render, HttpResponse, redirect from app01.models import UserInfo def login_session(request):
if request.method == "POST":
user = request.POST.get("user")
pwd = request.POST.get("pwd")
user_obj = UserInfo.objects.filter(username=user, password=pwd).first()
if user_obj:
# 设置session
request.session['is_login'] = True
request.session['username'] = user_obj.username return HttpResponse("登录成功") return render(request, 'login_session.html') def index_session(request):
# 获取session
is_login = request.session.get("is_login")
print("is_login:", is_login) # True
if not is_login:
return redirect("/login_session/") username = request.session.get("username")
last_visit_time = request.session.get("last_visit_time", "") # get到last_time response = render(request, "index_session.html", {"username": username, "last_visit_time": last_visit_time}) import datetime
now = datetime.datetime.now().strftime("%Y-%m-%d %X")
request.session["last_visit_time"] = now # 设置时间
return response
模板层
login_session.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <form action="" method="post">
{% csrf_token %}
username <input type="text" name="user">
password <input type="password" name="pwd">
<input type="submit" value="登录">
</form> </body>
</html>
index_session.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>hi {{ username }}</h3>
<p>上次登录时间:{{ last_visit_time }}</p>
</body>
</html>
5、session的更新操作
同一个浏览器,后面的session_data 会覆盖前面的数据




6、基于session的注销功能
3、删除Sessions值
del request.session["session_name"]
4、flush()
删除当前的会话数据并删除会话的Cookie。
这用于确保前面的会话数据不可以再次被用户的浏览器访问

5、get(key, default=None)
fav_color = request.session.get('fav_color', 'red')
6、pop(key)
fav_color = request.session.pop('fav_color')
7、keys()
8、items()
9、setdefault()
logout视图
def logout(request):
# 删除session值
del request.session["is_login"]
del request.session["username"] # 删除全部数据
request.session.flush() """
删除session流程
1 random_str = request.COOKIE.get("sessionid")
2 django-session.objects.filter(session-key=random_str).delete()
3 response.delete_cookie("sessionid", random_str)
""" return redirect("/login_session/")
index_seeion.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>hi {{ username }}</h3>
<p>上次登录时间:{{ last_visit_time }}</p>
<a href="/logout/">注销</a>
</body>
</html>






7、session的配置参数
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,默认修改之后才保存
session失效时间15s



每次访问刷新15s

SESSION_COOKIE_NAME = "yuan" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径
SESSION_COOKIE_AGE = 15 # Session的cookie失效日期
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期
SESSION_SAVE_EVERY_REQUEST = True # 是否每次请求都保存Session,默认修改之后才保存
8、session练习
1 登录案例
需要的页面:
#login.html:登录页面,提供登录表单;
#index1.html:主页,显示当前用户名称,如果没有登录,显示您还没登录;
#index2.html:主页,显示当前用户名称,如果没有登录,显示您还没登录;
思考,如果第二个人再次再同一个浏览器上登录,django-session表会怎样?
2 验证码案例
验证码可以去识别发出请求的是人还是程序!当然,如果聪明的程序可以去分析验证码图片!但分析图片也不是一件容易的事,因为一般验证码图片都会带有干扰线,人都看不清,那么程序一定分析不出来。
PIL 模块
9、cookie与 session总结
# cookie总结
1 response.set_cookie(key,value)
2 request.COOKIE.get(key)
# sessiono总结
3 request.session[key] = value # 写session
注意django对应操作 '''
if request.COOKIE.get("session_id") wspn39juwcrrqxs091
更新
在django-session表中创建一条记录:
session-key session-data
wspn39juwcrrqxs0916ftmlcvyl7c1gg 更新数据
else: 1.生成随机字符串 q4r5q4rfar32543
2.response.set_cookie("session_id",q4r5q4rfar32543)
3.在django-session表创建一条记录:
session-key session-data
q4r5q4rfar32543 {"is_login":True, "username":"alex"
''' 4 request.session[key] # 读session
'''
1 request.COOKIE.get("session") # wspn39juwcrrqxs0916ftmlcvyl7c1gg 2 django-session表中过滤记录:
在django-session表中创建一条记录:
session-key session-data
wspn39juwcrrqxs0916ftmlcvyl7c1gg {"is_login":True, "username":"alex"
obj = django-session.object.filter(session-key=wspn39juwcrrqxs0916ftmlcvyl7 3 obj.session-data.get("is_login") ''' 5. request.session.flush() # 删除session
"""
1 random_str = request.COOKIE.get("sessionid") 2 django-session.objects.filter(session-key=random_str).delete() 3 response.delete_cookie("sessionid", random_str)
"""
05-session-会话跟踪技术的更多相关文章
- Cookie&Session会话跟踪技术
今日内容学习目标 可以响应给浏览器Cookie信息[response.addCookie()] 可以接受浏览器Cookie信息[request.getCookies()] [创建cookie,设置pa ...
- Django - session 会话跟踪技术
1.session简介 |session 英 /'seʃ(ə)n/ 美 /'sɛʃən/ 基于cookies开发,将值存到服务端 写session 读session Session是服务器端技术,利用 ...
- Filter过滤器与Session会话跟踪技术
Filter过滤器 适用场景 1.为web应用程序的新功能建立模型(可被添加到web应用程序中或者从web应用程序中删除而不需要重写基层应用程序代码)2.用户授权Filter:负责检查用户请求,根据请 ...
- cookie和session的区别与会话跟踪技术
会话跟踪技术: HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的.非连续的.当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟 ...
- JavaEE基础(04):会话跟踪技术,Session和Cookie详解
本文源码:GitHub·点这里 || GitEE·点这里 一.会话跟踪 1.场景描述 比如登录某个购物网站,身份识别成功后,在网站下单,支付 等操作,这些操作中当前登录用户信息必须是共享的,这样这些操 ...
- JSP基础--会话跟踪技术、cookie、session
会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...
- 简述会话跟踪技术——Cookie和Session
简述会话跟踪技术--Cookie和Session 本篇文章将会简单介绍Cookie和Session的概念和用法 会话跟踪技术 首先我们需要搞清楚会话和会话跟踪的概念: 会话:用户打开浏览器,访问Web ...
- 会话跟踪技术 - Cookie 和 Session 快速上手 + 登陆注册案例
目录 1. 会话跟踪技术概述 2. Cookie 2.1 Cookie的概念和工作流程 2.2 Cookie的基本使用 2.3 Cookie的原理分析 2.4 Cookie的使用细节 2.4.1 Co ...
- django会话跟踪技术
目录 django中的会话跟踪技术 什么是会话跟踪技术 HTTP无状态协议 Cookie概述 什么是cookie cookie源码 cookie超长时间 cookie超长时间 cookie生效路径 删 ...
- 04-cookies 会话跟踪技术
1.会话跟踪技术 1.Http协议的无状态保存 会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应 2 .会话路径技术使用Cookie或session完成 我们知道HTTP协 ...
随机推荐
- 【MySQL】无法启动mysql服务(位于本地计算机上)错误1067,进程意外中止
好久没看MySQL了,今天启动起来找找感觉,尴尬了...发现服务启动不了.系统提示:无法启动mysql服务(位于本地计算机上)错误1067,进程意外中止. 解决过程: 1.在网上百度好久,看到一条解决 ...
- hyper-v 无线网连接
本人的工作环境 笔记本一台,window 10系统64位.平时连接的是有线网,今天回到家里,准备继续在Hyper-v虚拟机上进行操作,发现不能连网,自己立马想到了是不是没有虚拟机上没有和主机共享无线网 ...
- mvc 下json超过限制,上传excel大小限制
json超过限制 解决方案1:config中添加节点 控制序列化长度 <webServices> <jsonSerialization maxJsonLength="10 ...
- 理解http请求
HTTP请求的GET方法可以用来抓取网页. HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则,计算机专家设计出HTTP,使HTTP客户(如Web浏览 ...
- fun() 的 拆分和 for 遍历 的结合---------> 函数容器
fun() 的 拆分和 for 遍历 的结合---------> 函数容器
- PHP设计模式系列 - 迭代器
PHP迭代器: 可帮助构造特定的对象,那些对象能够提供单一标准接口循环或迭代任何类型的可计数数据.(不是特别常用,在PHP中) 使用场景: 1.访问一个聚合对象的内容而无需暴露它的内部表示. 2.支持 ...
- 在jupyter notebook中运行R语言
要想在jupyter notebook中运行R语言其实非常简单,按顺序安装下面扩展包即可: install.package('repr','IRdisplay','evaluate','crayon' ...
- java面向切面编程总结-面向切面的本质
面向切面的本质:定义切面类并将切面类的功能织入到目标类中: 实现方式:将切面应用到目标对象从而创建一个新的代理对象的过程.替换: 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Point ...
- luogu【模板】三维偏序(陌上花开)
嘟嘟嘟 很显然我开始学\(CDQ\)分治了. 我刚开始学的时候看了一篇博客,上面全是一些抽象的概念,看完后真是一头雾水,最后还不得不抄了这题的代码. 但这样可不行呀-- 于是我就不打算再扣那篇博客,而 ...
- 多线程之synchronized
Java并发编程:synchronized 虽然多线程编程极大地提高了效率,但是也会带来一定的隐患.比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据.今天我们就 ...
