• cookie和session


    cookie和session

    用户登录, 未登录不能访问指定页面

    基于cookie实现

    保存在用户浏览器端的键值对, 向服务端发请求时会自动携带
    
        def login(request):
            # 设置cookie
            data = redirect('...')
            data.set_cookie()
            # 读取cookie
            request.COOKIES.get('xx')
            return data
    
    cookie的三个参数:
        key,value='',max_age=None
            
    应用场景:
        用户认证
        投票
        每页默认显示多少数据
    

    基于session实现(推荐)

    依赖cookie
    
    是一种存储数据的方式, 依赖于cookie, 实现本质:
        用户向服务端发送请求, 服务端做两件事:
            生成随机字符串;
            为此用户开辟一个独立的空间来存放当前用户独有的值.
            
    在空间中如何设置值:
        request.session['x1'] = 123
        request.session['x2'] = 456
    在空间中取值:
        request.session['x2'] (没有数据会报错)
        request.session.get('x2')
            
    视图函数中的业务操作处理完毕, 给用户响应, 在响应时会将随机字符串存储到用户浏览器的cookie中.
        
    应用场景:
        用户认证
        短信验证过期
        权限管理
        
    session中数据是根据用户相互隔离的
    

    通过js设置cookie

    document.cookie = 'k1=wy;path=/'
    
    $.cookie('k1','wy222',{path:'/'})
    
    path不同会导致设置不同
    path的作用:
        / , 当前网站中所有的URL都能读取到此值.
    	"",只能在当前页面访问的到此数据.
    	/index/ ,只能在/index/xxx 的网页中查看.
    

    cookie和session的区别

    	cookie是存储在客户端浏览器上的键值对,发送请求时浏览器会自动携带. session是一种存储数据方式,基于cookie实现,将数据存储在服务端(django默认存储到数据库).其本质是:
    	用户向服务端发送请求,服务端做两件事:
            生成随机字符串;
            为此用户开辟一个独立的空间来存放当前用户独有的值.
    

    django和session相关的配置

    SESSION_COOKIE_NAME = "sessionid" 
    # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
    SESSION_COOKIE_DOMAIN = None 
    # api.baidu.com /www.baidu.com/ xxx.baidu.com
    SESSION_COOKIE_PATH = "/" 
    # Session的cookie保存的路径
    SESSION_COOKIE_HTTPONLY = True 
    # 是否Session的cookie只支持http传输
    SESSION_COOKIE_AGE = 1209600 
    # Session的cookie失效日期(2周)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False 
    # 是否关闭浏览器使得Session过期
    SESSION_SAVE_EVERY_REQUEST = False 
    # 是否每次请求都保存Session,默认修改之后才保存
    

    django中的session如何设置过期时间

    SESSION_COOKIE_AGE = 1209600 
    # Session的cookie失效日期(2周)
    

    django的session默认存储在数据库, 可以放在其他地方吗

    小系统: 默认放在数据库
    大系统: 缓存(redis)
    
    文件
    SESSION_ENGINE ='django.contrib.sessions.backends.file'
    SESSION_FILE_PATH = '/sssss/'
    
    缓存(内存)
    SESSION_ENGINE ='django.contrib.sessions.backends.cache'
    SESSION_CACHE_ALIAS = 'default'
    CACHES = {'default': 
        	 	{'BACKEND':'django.core.cache.backends.locmem.LocMemCache',
    			 'LOCATION': 'unique-snowflake',
    			}
    		 }
    
    缓存(redis)
    SESSION_ENGINE ='django.contrib.sessions.backends.cache'
    SESSION_CACHE_ALIAS = 'default'
    CACHES = {"default": 
               {"BACKEND":"django_redis.cache.RedisCache",
    			"LOCATION":"redis://127.0.0.1:6379",
    			"OPTIONS": 
                	{"CLIENT_CLASS":"django_redis.client.DefaultClient",
    				 "CONNECTION_POOL_KWARGS":
                     	{"max_connections": 100}
    						# "PASSWORD": "密码",
    				}
    			}
    		  }
    
    操作session
    # 设置(添加或修改)
    request.session['x1'] = 123
    request.session['x2'] = 456
    
    # 读取
    request.session['xx'] (取不到值时报错)
    request.session.get('xx')
    
    # 删除
    del request.session['xx']
    
    # 其他操作
    request.session.keys()    # 取键
    request.session.values()  # 取值
    request.session.items()   # 取键值对
    request.session.set_expiry(value)  # 设置过期时长, 可以是整数(秒), 可以是datetime
    request.session.session_key # 取随机字符串
    

    tips

    orm字段中的verbose_name

    目前当注释用
    以后在model form中和form中用
    

    路由系统中加入终止符$防止url截取

    用户名和密码监测

    XXXX.first()
    # 返回对象或None
    XXXX.exists()
    # 返回布尔值
    

    模板查找顺序

    先:根目录templates
    后:根据app注册顺序去每个app的template中找
    
  • 相关阅读:
    jquery
    实现元素垂直居中
    浏览器 标准模式和怪异模式
    cookie session ajax
    React props.children
    使用React.lazy报错Import in body of module; reorder to top import/first
    state 和 props 之间的区别
    Harbor打怪升级
    Centos7下安装yum工具
    正则表达式匹配两个特殊字符中间的内容(特殊字符不显示)
  • 原文地址:https://www.cnblogs.com/beichen123/p/11937295.html
Copyright © 2020-2023  润新知