面试时cookie和session的常问方式

**面试题:

你是如何理解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')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值