**面试题:
你是如何理解cookie的?谈一谈cookie
cookie
1.概念
cookie信息是键值对的形式保存key,value
保存在客户端的数据叫cookie
cookie信息保存在客户端(当前浏览器)
cookie是基于域名的(ip)
2.流程(大体流程)
请求过程(原理)
第一次请求过程
1.我们的浏览器第一次请求服务器的时候,不会携带任何cookie信息
2.服务器接受到请求之后,发现 请求中没有任何cookie信息
3.服务器设置一个cookie信息,这个cookie设置在响应中
4.我们的浏览器接受到这个响应之后,发现响应中有cookie信息,浏览器会将这个cookie信息保存起来
第二次及其之后的请求过程
5.当我们的浏览器第二次及其之后的请求都会携带cookie信息,cookie信息是携带在请求头中的
6.我们的服务器接收到请求之后,发现请求中的cookie信息,就知道是谁的请求了
3.原理,从http协议角度分析:
第一次请求:
1.我们是第一次请求服务器,不会携带任何cookie信息,请求头中没有任何cookie信息
2.服务器会为响应设置cookie信息 响应头中有set_cookie信息
第二次及其之后的请求
3.我们第二次及其之后的请求都会携带cookie信息,请求头中有cookie信息
4.(可选)在当前我们的代码中,没有在响应头中设置cookie,所以响应头中没有set_cookie信息
3.在开发过程中哪里使用了?
Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用。
Cookie 的用途之一是存储用户在特定网站上的密码和 ID
4.在开发过程中遇到什么印象深刻的地方?
def set_cookie(request):
# 1.先判断有没有cookie信息
# 先假设没有
# if request.COOKIES:
# pass
# else:
# 2.获取用户名
username = request.GET.get('username')
# 3.因为假设没有cookie信息,所以服务器就要设置cookie信息
response = HttpResponse('set_cookie')
# cookie信息是键值对的形式保存key,value
# max_age 单位是秒
# 时间是 从服务器接收到这个请求时间 + 秒数 计算之后的时间
# response.set_cookie('itcast1', 'python1') # 临时cookie
# response.set_cookie('itcast2', 'python2', max_age=3600) # 有效期一小时
response.set_cookie('username', username, max_age=3600)
# 删除cookie的2种方式
# response.delete_cookie(key)
# response.set_cookie(key,value,max_age=0)
# 4.返回响应
return response
def get_cookie(request):
# 第二次以及之后的请求(读取)
# cookie信息是在请求头中
# 1.服务器可以接收(查看)cookie信息
cookies = request.COOKIES
# cookies就是一个字典
username = cookies.get('username')
print(username)
return HttpResponse('get_cookie')
session
问题:换了浏览器,还能获取到session信息吗?
不可以,因为session是依赖于cookie的,而cookie是保存在客户端的
不换浏览器的情况下,删除session id 则获取不到session数据,再去执行get_session的时候,会重新生成session id
概念
保存在服务器的数据叫 session
session需要依赖于cookie
如果浏览器禁用了cookie,则session不能实现
1.流程
1第次请求
1.我们第一次请求的时候可以携带一些信息(用户名/密码)cookie中没有任何信息
2.当我们的服务器接收到这个请求之后,进行用户名和密码的验证,验证没有任何问题可以设置session信息
3.在设置session信息的同时(session信息保存在服务器),服务器会在响应头中设置一个session 的cookie信息
4.客户端(浏览器)在接收到响应之后,会将cookie信息保存起来(保存session id信息)
第二次及其之后的请求:
5.第二次及其之后的请求都会携带session id信息 / 请求会携带cookie信息, 其中有一项是sessionid, cookie信息在请求头中
6.当服务器接收到这个请求之后,会获取到sessionid信息,然后进行验证, 验证成功,则可以获取session信息(session信息保存在服务器)
2.原理
第一次请求:
1.第一次请求,(在请求头中)没有携带任何cookie信息
2.我们在设置session的时候,session会做两件事
1.将数据保存在数据库中
2.设置一个cookie信息,这个cookie信息是以sessionid为key
cookie肯定会以响应的形式在响应头中出现
第二次及其之后的请求:
3.都会携带cookie信息,特别是sessionid**
代码操作:
def set_session(request):
# 1.cookie中没有任何信息
print(request.COOKIES)
# 2.对用户名和密码的验证
# 假设认为用户名和密码正确
user_id = 6666
# 设置session信息
# request.session 理解为字典
# 设置session的时候,session做了两件事
# 1.将数据保存在数据库中
# 2.设置一个cookie信息, 这个cookie信息是以sessionid为key
request.session[user_id] = user_id
# 返回响应
return HttpResponse('set_session')
def get_session(request):
# 第二次及其之后的请求:
# 1.请求会携带cookie信息, 其中有一项是sessionid, cookie信息在请求头中
print(request.COOKIES)
# 2.会获取到session信息然后进行验证
# 验证成功, 可以获取session信息
# request.session 字典
user_id = request.session['user_id']
user_id = request.session.get(user_id)
# 返回响应
return HttpResponse('get_session')