Cookie和Session

1Cookie:

特点:1.是保存在客户端浏览器上的,2.是明问传递的

2.设置Cookie:
# 设置cookie
class Cookie(View):
    def get(self,request):
    	#获取Cookie:
        cookie_data = request.COOKIES.get('shenfen')
        #判断Cookie是存在的
        if cookie_data is not None:
        #如果存在就渲染出set_cookie(key,value)方法中的键,就是已存在的状态
            return HttpResponse(f"cookie信息已存在{cookie_data}")
        else:
        #如果不存在,就使用set_cookie(key,value)携带cookie返回
            resp = HttpResponse("设置cookie")
            resp.set_cookie('shenfen','huangjindashen')
            return resp
3.删除Cookie:
# 删除cookie:
class Delete(View):
    def get(self,request):
    #获取Cookie:
        cookie_data = request.COOKIES.get("shenfen")
        if cookie_data is not None:  #如果不为空就删除身份状态
            resp = HttpResponse(f'删除cookie{cookie_data}')
            resp.delete_cookie('shenfen') #删除
            return resp #返回删除cookie这句话
        else:
        #如果为空,就直接返回不存在就行了
            return HttpResponse('cookie不存在')

2.Session

session是另一种记录客户状态的机制,保存在服务器上

1.获取Session:
session_data = request.session.get(Key)
session_data = request.session[Key]
在`Session`中获取对应值,`get`方法获取时,如不存在该`Key`值,不会引发异常,返回`None`
而第二种直接通过get方法获取,如`Key`值不存在,引发`KeyErro`
2.删除Session方法:
1.del request.seesion[Key]
# 删除对应session,Key值不存在时,引发KeyError

2.request.session.clear()
# 清空Session中的所有数据。这里客户端还会保留sessionid;
# 只不过在服务端sessionid对应的数据没有了

3.request.session.flush()
# 直接删除当前客户端的的Seesion数据。这里不光服务端sessionid对应的数据没有了,客户端的`sessionid`也会被删除
3.设置Session:
class Session(View):
#     设置session
    def get(self,request):
    #获取session
        session_data = request.session.get('money')
        #判断不为空时就打印设置的数据的键
        if session_data is not None:
            return HttpResponse(f"session信息为:{session_data}")
        else:
        #为空时就设置session
            request.session['money'] = 10000000
            return HttpResponse("设置session")
4.删除session:
class Deletesession(View):
    # 删除session
    def get(self,request):
        # 获取money:
        session_data = request.session.get('money')
        #如果不为空就可以用del方法删除
        if session_data is not None:
            del request.session['money']
            return HttpResponse("seeion以删除")
        else:
        #如果为空就返回不存在
            return HttpResponse("session不存在")
5.Session与Cookie的对比:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

3.Csrf

1. 什么是CSRF:

CSRF(Cross-site request forgery):跨站请求伪造。

2. 如何防止CSRF攻击:

讨论 GET 和 POST 两种请求,对于 GET,其实也没什么需要防范的。为什么?

因为 GET 在 “约定” 当中,被认为是查询操作,查询的意思就是,你查一次,查两次,无数次,结果都不会改变(用户得到的数据可能会变),这不会对数据库造成任何影响,所以不需要加其他额外的参数。
对于 POST,服务端在创建表单的时候可以加一个隐藏字段,也是通过某种加密算法得到的。在处理请求时,验证这个字段是否合法,如果合法就继续处理,否则就认为是恶意操作。
这个 html 片段由服务端生成。

这的确是一个很好的防范措施,再增加一些处理的话,还能防止表单重复提交。

可是对于一些新兴网站,很多都采用了 “前后端分离开发” 的设计,或者退一步,无论是不是前后端分离,它的 HTML 可能是由 JavaScript 拼接而成,并且表单也都是异步提交。所以这个办法有它的应用场景,也有局限性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值