首页 > 其他分享 >cookie与session

cookie与session

时间:2022-12-28 18:56:35浏览次数:29  
标签:return get request session cookie path

目录

cookie与session

cookie与session简介

最开始的网站都不需要用户注册,所有人来访问获取到的数据都是一样的,随着互联网的发展很多网站需要指定当前用户的状态.后续我们还会学习token,jwt等各种技术

cookie

保存在客户端与用户状态相关的信息

session

保存在服务端与用户状态相关的信息

补充知识: session的工作需要依赖于cookie,浏览器有资格拒绝保存服务端发送过来的cookie数据

django操作cookie

from django.shortcuts import render,HttpResponse,redirect
return render()
return HttpResponse()
return redirect()

要想操作cookie就不能直接返回HttpResponse对象 必须先用变量接收
obj1 = render()
return obj1
obj2 = HttpResponse()
return obj2
obj3 = redirect()
return obj3

用户登录功能--基础版

一个用户的登录功能

def login_func(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username == 'jason' and password == '123':
            obj = redirect('/home/')
            obj.set_cookie('name', username)
            return obj
    return render(request, 'loginPage.html')

def login_auth(func_name):
    def inner(request, *args, **kwargs):
        if request.COOKIES.get('name'):
            res = func_name(request, *args, **kwargs)
            return res
        return redirect('/login/')

    return inner


@login_auth
def home_func(request):
    return HttpResponse('home页面 只有登录的用户才可以查看')

用户登录功能--进阶版

用户没有登录之前就想访问某个网站输入用户名密码之后就应该调回该网站

def login_func(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username == 'jason' and password == '123':
            target_path = request.GET.get('next')
            if target_path:
                obj = redirect(target_path)
            else:
                obj = redirect('/home/')
            obj.set_cookie('name', username)
            return obj
    return render(request, 'loginPage.html')


def login_auth(func_name):
    def inner(request, *args, **kwargs):
        # print(request.path)  # 只获取用户输入的路由信息
        # print(request.path_info)  # 只获取用户输入的路由信息
        target_path = request.path_info
        # print(request.get_full_path())  # 获取用户输入的路由信息+问号后面携带的数据
        if request.COOKIES.get('name'):
            res = func_name(request, *args, **kwargs)
            return res
        return redirect('/login/?next=%s' % target_path)

    return inner

所谓退出登录本质就是将客户端的标识用户身份的cookie删除掉

django操作session

​ 由于session是保存在服务端上面的数据,就应该有个地方能够存储,我们只需要执行数据库迁移命令即可,django会自动创建很多需要的表.django默认的session失效时间是14天.

设置session

request.session['key']=value
1.生成一个随机字符串
2.对value的数据做加密处理,并在django_session表中存储
	随机字符串>>>加密数据
3.将随机字符串也发送一份给客户端保存(cookie)
	sessionid:随机字符串

获取session

request.session.get('key')
1.自动获取客户端携带的加密字符串
2.自动去django_session表中根据随机字符串获取加密的数据(比对是否有对应记录)
3.如果有自动获取加密的数据并解密到request.session.get()中

补充知识:

1.可以设置过期时间
2.存储session的数据位置也可以修改

# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()
# 检查会话session的key在数据库中是否存在
request.session.exists("session_key")
# 删除当前会话的所有Session数据
request.session.delete()
# 删除当前的会话数据并删除会话的Cookie。
request.session.flush() 
# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。

标签:return,get,request,session,cookie,path
From: https://www.cnblogs.com/zhanglanhua/p/17011041.html

相关文章

  • session,cookie和token的区别
    session,cookie和token究竟是什么?cookie和sessionhttp是一个无状态协议什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。这种无状态......
  • nginx根据cookie分流
    nginx根据cookie分流众所周知,nginx可以根据urlpath进行分流,殊不知对于cookie分流也很强大,同时这也是我上篇提到的小流量实验的基础。二话不说,先看需求,两台服务器分别定义......
  • Cookie
    Cookie技术核心Cookie类:用于存储会话数据1)构造Cookie对象Cookie(java.lang.Stringname,java.lang.Stringvalue)2)设置cookievoidsetPath(java.lang.Strin......
  • sqlSession封装以及CRUD的实现
    sqlSession封装以及CRUD的实现封装MyBatisUtil  dao定义方法  映射文件写sql语句  daoimpl实现类实现方法  test类测试方法  整体结构......
  • 使用Spring Session实现Spring Boot水平扩展
    小编说:本文使用SpringSession实现了SpringBoot水平扩展,每个SpringBoot应用与其他水平扩展的SpringBoot一样,都能处理用户请求。如果宕机,Nginx会将请求反向代理到其他运行......
  • WWDC 2013 Session笔记 - iOS7中的ViewController切换
    这是我的WWDC2013系列笔记中的一篇,完整的笔记列表请参看​​这篇总览​​​。本文仅作为个人记录使用,也欢迎在​​许可协议​​​范围内转载或使用,但是还烦请保留原文链接,谢......
  • 【JS 逆向百例】某网站加速乐 Cookie 混淆逆向详解
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!逆......
  • cookie和session
    cookie和session简介http协议中规定了浏览器不会保存客户端的状态,无状态特性。但是我们有时候需要保存用户的登录状态,不然用户每次访问都需要再次登录,所以有了用户校验用......
  • cookie与session django中间件 插拔式设计
    今日内容总结django中间件三个了解的方法(较冷门)#1.process_view 路由匹配成功之后执行视图函数/类之前自动触发(顺序同proess_request)#2.process_exception ......
  • Django中间件三个了解方法,基于Django中间件的功能设计,Django操作cookie与session
    目录Django中间件三个了解方法,基于Django中间件的功能设计,Django操作cookie与session今日内容概要今日内容详细Django中间件三个了解的方法基于Django中间件的功能设计cook......