cookie 和 session

cookie 和 session

cookie 介绍
  • cookie有服务器产生,返回给浏览器,浏览器保存

  • 当再次访问服务器的时候,浏览器会携带这个网络产生的cookie

  • cookie存储在浏览器中,不安全,cookie中不要存储重要信息

    from django.http import HttpResponse
    	
        --设置 cookie
        	response = HttpResponse("写入cookie到浏览器中!")
            response.set_cookie("name","hellow world")
            
        --获取 cookie
        	name = request.COOKIES.get("name")
            
        --销毁 cookie
        	response = HttpResponse("删除浏览器cookie")
            response.delete_cookie("name")
            
      --设置过期时间
        	def set_expir_cookie(request):
                username = 'zhangsan'
                if username == 'zhangsan':
                    res = HttpResponse('登陆成功')
                    res.set_cookie('username', username, max_age=60) # 单位是秒
                    return res
                else:
                    return HttpResponse('登陆失败')
    
  • 设计用户登录案例(无数据版)

    ​ 效果:

    ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-so7A8LHJ-1612189055322)(image\day4\cookie.jpg)]

    给浏览器返回一个登录页面

    class login(View):
        # 处理get请求,返回页面,让前端填写
        def get(self, request):
            return render(request, "login.html", locals())
    

    设计一个登陆页面

    # 因为是浏览器向后端发送数据所以要设置为post请求
    <form action="" method="post">
            <p>用户名:<input type="text" name="user"></p>
            <p>密码:<input type="text" name="password"></p>
            <button type="submit" value="登录">登录</button>
    </form>
    

    处理post请求,实现登录

    # 处理post请求,实现登录
        def post(self, request):
            # 获取用户名和密码
            user = request.POST.get('user')
            password = request.POST.get('password')
    
            # 验证用户和密码
            if user == '肖战' and password == '123':
                # 使用cookie,生成一个钥匙,实现状态保持
                response = redirect('/users/index/')
    
                # 判断用户名和密码正确以后,设置cookie
                response.set_cookie('user', user)
    
                # 响应,登陆成功,重定向到首页
                return response
    
            else:
                return HttpResponse('用户名或密码错误,登陆失败')
    

    判断浏览器中是否有该 user 的 cookie

    class index(View):
        def get(self,request):
    
            # 获取cookie
            user=request.COOKIES.get('user')
    
            #如果request中有name这个cookie,说明已经登陆,返回首页
            if user:
                return render(request, 'index.html', locals())
            else:
                return HttpResponse('没有name这个cookie, 说明没有登陆,请先去登陆')
    

    首页页面

    <body>
        <h1>这是首页-----</h1>
    
        <a href="/users/logout/">退出登陆</a>
    </body>
    

    退出登录

    class logout(View):
    
        def get(self, request):
    
            # 删除cookie
            response = redirect('/users/login')
            response.delete_cookie('user')
    
            # 重定向到登陆页面
            return response
    
session介绍
  • 客户端访问服务端,服务端为每一个客户端返回一个唯一的sessionid

  • 客户端需要保持某些状态。那么服务端会构造一个{sessionid: xxx }类似这样的字典数据加到Cookie中发送给用户,注意此时,只是一个随机字符串,返回给客户端的内容并不会像之前一样包含实际数据

  • 服务端在后台把返回给客户端的xxx字符串作为key值,对应需要保存的服务端数据为一个新的字典,存储在服务器上

  • session的一些操作

    设置session

    def set_session(request):
        username = 'zhangsan'
        if username == 'zhangsan':
      		request.session['uname'] = 'xxxx'
      		return HttpResponse('登陆成功')
        else:
            return HttpResponse('登陆失败')
    

    读取session

    def get_session(request):
      	res = resquest.session.get('uname', None)
    	if res:      
      		return HttpResponse('当前用户:{}'.format(res))
        else:
            return HttpResponse('获取失败')
    

​ 删除session

def del_session(request):
  	# 清空所有缓存
  	request.session.clear()
 	# 清除指定的缓存
  	request.session.remove('key')
  	# 或者
  	request.session.pop('key')

​ 设置session有效时间

def set_expir_session(request):
  	request.session['uname'] = 'xxxx'
  	request.session.set_expir(10) # 设置有效期为10秒
  	return HttpResponse('ok')

效时间

def set_expir_session(request):
  	request.session['uname'] = 'xxxx'
  	request.session.set_expir(10) # 设置有效期为10秒
  	return HttpResponse('ok')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值