django session深入

转至原文  https://www.cnblogs.com/zhaof/p/6281468.html

基于cookie做用户验证时:敏感信息不适合放在cookie中

session依赖cookie

session原理

cookie是保存在用户浏览器端的键值对

session是保存在服务器端的键值对

session服务端中存在的数据为:

session = {

   随机字符串1:{

   用户1的相关信息

}

   随机字符串2:{

   用户2的相关信息

}

}

session客户端即客户端的浏览器的cookie中存的数据是当前用户对应的随机字符串

session的工作过程

1、    生成随机字符串

2、    写到用户浏览器的cookie中

3、    保存到session中

4、    在随机字符串对应的字典中设置相关内容

而上述过程在Django中的体现为:

request.session["username"]=user

这里的username为通过request.POST.get("username")从前端html页面中获取到的用户名信息

注意:

在Django中要用session中一定要先执行:

python manage.py makemigrations

python manage.py migrate

当用户登录的时候的就会在数据库的django_session表中记录session信息

同样的通过request.session["username"]也可以获取相应的值

在这个过程中:

1、    首先获取当前用户的随机字符串

2、    根据随机字符串获取对应的内容

session的操作

request.session["k1"]  如果不存在则会报错

request.session.get["k1"],如果不存在则会报错,为了防止出错可以request.session.get(‘k1‘,none)

request.session[‘k1‘] = 123 设置session值

request.session.setdefault(‘k1‘,123)  存在则不设置

del request.session[‘k1‘]  删除

request.session.clear()    删除

所有 键、值、键值对

request.session.keys()

request.session.values()

request.session.items()

request.session.iterkeys()

request.session.itervalues()

request.session.iteritems()

用户session的随机字符串

request.session.session_key

将所有Session失效日期小于当前日期的数据删除

request.session.clear_expired()

检查 用户session的随机字符串 在数据库中是否

request.session.exists("session_key")

删除当前用户的所有Session数据

request.session.delete("session_key")

request.session.set_expiry(value)

默认的过期时间是两周,如果自己设置了过期时间,这样自己设定的优先级就会高于默认的

如果value是个整数,session会在些秒数后失效。

如果value是个datatime或timedelta,session就会在这个时间后失效。

如果value是0,用户关闭浏览器session就会失效。

如果value是None,session会依赖全局session失效策略。

配置setting.py

SESSION_COOKIE_NAME = "sessionid"      # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)

SESSION_COOKIE_PATH = "/"              # Session的cookie保存的路径(默认)

SESSION_COOKIE_DOMAIN = None             # Session的cookie保存的域名(默认)

SESSION_COOKIE_SECURE = False          # 是否Https传输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的存储方式

Django中支持session,其中内部提供了5种类型的session供开发者使用:

数据库(默认)

缓存

文件

缓存+数据库

加密cookie

1、如果是数据库,需要在settings.py中配置如下:

SESSION_ENGINE = ‘django.contrib.sessions.backends.db‘ (引擎(默认))

2、如果是缓存session,需要在settings.py中配置如下:

SESSION_ENGINE = ‘django.contrib.sessions.backends.cache‘(引擎)

SESSION_CACHE_ALIAS= ‘default‘  使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

1、    如果是文件session, 需要在settings.py中配置如下:

SESSION_ENGINE = ‘django.contrib.sessions.backends.file‘ (引擎)

SESSION_FILE_PATH=None  缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()

2、    如果是缓存+数据库session,需要在settings.py中配置如下:

SESSION_ENGINE=‘django.contrib.sessions.backends.cached_db‘       (引擎)

原文地址:https://www.cnblogs.com/Liang-jc/p/9326817.html

时间: 2024-10-14 00:51:41

django session深入的相关文章

Redis+Django(Session,Cookie、Cache)的用户系统

转自 http://www.cnblogs.com/BeginMan/p/3890761.html 一.Django authentication django authentication 提供了一个便利的user api接口,无论在py中 request.user,参见 Request and response objects .还是模板中的 {{user}} 都能随时随地使用,如果从web开发角度来看,其实无非就是cookie与session的运用. 在项目首页,在登陆和注销状态下分别输出

django session, 分页,数据库学习

一.http请求周期 浏览器(socket客户端):     2.socket.connect(ip,端口)     3.socket.send("     规则: http协议         GET请求:             "GET  /index.html?k1=1&k2=2  Http/1.1\r\nhost:www.xiaohuar.com\r\ncontent-type: application/json\r\n\r\n"              

Django session cookie 上传文件、详解

session 在这里先说session 配置URL from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'csvt11.views.home', name='home'), # url(r'^blog/', include('blog

python Django session/cookie

一, Cookie #cookie # def cook1(request): # print(request.COOKIES) # 查看cooke # # print(request.get_signed_cookie('k2',salt='uuu')) # rep = HttpResponse('ok') # 设置cook 必须在响应里面设置 # # rep.set_cookie('k1',123) # 普通的cooke # # rep.set_signed_cookie('k2',666,

django session

how to decode the data in session: python manage.py shell: from django.contrib.sessions.models import Session #... sess = Session.objects.all()for s in sess: print(s.session_data) print(s.get_decoded())

Django Session常用配置

Django对于Session有一些默认的配置,这些默认配置为: SESSION_COOKIE_NAME == "sessionid"      #Session的cookie保存在浏览器上时的key SESSION_COOKIE_PATH == "/"              #Session的cookie保存的路径(默认) SESSION_COOKIE_DOMAIN = None            #Session的cookie保存的域名(默认) SESS

django session和cooikes介绍

session&cooikes 名称解释 cooikes在计算机中是指一种能够让网站服务器把少量数据存储到客户端的硬盘或者文件内.重点是存放在客户端的一个键值对.好处:是互联网的网网络使用起来更方便了一些.坏处:由于是明文存在于客户端,安全性不好.session是存在于服务器上一个数据.作用是用来验证和保持会话,它是依赖cooikes的. 案例分析学习 通过设计一个网站登陆跳转的页面来分析下session和cooikes. 创建views代码 def login(request): if req

Django——Session源码分析

首先我们导入django.contrib.sessions.middleware这个中间件,查看里面的Session源码 from django.contrib.sessions.middleware import SessionMiddleware 我们可以看到一个类,可以把他分为3部分: class SessionMiddleware(MiddlewareMixin): def __init__(self, get_response=None): ... def process_reques

Django session存储到redis数据库

把session存储到redis数据库,需要在setting中配置 django-redis 中文文档 http://django-redis-chs.readthedocs.io/zh_CN/latest/#cache-backend 在使用django1.6+的时候,默认会吧session存放在数据库django_session表里.如果要把session放在内存中,就应该在settings.py 中配置SESSION_ENGINE = "django.contrib.sessions.ba