首页 > 其他 > 详细

cookie和session

时间:2019-11-26 19:05:58      阅读:84      评论:0      收藏:0      [点我收藏+]

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中找

cookie和session

原文:https://www.cnblogs.com/beichen123/p/11937295.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!