- Cookie
- cookie理解
- cookie的设置
- cookie的获取
- Session
- 理解:
- session的设置和获取
- session表的删除和建立
- 用户登录与session
- 分析:
- Cookie和Session文字性理解
- **Cookie**有时也用其复数形式-----> Cookies。
- **Session**中文经常翻译为----->会话,
-
可以理解为一小段文本信息, 浏览器首次向服务器发出请求, 服务器会向浏览器颁发一个cookie, 浏览器会将一些数据包括cookie进行保存,
-
浏览器在下一次向服务器发出请求的时候, 浏览器会带着cookie向发出请求 , 服务器通过cookie和一些数据对请求进行验证.
在views.py文件中
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def cookie_test(request):
r = HttpResponse('hello world')
r.set_cookie('lan','python') # 这是保存在浏览器里的 cookie. 在网页源码中可以查看
return r #一定要返回出去否则就是空, 报错
#处理自己设置的cookie外, 浏览器会自己生成以csrftoken的cookie.
cookie的获取
# 通过request.COOKIES.get('lan') 获得上方代码设置的cookie.
def cookie_test(request):
r = HttpResponse('hello world')
r.set_cookie('lan','python',max_age=60) #max_age 设置有效期(生命周期) 60秒
#也可以用expires=datetime.datetime.utcnow()+datetime.timedelta(seconds=60)
#也就是 当前时间utcnow() + 持续时间timedelta(seconds=60)
#注: pycharm会自动 import datetime
print( request.COOKIES.get('lan')) #获取cookie内容, 在后台展示cookie的内容
return r #一定要return出去
Session按住ctrl点击set_cookie ,使用一些方法.
区别: session是保存在服务器里面的
cookie是保存在浏览器里面的.
理解:-
client(客户端)第一次向(sever)服务端发出请求的时候, 服务端会生成session,并将session保存进数据库中,同时生成一个sessionid(相当于一段加密的key)并将 sessionid发送到客户端中,客户端进行保存.
-
当客户端再一次向服务端发出请求的时候,会带着sessionid , 服务端户通过sessionid向数据库进行查找和验证.
session的设置和获取from django.http import HttpResponse
def session(request):
request.session['hello']= 'world' #设置session
print(request.session.get('hello')) #获取session
return HttpResponse('hello Session')
session表的删除和建立
'''当我们进行任意一次数据迁移的时候, 会自己有一个 django_session表.里面存放session_key 和session_data
如果要不小心删除这张django_session表,
就需要 使用删除命令的同时,
删除django_migrations里面的app字段里为sessions的这条数据,只有这样才能 真正删除sessions表
当人们想要创建session的时候 只需要执行 python manage.py migrate 这个迁移命令就行.
'''
#删除命令
drop table django_session;
delete from django_migrations where app = 'sessions'
用户登录与session
分析:
1. 用户登录后会生成sessionid ,之后再次登录的时候浏览器会带着sessionid向服务器发出请求
2.服务器会根据sessionid 到 数据库中找到session_key 这个字段,进而拿到user_id
3.通过user_id找到用户数据进而返回 request.user
注: 所有的登录注册数据都保存在 user= request.user 里面
通过request.user.字段名获得用户登录注册的信息
例如: request.user.username 拿到用户名
request.user.email 拿到注册的时候的email
Cookie和Session文字性理解
Cookie有时也用其复数形式-----> Cookies。
指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。最新的规范是 RFC6265 。
- Cookie 可以理解为一个凭证 1.实际是由服务器发给客户端的特殊信息, 2.这些信息以文本文件的方式存放在客户端, 3.客户端每次向服务器发送请求的时候都会带上这些特殊的信息。 服务器在接收到Cookie以后,会验证Cookie的信息,以此来辨别用户的身份。
其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。这个词在各个领域都有在使用,
Session的目的则是,在一个客户从打开浏览器到关闭浏览器这个期间内,发起的所有请求都可以被识别为同一个用户。
而实现的方式则是,在一个客户打开浏览器开始访问网站的时候,会生成一个cookie,SessionID,这个ID每次的访问都会带上,而服务器会识别这个SessionID并且将与这个SessionID有关的数据保存在服务器上。由此来实现客户端的状态识别。因此session是基于cookie的。
Session与Cookie相反,Session是存储在服务器上的数据,只由客户端传上来的SessionId来进行判定,所以相对于Cookie,Session的安全性更高。
一般SessionID会在浏览器被关闭时丢弃,或者服务器会验证Session的活跃程度,例如30分钟某一个SessionID都没有活跃,那么也会被识别为失效。



