一、Cookie

cookie及特点

  • Cookie是由服务器(网站)生成的,存储在浏览器端的 键值对数据(通常经过加密)
  • 在响应请求时,服务器会把生成 Cookie数据 发给浏览器,浏览器会自动保存(前提:浏览器开启了cookie功能)
  • 浏览器请求服务器(网站)时,会自动上传该服务器(网站)生成的所有Cookie
  • Cookie基于 域名安全 的。每个网站只能访问到自己生成的cookie,无法访问其它网站(域)生成的cookie

2.Cookie的应用

  • 保存登录状态:当用户登录某网站后,一定时间内不用再次输入用户名和密码登录。
  • 保存用户浏览器的商品: 再次访问网站时,把用户之前浏览过的商品记录显示出来

3.django中cookies的读取与保存

  1. 保存cookie: 通过HttpResponse响应对象的set_cookie方法保存

     response.set_cookie('键', '值',max_age)
    • max_age 有效期,一个整数,单位为秒,表示在多长时间后失效
    • Cookie默认有效期: 如果不指定有效期,或者max_age值为None,则关闭浏览器后Cookie数据就会过期
  2. 读取cookie: 通过HttpRequest请求对象的COOKIES属性(字典类型)读取

     request.COOKIES['键']  # 一般不用这个,因为没有会报错
    # 或者:
    request.COOKIES.get('键') # 一般用这个,没有时为空
  3. 补充:cookie中文乱码问题解决

    # 保存:中文 -> bytes -> base64字符串
    data = base64.b64encode('中文'.encode()) # 读取: base64字符串 -> bytes -> 中文
    user_name = base64.b64decode(data).decode()

二、Session

1.sessioncookie对比

  • cookie是在浏览器端保存键值对数据,而session是在服务器端保存键值对数据
  • 重要敏感的数据(银行卡账号,验证码,余额等),建议存储在服务器端,不能通过cookie保存到浏览器
  • session 的使用依赖cookie

2.Django中session数据的保存

session数据默认保存在django项目的sqlite数据库的django_session这个表中,保存格式如下:

但是这个sqlite是轻量级数据库,性能不太好。生产环境下我们一般是把session保存在redis数据库中的。

3.关于django中的redis设置

(1)安装依赖包

pip3 install django-redis==4.8.0  # 4.8.0适合django1.11.1使用

(2)setting文件的设置:

MIDDLEWARE = [

...

# 开启session中间件,为了请求前能获取sessionid的值

'django.contrib.sessions.middleware.SessionMiddleware',

]

INSTALLED_APPS = [

...

# 默认导入django自带的session模块

'django.contrib.sessions',

]

# django项目的缓存配置

CACHES = {
     "default": {
         "BACKEND": "django_redis.cache.RedisCache",
         "LOCATION": "redis://127.0.0.1:6379/1",
         "OPTIONS": {
             "CLIENT_CLASS": "django_redis.client.DefaultClient",
                 "PASSWORD": ""
         }
     }
 }

# 默认值,表示存到数据库
# SESSION_ENGINE ='django.contrib.sessions.backends.db'
# session数据缓存到Redis中
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

4.django中的session使用

  • 保存session数据(键值对

    request.session['键'] = 值
  • 读取session数据

    request.session.get('键', 默认值)
  • 删除命令

    # 删除一个sessoin键值对(注意:键不存在会报错 `KeyError`)
    del request.session['键'] # 清除当前访问用户所有的session数据
    request.session.flush() # 删除一条表记录
    request.session.clear() # 清空字段中的session键值对数据
  • 设置session数据有效时间; 如果不设置,默认过期时间为两周

    request.session.set_expiry(value)
    • 如果value是一个整数,则 session数据 将在value秒没有活动后过期
    • 如果value为0,则 session数据 将在用户 关闭浏览器时过期
    • 如果value为None,则 session数据 将在 2周后过期

Django简单设置cookies和session的更多相关文章

  1. django中cookies和session

    django中cookies和session是两个经常使用的用户认证工具.都是类似于字典的数据类型,都是request的内部属性 cookies的读写方法 cookies读,比如username us ...

  2. Django 设置cookies与获取cookies.

    在Django里面,使用Cookie和Session看起来好像是一样的,使用的方式都是request.COOKIES[XXX]和request.session[XXX],其中XXX是您想要取得的东西的 ...

  3. django之cookies,session 、中间件及跨站请求伪造

    cookies 和session 为什么会有cookie? ​ 由于http协议是无状态的,即用户访问过后,不留痕迹(状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被 ...

  4. Django中的分页,cookies与session

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  5. django项目 设置session 实现用户登入登出

    一.配置文件 settngs.py中 # 使用django认知系统的登录状态装饰器时,没有登录的话,跳往登录页面后路径是/acount/login 需要重新指定 LOGIN_URL = '/user/ ...

  6. django form组件 cookies,session

    django form组件 渲染标签  就是组件里面的字段在前端展示叫做渲染标签 校验数据  用户输入的数据提交给后端组件叫做校验数据 forms组件中定义的字段都是必须传值的(required=Tr ...

  7. 一个简单的C#获取Session、设置Session类文件

    一个简单的C#获取Session.设置Session类文件,本类主要实现大家最常用的两个功能: 1.GetSession(string name)根据session名获取session对象: 2.Se ...

  8. django cookies与session

    1. cookiies # cookies def login(request): print('COOKIES',request.COOKIES) print('SESSION',request.s ...

  9. Django中的cookie与session

    cookie与session的实现原理 HTTP被设计为”无状态”,每次请求都处于相同的空间中. 在一次请求和下一次请求之间没有任何状态保持,我们无法根据请求的任何方面(IP地址,用户代理等)来识别来 ...

随机推荐

  1. 使用Oracle绿色客户端(InstantClient)连接远程Oracle的配置方法

    非常简单的配置,网上一搜,有很多,但是还是想记录下来,说不定以后需要了,直接进自己的博客看看也好啊. 下载了PLSQL Developer 11,安装好了发现不能连接远程数据库,但是又不想安装orac ...

  2. springboot11 JPA

    一.JPA 1. JPA 介绍 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到 ...

  3. JavaScript里面的条件、循环语句以及异常处理

    1.JavaScript里面条件语句主要有两种形式 if(条件){ ... }else if(条件){ ... }else{ ...} switch(变量名): case 值1://如果变量名为值1, ...

  4. 台州学院we are without brain 训练 后缀数组

    sa[i]表示排名为 i 的后缀的第一个字符在原串中的位置 rank[i]表示按照从小到大排名  以i为下标开始的后缀的排名 height[i]表示排名为 i 和排名为 i+1的后缀的最长公共前缀的长 ...

  5. linux fork()函数 转载~~~~

    转自  ::  http://blog.csdn.net/jason314/article/details/5640969  一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork ...

  6. [洛谷P3978][TJOI2015]概率论

    题目大意:对于一棵随机生成的$n$个结点的有根二叉树,所有不同构的形态等概率出现(这里同构当且仅当两棵二叉树根相同,并且相同节点的左儿子和右儿子都相同),求叶子节点个数的期望是多少? 题解:令$f_n ...

  7. [NC189C]硬币游戏

    题目大意:有$4n$个硬币,放在$2n$个位置(即放成两排),有两个人,轮流取.第一个人取上面的,第二个人取下面的,每个人只可以取两个人都没取过的位置.若硬币正面向上,为$1$,反面为$0$.把取得的 ...

  8. BZOJ2208 [Jsoi2010]连通数 【图的遍历】

    题目 输入格式 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. 输出格式 输出一行一个整数,表示该图的连通数. 输入样例 3 ...

  9. BZOJ2743 [HEOI2012]采花 【离线 + 树状数组】

    题目 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采 ...

  10. linux后端跑redis

    http://blog.csdn.net/ksdb0468473/article/details/52126009