一、区别:

本人见解:使用自定义数据项进行加密,作为唯一身份识别,登陆时写入cookie(session基于这个)。在显示相关数据

1.cookie

  • 属于客户端会话技术(数据存储在客户端)

  • 默认的Cookie会默认自动携带本网站所有cookie
  • 支持过期时间(就是软件中7天免登录之类的)
  • Cookie跨域名,跨网站

2.session(不做移动端开发,则与token没什么区别)

  • 属于服务端会话技术,数据存储在服务器中(django有个默认的数据表_session)
  • Session默认过期时间是14天
  • 主键是字符串
  • 数据使用了数据安全

3.Token

  • 服务端会话技术
  • 自定义的session(下面会举例说明自定义)
  • 如果在移动端或客户端开发中,通常以json形式传输需要移动端自己存储Token,需要使用关联数据时,主动传递Token

二、实例讲解

2.1 Cookie

 #-------Cookie技术
path(r'setcookie/',views.set_cookie,name='set_cookie'),
path(r'getcookie/',views.get_cookie,name='get_cookie'), #----------实现会话用户登录
path(r'login/',views.login,name='login'),
path(r'dologin/',views.do_login,name='do_login'),
path(r'mine/',views.mine,name='mine'),
path(r'logout/',views.logout,name='logout'), 普通不加密:(没有界面。也就是进入该路由则添加Cookie为Rock)
def set_cookie(request):
response=HttpResponse("设置cookie")
response.set_cookie('username','Rock')#---------------------Rock为值
return response def get_cookie(request):
username=request.COOKIES.get('username')
return HttpResponse(username) 加密(加盐,有界面获取登录的用户名)
def login(request):
return render(request,'login.html') def do_login(request):
uname=request.POST.get('uname')
response=HttpResponseRedirect(reverse('App_one:mine'))
response.set_signed_cookie('content',uname,"Rock")#加密(加‘盐’)
return response def mine(request):
try:
uname=request.get_signed_cookie('content',salt="Rock")(得带上‘盐’) if uname:
return render(request,'mine.html',context={"uname":uname,})
except Exception as e:
print("获取失败")
return redirect(reverse('App_one:login')) def logout(request):
response=redirect(reverse("App_one:login"))
response.delete_cookie("content")
return response

2.2 Session

  #Session登录退出
path(r'login/',views.login,name='login'),
path(r'mine/',views.mine,name='mine'),
path(r'logout/',views.logout,name='logout'),
def login(request):
if request.method=="GET":
return render(request,'App2_login.html')
elif request.method=="POST":
username=request.POST.get("username")
request.session["username"]=username
return HttpResponse("登录成功") def mine(request):
username=request.session.get("username")
return render(request,'App2_mine.html',context={"username":username,}) def logout(request):
response=redirect(reverse('App_two:mine'))
#方式一:删除cookie
#response.delete_cookie("sessionid") #方式二:删除session
#del request.session['username'] #方式三:全部删除---------删除当前会话,数据库中也会删除(常用)
request.session.flush()
return response

2.3 自定义版本的Session---------Token


#实战项目token
#注册
path(r'register/',views.register,name='register'),
#登录
path(r'studentlogin/',views.student_login,name='student_login'),
#个人中心
path(r'studentmine/',views.student_mine,name='student_mine'),

#项目实战登陆注册Token
def register(request):
if request.method=="GET":
return render(request,"student_register.html")
elif request.method=="POST":
username=request.POST.get("username") passsword=request.POST.get("password") try:
student=Student() student.s_name=username
student.s_password=passsword student.save()
except Exception as e:
return redirect(reverse("App_two:register"))
return HttpResponse("注册成功") #登录
def student_login(request):
if request.method=="GET":
return render(request,'student_login.html')
elif request.method=="POST":
username=request.POST.get("username")
password=request.POST.get("password") students=Student.objects.filter(s_name=username).filter(s_password=password) if students.exists():
#这里有点多余,因为用户名唯一
student=students.first()
ip=request.META.get("REMOTE_ADDR")
token=generate_token(ip,username)
student.s_token=token
student.save() response=HttpResponse("用户登录成功!")
response.set_cookie("s_token",token)
return response
return redirect(reverse("App_two:student_login")) #自定义生成唯一token
def generate_token(ip,username):
c_time=time.ctime()#返回str形式,当前时间
r=username
return hashlib.new("md5",(ip+c_time+r).encode("utf-8")).hexdigest()----------------哈希表(一定要设置编码格式) #个人中心
def student_mine(request):
token=request.COOKIES.get("s_token")
try:
student=Student.objects.get(s_token=token)
except Exception as e:
return redirect(reverse("App_two:student_login")) return HttpResponse(student.s_name)

Django2.2 会话技术cookie session token的区别以及实例介绍的更多相关文章

  1. java ->会话技术Cookie&Session

    会话技术Cookie&Session 会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户 ...

  2. Web核心之会话技术Cookie&Session

    什么是会话技术? http协议是无状态协议.为了满足在多次请求之间数据进行交互,推出了会话技术. 会话概念:一次会话,指的是从客户端和服务器建立起连接开始,到客户端或服务器断开连接为止.中间可能进行多 ...

  3. JavaWeb学习笔记五 会话技术Cookie&Session

    什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话 ...

  4. JavaEE之会话技术Cookie&Session

    会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪         里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并 ...

  5. 会话技术Cookie&Session

    1.会话技术概述 从打开浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话.会话技术用于记录本次会话中客户端的状态与数据. 会话技术分为Cookie和Session: Cookie:数据存储 ...

  6. 03012_会话技术Cookie&Session

    1.会话技术简介 (1)存储客户端的技术 网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识 ...

  7. 会话技术 Cookie+Session

    会话:这种在多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(session) 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开: 功能:在一次会话 ...

  8. Servlet 会话技术cookie和session

    会话技术 Cookie技术:会话数据保存在浏览器客户端. Session技术:会话数据保存在服务器端. 一.Cooke技术 1. 特点 Cookie技术:会话数据保存在浏览器客户端. 2 .Cooki ...

  9. 会话技术cookie与session

    目录 会话技术cookie 会话技术 cookie 服务器怎样把Cookie写 给客户端 服务器如何获取客户端携带的cookie session session简介 Session如何办到在一个ser ...

随机推荐

  1. 附:常见的Jdbc Type 与 Java Type之间的关系

    附:常见的Jdbc Type 与 Java Type之间的关系 JDBC Type Java Type CHAR                  String VARCHAR String LONG ...

  2. CDOJ 1255 斓少摘苹果 图论 2016_5_14

    斓少摘苹果 Time Limit: 3000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  St ...

  3. 「美团 CodeM 资格赛」试题泛做

    LibreOJ真是吼啊! 数码 推个式子,把枚举因数转为枚举倍数.然后就发现它是根号分段的.然后每一段算一下就好了. #include <cstdio> #include <cstr ...

  4. TensorFlow使用记录 (十二): ℓ1 and ℓ2 Regularization

    实现方式 以 ℓ2 Regularization 为例,主要有两种实现方式 1. 手动累加 with tf.name_scope('loss'): loss = tf.losses.softmax_c ...

  5. AcWing:112. 雷达设备(贪心 + 笛卡尔坐标系化区间)

    假设海岸是一条无限长的直线,陆地位于海岸的一侧,海洋位于另外一侧. 每个小岛都位于海洋一侧的某个点上. 雷达装置均位于海岸线上,且雷达的监测范围为d,当小岛与某雷达的距离不超过d时,该小岛可以被雷达覆 ...

  6. Remainder Problem

    F. Remainder Problem 这个其实并不难,只是看看考察有没有分块的思路 思路:用一个ans[i][j]来记录所有k=(1~5e5)中所有a[k]%i==j的和,在查询的时候可以达到复杂 ...

  7. Java线程之如何分析死锁及避免死锁

    什么是死锁 java中的死锁是一种编程情况,其中两个或多个线程被永久阻塞,Java死锁情况出现至少两个线程和两个或更多资源. 在这里,我们将写了一个简单的程序,它将导致java死锁场景,然后我们将分析 ...

  8. JAVA异常及其异常处理方式

    异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Syste ...

  9. System 源码阅读

    System 属性说明 /** * System 类包含了几个有用的字段和方法,并且不能被实例化. * * @author unascribed * @since 1.0 */ public fina ...

  10. GitHub-Microsoft:DotNet4

    ylbtech-GitHub-Microsoft:DotNet4 1.返回顶部 · dotnet-template-samples Samples showing how to create temp ...